エクセルVBA、この2つ覚えれば大体のことはできる。

繰り返しの処理と最終行取得で、最初はOK!

 初心者のうちは、どう動かせばいいのかイメージが湧いてこないと思います。
 私の事務職10年やってきた経験から、「どこからどこまでの範囲を処理するか」を明確にしておくことが大事だと言えます。
 つまり、最終行を取得するコードと繰り返し処理の書き方が分かれば、あとはIF句を使って自分のやりたいように条件分岐する。
 これだけで大体はOKになる。

最終行を取得するコード

Lline = Worksheets("シート名").Cells(Rows.Count, 1).End(xlUp).Row

Llineという変数に。1列目の最終行の値を代入します。



使用例:以下のように、A列の132行目までデータが入力されています。これの最終行を取得してみます。(シート名は「リスト」)
f:id:bimori466:20200316171155p:plain
最終行を取得するコード。実行後にmsgboxが出現。

Sub 最終行取得()

Lline = Worksheets("リスト").Cells(Rows.Count, 1).End(xlUp).Row

MsgBox "最終行は:" & Lline & "です。"

End Sub


実行結果。
f:id:bimori466:20200316171716p:plain

変数Llineに最終行が取得できました。あとは1~Llineまでの値に対して、ループ処理で処理をします。

繰り返し処理 For 変数 = 1 TO Lline

繰り返しの処理をする際の構文は、「For 変数 = 1 TO Lline Next」です。
ここでは、A列の文字に文字列"ckb_"と、"txt_" ”_数量”、"txt_" ”_金額”という文字列を加えたものを、別シートに書き出します。


繰り返しのコード

Sub オブジェクト名生成()

string1 = "spn_"
string2 = "_数量"

string3 = "txt_"
string4 = "ckb_"

string5 = "_金額"


'最終行取得
Lline = Worksheets("リスト").Cells(Rows.Count, 1).End(xlUp).Row

'オブジェクト名作成処理
Write_IX = 1

For i = 1 To Lline
    Expense = Worksheets("リスト").Cells(i, 1)
    
    'チェックボックス
    Generate_Code1 = string4 & Expense
    
    '数量
    Generate_Code2 = string3 & Expense & string2
    Generate_Code3 = string1 & Expense & string2
    
    '金額
    Generate_Code4 = string3 & Expense & string5
    Generate_Code5 = string1 & Expense & string5
    
    'sheetに転記する。
    Worksheets("オブジェクト名生成").Cells(Write_IX, 1) = Generate_Code1
    Worksheets("オブジェクト名生成").Cells(Write_IX, 2) = Generate_Code2
    Worksheets("オブジェクト名生成").Cells(Write_IX, 3) = Generate_Code3
    Worksheets("オブジェクト名生成").Cells(Write_IX, 4) = Generate_Code4
    Worksheets("オブジェクト名生成").Cells(Write_IX, 5) = Generate_Code5
    
    Write_IX = Write_IX + 1
Next

MsgBox "end"

End Sub


処理結果。(オブジェクトSheetに作成される。)
f:id:bimori466:20200316172639p:plain

このように、リストSheetのA列の文字列に、"txt_" などの文字を加えたものを、オブジェクトSheetに作成しました。


最終行の取得、繰り返しの処理。この2つが分かれば、中身のデータに対して処理したいことを実現できます。
あとは、IF句でこういう場合はどうするという処理を加えれば、いろんなことができます。