【Excelマクロ】よく使うFor~Next4選。セル・行・シート・ファイルを順次処理する。

テーマはよく使うFor~Next4選 Excelの話

マクロのコードは、繰り返し処理するFor と条件で分岐させるIFを覚えれば、あとはやりたい処理をそこにはめ込むだけです。今回はForを紹介していきます。

選択している複数のセルを順次処理、シートの各行を順次処理、開いているエクセルファイルの各シートを順次処理、特定のフォルダ内のファイルを順次処理、というよく使うFor~Next4選を紹介します。

選択している複数のセルを順次処理

まずは、選択中の複数のセルに順次処理をしていくFor~Nextです。

これは、以前の記事「選択したセルの参照元トレース、参照先トレースを一括で表示するマクロ」で使いました。

「 Each c 」の c に選択中のセル(Selection)のひとつを順番に入れていき処理していきます。

sub for_selection()

Dim c As Range 'セルを入れる変数の宣言 

For Each c In Selection '選択中の各セルを順番に処理
    '↓ここから各セルに行う処理を記載
    
    'セルの参照元のトレースを表示
    c.ShowPrecedents
    
    '↑ここまでに各セルを行う処理を記載
Next
    
End Sub

シート内の行を順次処理

次は、シート内の行を順次処理していくFor~Nextです。

いろいろなやり方がありますが、ここでは、A列でデータが入っている最終行の値(last_row)をとって、[For r = 2 to Last_row 」で2行目から順次処理する方法のコードを挙げておきます。

下記はA列の値が偶数であればその行を水色に塗りつぶし、奇数であれば塗りつぶしなしにするマクロです。

Sub for_row()

Dim last_row As Long
Dim r As Long
'A列の一番下の行からxUpした行がデータの入っている最終行
last_row = Cells(Rows.Count, 1).End(xlUp).Row

For r = 2 To last_row 'rを処理する行数として使用する
	'↓ここから処理を記載
     'A列の値が偶数ならその行を水色に奇数なら塗りつぶしなしにする
    If Cells(r, 1) Mod 2 = 0 Then
    	Rows(r).Interior.ColorIndex = 20
    Else
    	Rows(r).Interior.ColorIndex = 0
    End If
    '↑ここまでに処理を記載
Next
End Sub

6行目はデータがある最終列を取得するお決まりのパターンです。
Rows.Countでそのシートの行数(xlsx形式なら1048576行)の一番下を指定して、そこからxUpで手作業でいう「ctrl+↑」の操作と同様の処理をしてデータがある最後の行に移動しています。
そして、その行を.Rowで取得することで、変数のlast_rowにデータのある最終行を入れることができます。
(ただし、この方法はA列で判定するので、A列が空白でB列以降にデータがある場合は正しく判定できません。)

アクティブになっているエクセルファイルの各シートを順次処理

アクティブになっているExcelファイルの各シートを順次処理していくFor~Nextです。

「For Each ~ In Worksheets」で各シートを順次処理するループを回して、各シートのA1のセルにシート名を表示させる処理をさせています。

Sub for_ws()
Dim ws As Worksheet

For Each ws In Worksheets
    '↓処理をここから記載
    ws.Range("A1") = ws.Name
    '↑ここまで処理を記載
Next
End Sub

特定のフォルダ内のファイルを順次処理

最後に複数のファイルを順次処理するFor~Nextです。

マクロが保存されているxlsmファイルが保存されているフォルダに「print」というフォルダを用意してそこに印刷したいExcelファイルを保存しておき、マクロで一括で印刷するマクロです。

「Dim objFSO As Object」の行から4行は、変数の「dir_path」以外はお決まりのおまじないと思って使いましょう。

Sub for_file()

Dim dir_path As String
'フォルダの指定
dir_path = ThisWorkbook.Path & "\print\"

'ファイルシステムオブジェクト変数の準備
'4行セットでおまじないのような決まりごと
Dim objFSO As Object
Set objFSO = CreateObject("Scripting.FileSystemObject")
Dim objFile As Object 'ファイルを格納するオブジェクト変数
For Each objFile In objFSO.GetFolder(dir_path).Files
    '****↓↓ ここから各ファイルの処理 ↓↓*********
    
    'ファイルを読み取り専用で開く
    Workbooks.Open Filename:=dir_path & objFile.Name, ReadOnly:=True
    '1枚目のシートを印刷
    Sheets(1).PrintOut
    'ファイルを閉じる
    ActiveWorkbook.Close SaveChanges:=False    
    '********************** ここまで各ファイルの処理 *******************
Next objFile
End Sub

今回は、For~Nextを4種類紹介しました。繰り返し処理するのはこれぐらいあれば、いろいろ組み合わせれば自動化できることが多くなります。

まずは簡単なFor~Nextからどんどん使ってみましょう。

コメント

タイトルとURLをコピーしました