VBAで行と列の扱い方

投稿日: 2024年6月2日

行と列を操作することで、データの読み取り、書き込み、フォーマットの変更、削除などの処理を行うことができます。

操作項目メソッド
値を取得EntireRow.ValueRange(“A1”).EntireRow.Value
値を書き換えるEntireRow.ValueRange(“A1”).EntireRow.Value = “New Value”
削除するEntireRow.DeleteRange(“A1”).EntireRow.Delete
挿入するEntireRow.InsertRange(“A1”).EntireRow.Insert
値を取得EntireColumn.ValueRange(“A1”).EntireColumn.Value
値を書き換えるEntireColumn.ValueRange(“A1”).EntireColumn.Value = “New Value”
削除するEntireColumn.DeleteRange(“A1”).EntireColumn.Delete
挿入するEntireColumn.InsertRange(“A1”).EntireColumn.Insert

行の操作

行の値を取得する

行全体の値を取得する場合は、RangeオブジェクトとEntireRowプロパティを使用します。

Sub GetRowValues()
    Dim rowValues As Variant
    rowValues = Range("A1").EntireRow.Value ' A1行全体の値を取得
    MsgBox rowValues(1, 1) ' A1セルの値を表示
End Sub

行の値を書き換える

行全体に値を設定する場合も、RangeオブジェクトとEntireRowプロパティを使用します。

Sub SetRowValues()
    Range("A1").EntireRow.Value = "New Value" ' A1行全体に値を設定
End Sub

行を削除する

行を削除するには、EntireRow.Deleteメソッドを使用します。

Sub DeleteRow()
    Range("A1").EntireRow.Delete ' A1行を削除
End Sub

Excelのセルのデータ量が多い場合はメモリが不足して処理が止まる場合があります。こうなった場合はデータ量を減らさないと操作ができません。

行を挿入する

行を挿入するには、EntireRow.Insertメソッドを使用します。

Sub InsertRow()
    Range("A1").EntireRow.Insert ' A1行の上に新しい行を挿入
End Sub

列の操作

列の値を取得する

列全体の値を取得する場合は、RangeオブジェクトとEntireColumnプロパティを使用します。

Sub GetColumnValues()
    Dim columnValues As Variant
    columnValues = Range("A1").EntireColumn.Value ' A1列全体の値を取得
    MsgBox columnValues(1, 1) ' A1セルの値を表示
End Sub

列の値を書き換える

列全体に値を設定する場合も、RangeオブジェクトとEntireColumnプロパティを使用します。

Sub SetColumnValues()
    Range("A1").EntireColumn.Value = "New Value" ' A1列全体に値を設定
End Sub

列を削除する

列を削除するには、EntireColumn.Deleteメソッドを使用します。

Sub DeleteColumn()
    Range("A1").EntireColumn.Delete ' A1列を削除
End Sub

列を挿入する

列を挿入するには、EntireColumn.Insertメソッドを使用します。

Sub InsertColumn()
    Range("A1").EntireColumn.Insert ' A1列の左に新しい列を挿入
End Sub

複数行・列の操作

複数行の値を取得・書き換え

複数行をまとめて操作することもできます。

Sub GetMultipleRowsValues()
    Dim rowsValues As Variant
    rowsValues = Range("A1:A3").Value ' A1からA3までの値を取得
    MsgBox rowsValues(1, 1) ' A1セルの値を表示
End Sub

Sub SetMultipleRowsValues()
    Range("A1:A3").Value = "Multiple Rows" ' A1からA3までの値を書き換え
End Sub

複数列の値を取得・書き換え

複数列をまとめて操作することもできます。

Sub GetMultipleColumnsValues()
    Dim columnsValues As Variant
    columnsValues = Range("A1:C1").Value ' A1からC1までの値を取得
    MsgBox columnsValues(1, 1) ' A1セルの値を表示
End Sub

Sub SetMultipleColumnsValues()
    Range("A1:C1").Value = "Multiple Columns" ' A1からC1までの値を書き換え
End Sub

これらの操作方法を理解することで、VBAを使ってExcelの行と列を効果的に操作することができます。

行と列の動的な操作

最終行や最終列の取得は、Excel VBAでデータの範囲を動的に把握するための重要なテクニックです。これにより、データの終わりを自動的に検出して、データ処理を効率化できます。

項目プロパティ
最終行の取得End(xlUp).RowCells(Rows.Count, 1).End(xlUp).Row
特定の範囲で最終行を取得Find(What:=”*”, SearchDirection:=xlPrevious, SearchOrder:=xlByRows).RowRange(“A:C”).Find(What:=”*”, SearchDirection:=xlPrevious, SearchOrder:=xlByRows).Row
最終列を取得End(xlToLeft).ColumnCells(1, Columns.Count).End(xlToLeft).Column
特定の範囲で最終列を取得する方法Find(What:=”*”, SearchDirection:=xlPrevious, SearchOrder:=xlByColumns).ColumnRange(“1:10″).Find(What:=”*”, SearchDirection:=xlPrevious, SearchOrder:=xlByColumns).Column

最終行の取得

特定の列で最終行を取得する方法
特定の列(例えば、A列)で最終行を取得する場合は、次のようにします。

Sub GetLastRowInColumn()
    Dim lastRow As Long
    lastRow = Cells(Rows.Count, 1).End(xlUp).Row
    MsgBox "A列の最終行: " & lastRow
End Sub

