VBAでセルの範囲、行と列の選択、書き込み、コピー、削除、挿入などについて

EXCELは多くのオブジェクトで構成されており、それぞれに属性とメソッドがあります。オブジェクトは、すべての既存のものとして理解できます。同じプログラム内のオブジェクトの間には、従属または同級の関係で、従属関係は英字の[.]で接続されています。

例えば:

application.workbooks(1).worksheets(1).range("A1")

これは、現在のアプリケーション(excel)で開かれた最初のワークブックにある最初のワークシートのセルA1を意味しますが、一般的にはそんなに複雑である必要はありません。現在のテーブルのみを操作する場合は、 以前のステップは省略できます。range(“A1”)と入力するだけでいいです。同じワークブックのワークシート1でワークシート2を操作する場合は、ワークシートを指定する必要がありますが、ワークブック名を指定する必要はありません。 ワークブックを指定しない場合、デフォルトは同じワークブックです。ワークシートを指定しない場合、デフォルトは同じワークシートです。最初のワークブックで2番目のワークブックを操作する場合は、2番目のワークブックを指定する必要があります。 数値を使用してワークブックまたはワークシートを指定できるだけでなく、ワークブック名でも指定できます。これより、操作しているワークブックまたはワークシートをより直観的に分かれます。前提はワークブック名またはワークシート名の情報が分かります。

workbooks(“2021年の売上報告”).worksheets("1月の売上報告").range("A1")

[2021年の売上報告]というワークブックにある[1月の売上報告]というワークシートのセルA1を意味します。

各オブジェクトには対応する属性とメソッドがあります。オブジェクトと属性またはメソッドの間は、英字の[.]で接続されています。例えば、セルの幅と高さ、配置、罫線、背景色などはセルの属性です。これらの属性を設定できます。

例えば:

rows(1).rowheight=20は、現在のワークシートの最初の行の高さが20を設定します。英字の[.]は「何の何」にある「の」とするように理解できます。

VBAの学習を始めたばかりの方は、VBAコードエディタのイミディエイトウィンドウで練習することをお勧めします。イミディエイトウィンドウを開く方法は、EXCELでALT+F11を同時に押して、コードエディタを開きます。開いたエディタにイミディエイトウィンドウが表示されない場合はCtrl+Gを押すか、ツールバーの[表示]> [イミディエイトウィンドウ]をクリックするか、両方ともイミディエイトウィンドウを開けます。VBAコードエディタの画面を次のように調整し、実行結果を随時に確認できます。

コードを入力し、Enterキーを押して、対応する範囲に結果を表示します。

現在のワークシートが最初に開かれたワークブックにある最初のワークシートである場合、次のコード行はまったく同じ効果になります。

Cells(1,1).value
Range("A1").value
sheets(1).cells(1,1).value=1
worksheets(1).cells(1,1).value=1
workbooks(1).worksheets(1).cells(1,1).value=1
application.workbooks(1).worksheets(1).cells(1,1).value=1

worksheetsはsheetsと略して書けます。

上記のsheets(1).cells(1,1).value=1とworksheets(1).cells(1,1).value=1はまったく同じです。

ワークシートはEXCELの基礎であるため、VBAの基礎は、VBAを使用してテーブルを操作することです。VBAを使用して現在のワークシートを操作する方法を理解すると、将来、他のワークシートやワークブックを簡単に操作できます。次、著者はまとめた結論に基づいて、現在のワークシートを例として挙げます。

指定された範囲に書き込み、削除、コピー、貼り付け、数式の入力、数式の補充などの操作は最も基本的な操作です。これより、任意の操作を行う前に、テーブルから操作範囲を指定する必要があります。セルはテーブルにある最も小さい範囲です。範囲はrange(“範囲”)で表すことができます。

