エクセルマクロで、最終行までループ処理を繰り返すコードを記載しています。
このページのマクロコードは、コピペで使えます。
ぜひお試しください😉
最終行まで繰り返す(Forループ)
以下のマクロを実行すると、最終行までループ処理を繰り返します。
Sub 最終行までループ()
Dim lastRow As Long
Dim i As Long
'A列の最終行を取得
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
'2~最終行までループ
For i = 2 To lastRow
'B列に値を入力
Cells(i, 2) = "チェック" & i
Next i
End Sub
マクロ実行前
マクロ実行後
A列の最終行を取得して、B列に値を自動入力します。
最終行まで繰り返す(Forループ 偶数行だけ)
以下のマクロを実行すると、最終行までループ処理を繰り返します。
Sub 最終行までループ_For()
Dim lastRow As Long
Dim i As Long
' A列の最終行を取得
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
' 2から最終行まで、2つおきに行を処理
For i = 2 To lastRow Step 2
' 偶数行のセルBに「処理済み」と記入
Cells(i, 2).Value = "処理済み"
Next i
End Sub
マクロ実行前
マクロ実行後
セルB列に「処理済み」を記入する例です。
For文のStepオプションを使用して、2つおきに行を処理しています。
最終行まで繰り返す(Forループ 条件一致)
以下のマクロを実行すると、最終行までループ処理を繰り返します。
Sub 最終行までループ_For()
Dim lastRow As Long
Dim i As Long
' A列の最終行を取得
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
' 2から最終行までループ
For i = 2 To lastRow
' セルAの値が50より大きい場合
If Cells(i, 1).Value > 50 Then
' 対応するセルBに「条件合致」と記入
Cells(i, 2).Value = "条件合致"
End If
Next i
End Sub
マクロ実行前
マクロ実行後
セルA列の値が50より大きい場合に、セルB列に「条件合致」を記入する例です。
最終行まで繰り返す(Forループ 列コピー)
以下のマクロを実行すると、最終行までループ処理を繰り返します。
Sub 最終行までループ_For()
Dim lastRow As Long
Dim i As Long
' A列の最終行を取得
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
' 2から最終行までループ
For i = 2 To lastRow
' セルAのデータをカラムCにコピー
Cells(i, 3).Value = Cells(i, 1).Value
Next i
End Sub
マクロ実行前
マクロ実行後
セルA列のデータをC列にコピーする例です。
最終行まで繰り返す(For Eachループ)
以下のマクロを実行すると、最終行までループ処理を繰り返します。
Sub 最終行までループ_ForEach()
Dim lastRow As Long
Dim cell As Range
' A列の最終行を取得
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
' セルB列に値を入力
For Each cell In Range("B2:B" & lastRow)
cell.Value = "チェック" & cell.Row
Next cell
End Sub
マクロ実行前
マクロ実行後
For Eachループを使用して、セルB列の各セルに対して値を入力します。
Range(“B2:B” & lastRow)で、セルB2から最終行までのセル範囲を指定し、
それぞれのセルに対してループが行われます。
最終行まで繰り返す(For Eachループ セル合計)
以下のマクロを実行すると、最終行までループ処理を繰り返します。
Sub 最終行までループ_ForEach()
Dim lastRow As Long
Dim totalSum As Double
Dim cell As Range
' A列の最終行を取得
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
' セルの値を合計
totalSum = 0
For Each cell In Range("A2:A" & lastRow)
totalSum = totalSum + cell.Value
Next cell
' 合計を表示
MsgBox "合計値: " & totalSum
End Sub
マクロ実行後
セルA2から最終行までの値を合計する例です。
最終行まで繰り返す(For Eachループ セル検索)
以下のマクロを実行すると、最終行までループ処理を繰り返します。
Sub 最終行までループ_ForEach()
Dim lastRow As Long
Dim foundCells As String
Dim cell As Range
' A列の最終行を取得
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
' 特定の文字列を含むセルを検索
foundCells = ""
For Each cell In Range("A2:A" & lastRow)
If InStr(cell.Value, "りんご") > 0 Then
foundCells = foundCells & cell.Address & ", "
End If
Next cell
' 検索結果を表示
If Len(foundCells) > 0 Then
MsgBox "検索文字列を含むセルのアドレス: " & Left(foundCells, Len(foundCells) - 2)
Else
MsgBox "検索文字列を含むセルはありませんでした。"
End If
End Sub
マクロ実行後
セルA2から最終行までの中で、
特定の文字列を含むセルのアドレスを検索する例です。
最終行まで繰り返す(Do Whileループ)
以下のマクロを実行すると、最終行までループ処理を繰り返します。
Sub 最終行までループ_DoWhile()
Dim lastRow As Long
Dim i As Long
' A列の最終行を取得
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
' 2~最終行までループ
i = 2
Do While i <= lastRow
' B列に値を入力
Cells(i, 2) = "チェック" & i
i = i + 1
Loop
End Sub
マクロ実行前
マクロ実行後
Do Whileループを使用して、セルB列に値を入力する処理を作成します。
iの値が最終行を超えるまでループが続きます
最終行まで繰り返す(Do Whileループ 重複削除)
以下のマクロを実行すると、最終行までループ処理を繰り返します。
Sub 最終行までループ_DoWhile()
Dim ws As Worksheet
Dim lastRow As Long
Dim i As Long
' アクティブなシートを取得
Set ws = ActiveSheet
' 最終行を取得
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
i = 2
' 重複を削除
Do While i <= lastRow
' 同じ値が他のセルに存在するかチェック
If WorksheetFunction.CountIf(ws.Range("A2:A" & i), ws.Cells(i, 1).Value) > 1 Then
' 重複があれば行を削除
ws.Cells(i, 1).Delete Shift:=xlUp
lastRow = lastRow - 1
Else
' 重複がなければ次の行へ
i = i + 1
End If
Loop
End Sub
マクロ実行前
マクロ実行後
A列の商品名から重複を削除します。
最終行まで繰り返す(Do Untilループ)
以下のマクロを実行すると、最終行までループ処理を繰り返します。
Sub 最終行までループ_DoUntil()
Dim lastRow As Long
Dim i As Long
' A列の最終行を取得
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
' 2~最終行までループ
i = 2
Do Until i > lastRow
' B列に値を入力
Cells(i, 2) = "チェック" & i
i = i + 1
Loop
End Sub
マクロ実行前
マクロ実行後
Do Untilループを使用して、セルB列に値を入力する処理を作ります。
iの値が最終行を超えるまでループが続きます。
最終行まで繰り返す(Do Untilループ 空白行を見つける)
以下のマクロを実行すると、最終行までループ処理を繰り返します。
Sub 最終行までループ_DoUntil()
Dim ws As Worksheet
Set ws = ActiveSheet
Dim lastRow As Long
Dim i As Long
' A列の最終行を取得
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
i = 2
' 最初の空白行を見つける
Do Until IsEmpty(ws.Cells(i, 1))
i = i + 1
Loop
' 結果を表示
MsgBox "最初の空白行は行 " & i & " です。"
End Sub
マクロ実行後
指定の列で最初の空白行を見つけて、その行番号を表示します。
この記事がお役に立ちますと幸いです。
「ExcelVBA自動化のすべて ~35の事例で課題解決力を身につける~」
業務改善コンサルタントが教える ビジネスの現場で役立つExcelVBAの知識を解説
基本的な解決法と、応用例も紹介しています!