このコードでは、次のように動作します。

  • Rows.Count は、ワークシートの行数(通常は1048576)を返します。
  • Cells(Rows.Count, 1) は、A列の最終行のセル(A1048576)を指します。
  • End(xlUp) は、そのセルから上方向に向かって最初にデータが入力されているセルまで移動します。
  • Row プロパティは、そのセルの行番号を返します。

特定の範囲で最終行を取得する方法

特定の範囲(例えば、A列からC列の中で最も下の行)で最終行を取得する場合は、次のようにします。

Sub GetLastRowInRange()
    Dim lastRow As Long
    lastRow = Range("A:C").Find(What:="*", SearchDirection:=xlPrevious, SearchOrder:=xlByRows).Row
    MsgBox "A列からC列の最終行: " & lastRow
End Sub

このコードでは、次のように動作します。

  • Range(“A:C”).Find(What:=”*”, SearchDirection:=xlPrevious, SearchOrder:=xlByRows) は、A列からC列の範囲で、最後のデータが入力されているセルを検索します。
  • Row プロパティは、そのセルの行番号を返します。

最終列の取得

特定の行で最終列を取得する方法
特定の行(例えば、1行目)で最終列を取得する場合は、次のようにします。

Sub GetLastColumnInRow()
    Dim lastColumn As Long
    lastColumn = Cells(1, Columns.Count).End(xlToLeft).Column
    MsgBox "1行目の最終列: " & lastColumn
End Sub

このコードでは、次のように動作します。

  • Columns.Count は、ワークシートの列数(通常は16384)を返します。
  • Cells(1, Columns.Count) は、1行目の最終列のセル(XFD1)を指します。
  • End(xlToLeft) は、そのセルから左方向に向かって最初にデータが入力されているセルまで移動します。
  • Column プロパティは、そのセルの列番号を返します。

特定の範囲で最終列を取得する方法

特定の範囲(例えば、1行目から10行目の中で最も右の列)で最終列を取得する場合は、次のようにします。

Sub GetLastColumnInRange()
    Dim lastColumn As Long
    lastColumn = Range("1:10").Find(What:="*", SearchDirection:=xlPrevious, SearchOrder:=xlByColumns).Column
    MsgBox "1行目から10行目の最終列: " & lastColumn
End Sub

このコードでは、次のように動作します。

  • Range(“1:10″).Find(What:=”*”, SearchDirection:=xlPrevious, SearchOrder:=xlByColumns) は、1行目から10行目の範囲で、最後のデータが入力されているセルを検索します。
  • Column プロパティは、そのセルの列番号を返します。

最終行や最終列の取得は、データの終端を動的に検出するための重要な方法です。
これにより、データの範囲を正確に把握し、効率的に処理を行うことができます。以下に、最終行や最終列の取得方法をまとめます。

最終行を動的に取得した後の使い方

その都度最終行を取得するのでFor Nextループとの相性が良いです。For Nextループで処理を行うサンプルコードになります。

シナリオ

  • Excelシートに学生の名前とその得点がそれぞれA列とB列に入力されている。
  • 各学生の得点が60点以上の場合、C列に「Pass」、それ以外の場合は「Fail」と書き込む。

以下のデータをExcelで準備します。

名前得点結果
山田75
佐藤45
鈴木85
田中55
高橋90
Sub EvaluateStudents()
    Dim lastRow As Long
    Dim i As Long

    ' A列の最終行を取得
    lastRow = Cells(Rows.Count, 1).End(xlUp).Row

    ' 2行目から最終行までループ
    For i = 2 To lastRow
        If Cells(i, 2).Value >= 60 Then
            Cells(i, 3).Value = "Pass" ' B列の値が60以上ならC列に「Pass」と書き込む
        Else
            Cells(i, 3).Value = "Fail" ' それ以外なら「Fail」と書き込む
        End If
    Next i
End Sub

コードの解説

最終行の取得
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
  • Cells(Rows.Count, 1) はA列の最終行のセル(通常は1048576行目)を指します。
  • End(xlUp) は、そのセルから上方向に向かって最初にデータが入力されているセルまで移動します。
  • Row プロパティは、そのセルの行番号を返します。
  • このコードは、A列の最終行を動的に取得します。
For Nextループ
For i = 2 To lastRow
  • For i = 2 To lastRow は、2行目から最終行までループを設定します。
  • i はループカウンタで、2行目から最終行まで1行ずつ繰り返します。
条件付き処理
If Cells(i, 2).Value >= 60 Then
    Cells(i, 3).Value = "Pass"
Else
    Cells(i, 3).Value = "Fail"
End If
  • Cells(i, 2).Value は、現在の行のB列の値を取得します。
  • If Cells(i, 2).Value >= 60 Then は、B列の値が60以上かどうかをチェックします。
  • 条件が真の場合、Cells(i, 3).Value = “Pass” によってC列に「Pass」と書き込みます。
  • 条件が偽の場合、Cells(i, 3).Value = “Fail” によってC列に「Fail」と書き込みます。
ループの終了
Next i
  • Next i は、ループカウンタを増加させ、次の行に移動します。
  • ループが最終行に達するまで繰り返します。
実行結果

このコードを実行すると、得点が60点以上の学生には「Pass」、それ未満の学生には「Fail」がC列に書き込まれます。

このように、最終行の取得とFor Nextループを組み合わせることで、Excelシート内のデータを効率的に操作することができます。

記事