例えば:

  • Range(“A1”).Select セルA1を選択します
  • Range(“A1:F10”).SelectセルA1〜F10を範囲として選択します
  • Range(Cells(1, 1), Cells(3, 3)).select セル範囲A1:C3を選択します
  • Range(“A:A”).Select列Aを選択します
  • Range(“A:F”).Select列A〜Fを選択します
  • RANGE(“A1:D5,F2:G2,H:H”).Select指定された3つのセル範囲A1:D5、F2:G2、列Hを選択します
  • Range(“1:1”).Select 1行目を選択します
  • Range(“1:1,8:8,12:12”).Select1行目、8行目、12行目を同時に選択します
  • Range英字の括弧[]を代わりに使用できます。次の書式にすることができます
  • Range(“A1”) は[A1]と省略できます
  • Range(“A2:B2”) は[A2:B2]と省略できます
  • しかし:
  • Range(“1:1,8:8,12:12”)は [“1:1,8:8,12:12”]と省略できません
  • Range(Cells(1, 1), Cells(3, 3)) は [Cells(1, 1), Cells(3, 3)]と省略できません

ワークシートは多くのセルで構成されています。すべてのセルはcellsで表されるため、cellsもすべてのセルを表します。セルを指定する場合は、cellsの後に行と列を指定するだけでいいです。例えば、cells(1,1)、最初の行と最初の列であるセルA1を表します。後にセルを指定しない場合は、すべてのセルを表します。例えば、cells.selectは、現在のワークシートのすべてのセルを選択して機能します。 テーブルはセルで構成されている以外、行または列でも構成できるため、セル、行、または列範囲の選択は色々あります。行または列も範囲であるため、rangeを使用して指定できます。

次には幾つかのセルの選択方法を挙げます

  • cells(10).selectは、テーブルの10番目のセルを選択します。順序は左から右、上から下です。この方法はあまり使用されません。
  • Cells(1, 1).Selectは、最初の行と最初の列であるセル、つまりセルA1を選択することを意味します。

Cellsの使用方法とrangeの使用方法は異なります。range(“A1”)は列番号の文字と行番号で表されます。行番号は列番号の後になります。英字の二重引用符 “”で囲まれています。これは文字列を意味します。 cells(1,1)の形式では、列番号は行番号の後になります。中央には英字のコンマで区切られ、二重引用符は必要ではありません。つまり、中にある数字は数値です。

実際、cellsは別の使用方法があります。cells(1,”A”).selectです。前は行番号、値は1、後ろには文字列番号「A」です。プログラミングをするときは、rangeよりもcellsを使用する方が柔軟です。 変数を置換できると便利です。

cellsはrangeのように範囲を直接指定することはできませんが、Resize属性と組み合わせて範囲を指定できます。Resize属性は指定した範囲を調整できます。

例えば:

Cells(1, 1).Resize(4, 4).Selectは、最初の行と最初の列であるセル(つまり、セルA1)が左上隅の最初のセルであり、右下隅へ4 * 4セル範囲に調整されることを意味します。range(“A1:D4”)と同じです。

Rowsは現在のワークシートのすべての行の集合であるため、rowsを使用して行を指定することもできます

例えば:

  • Rows(1).select  1行目を選択します
  • Rows.select、すべての行を選択します。Cells.SelectおよびColumns.Selectと同じ効果があり、テーブル上のすべてのセルを選択することに相当します。
  • columnsは、現在のワークシートのすべての列の集合です
  • Columns(1).select 1列目を選択します
  • Columns.Select すべての列を選択します

上記には、セル、行、列、範囲が直接指定されることを説明しましたが、VBAの自動化を実現するために、変量を使用します。では、どうやって変量を使用して範囲を選択しますか?

上記の例で述べたように、range(“A1”)で範囲を選択する場合、英字の二重引用符を追加する必要があります。つまり、文字列型です。cells(1,1)で範囲を選択する場合、追加する必要がありません。 二重引用符は数値型を代表します。 変数は任意の型を代表します。もちろん、変数の型を手動で指定することもできます。 指定しない場合、変数の型は変更でき、状況に応じて調整されます。 型を指定しない方が便利なようですが、万全ではありません。

1つは、多くのストレージスペースを占めることで、もう1つは、実行速度が遅いことです。結局、実行するたびに、どの型であることを判断する必要があります。また、変数に値を割り当てるとき、それが型の要件を満たしているかどうかを確認しません。未知のエラーを発生する可能性があり、エラーの原因を見つけるのがより困難になります。 例えば、2つの文字列型の数値変数はa=”2″,b=”3″がある場合、イミディエイトウィンドウでmsgbox a + b,msgbox a – b,msgbox a * b,msgbox a / bを使用すると、 結果はどうなりますか?2つの変数の減算、乗算、除算は数値の計算と同じですが、加算は異なります。a + bの結果は5ではなく23になります。+記号はVBAで2つの文字列を接続するために使用できます。変数の型を指定しない場合、最初に数値型である必要の変数に文字列型を割り当てます。実行の過程にはエラーを表示しないため、エラーがいつ発生するかはわかりません。 または、エラーを見つけますが、原因を見つけるのに時間がかかります。

変数と組み合わせて使用する場合は、記号&を使用して接続する必要があります。変数の型に関係なく、二重引用符は必要ありません。

変数を使用してRangeの選択方法の例:

  • X = 2
  • y = 3
  • Cells(X, y).Select 2行目と3列目であるセルを選択します
  • Range(“a” & X).Select セルA2を選択します
  • Range(“a” & X & “:c5”).Select セル範囲A2:C5を選択します
  • Range(“a1:” & “c” & y).Select セル範囲A1:C3を選択します
  • Range(“a” & X & “:” & “b” & y).Select セル範囲A2:B3を選択します

次にはいくつかのRangeオブジェクトの最も常用な属性とメソッドを説明します。

Range.value属性は、設定されたrangeオブジェクトの内容を返します。

例えば:

  • a=Range(“A1”).valueはセルA1の値を変数aに返します。
  • Range(“A1”).value=”名前” セルA1の内容を “名前”に設定します。設定した内容が文字列の場合は、英字の二重引用符で囲む必要があります。数値や変数などの他の型には二重引用符は必要ありません。

内容を数式として設定するには、次の例に示すように、数式の前に=記号を追加し、セルE2に合計数式を追加します。変数を使用して合計範囲を指定します。

Range(“E2”).value = “=sum(A” & t & “:D” & t & “)”

range.row属性は、オブジェクトの行番号を返します。範囲の場合は、左上隅の最初のセルの行番号を返します。

例:a=Range(“D10”).rowはセルD10の行番号10を変数aに返します。

range.column属性は、オブジェクトの列番号を返します。範囲の場合は、左上隅の最初のセルの列番号を返します。

例えば、b=Range(“B2:F5”).columnは、指定された範囲の左上隅にある最初のセルb2の列番号を変数bに返します。ここで返される列番号はアルファベットではなく、数値です。Bは2列目であるため、 2を返します。

  • Range.Select メソッド オブジェクトを選択します
  • range(“A1”).select セルA1を選択します
  • Range.Clear メソッド オブジェクトをクリアします。特定の引数を使用して、内容、数式、または書式のみをクリアするように指定できます。
  • Range(“A1:G37”).Clear セル範囲A1:G37の内容、数式、および書式の設定をクリアします。
  • Range.Copy メソッド セル範囲を指定した範囲またはクリップボードにコピーします。 範囲が指定されていない場合は、クリップボードにコピーされます。

次の例では、範囲A1:D4は、E5から始まる同じサイズの範囲にコピーされます。 つまり、セル範囲E5:H8にコピーします。特定の引数を使用して、数式のコピー、値のみコピーなどの貼り付けの設定を調整できます

  • Range(“A1:D4”).CopyRange(“E5”)
  • Range.Delete メソッド オブジェクトを削除します
  • RANGE(“A1:D5,F2:G2”).delete A1:D5、F2:G2、2つの指定された範囲を同時に削除します
  • Range(“1:1,8:8,12:12”).delete 1行目、8行目、12行目を同時に削除します
  • Range.Insert メソッド 挿入
  • Range(“1:1,8:8,12:12”).Insert 1行目、8行目、12行目の上に新しい行を同時に挿入します

上記は、常用なオブジェクト、属性、およびメソッドを挙げました。各オブジェクトには、異なる属性とメソッドがあります。異なる属性とメソッドには、複数の引数があるかもしれません。詳細な属性とメソッドの引数については、ヘルプを参照してください。 VBAコードエディタでF1を押して、VBAヘルプページを開きます。

Share

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です