列番号指定は、列挙型がおすすめ

このマクロは、Excelシートの特定の列からデータを取得して、デバッグウィンドウに氏名と合計点を出力します。その時、列番号の指定を、列挙型を使用しています。

' 列挙型で列番号を指定
Private Enum clm
    氏名 = 1  ' 列挙型の最初のメンバーは列番号1を割り当て(通常はA列)
    英語      ' 列挙型の2番目のメンバー(B列)
    国語      ' 列挙型の3番目のメンバー(C列)
    数学      ' 列挙型の4番目のメンバー(D列)
    理科      ' 列挙型の5番目のメンバー(E列)
    社会      ' 列挙型の6番目のメンバー(F列)
    合計      ' 列挙型の7番目のメンバー(G列)
    順位      ' 列挙型の8番目のメンバー(H列)
End Enum

Private Sub Enum_Colomn()
    Dim rw As Long
    ' 4行目から、"氏名"列(A列)の最終行までをループします
    For rw = 4 To Cells(Rows.Count, clm.氏名).End(xlUp).Row - 1
        ' デバッグウィンドウに氏名と合計を表示します
        Debug.Print Cells(rw, clm.氏名), Cells(rw, clm.合計)
    Next rw
End Sub

詳しい説明

1. 列挙型 Enum の使用

VBAのEnum(列挙型)を使って、特定の項目に対する列番号を定義しています。列挙型を使うと、コードの可読性が向上し、ハードコーディングされた数値(列番号)を避けることができます。

  • 氏名: A列(列番号1)
  • 英語: B列(列番号2)
  • 国語: C列(列番号3)
  • 数学: D列(列番号4)
  • 理科: E列(列番号5)
  • 社会: F列(列番号6)
  • 合計: G列(列番号7)
  • 順位: H列(列番号8)

2. サブルーチン Enum_Colomn の動作

このサブルーチンでは、Excelのシートに以下のデータがあると仮定し、4行目から開始して氏名列の最後のデータまでループします。

  • For rw = 4 To Cells(Rows.Count, clm.氏名).End(xlUp).Row - 1:
    • Cells(Rows.Count, clm.氏名).End(xlUp).Row は、指定した列(この場合は氏名列)で最後にデータが入力された行番号を取得します。Excelシートの行数(Rows.Count)から上に向かって検索し、最初に見つかったデータのある行を探します。
    • 4行目から最後のデータ行の一つ手前までをループします(- 1)。
  • Debug.Print Cells(rw, clm.氏名), Cells(rw, clm.合計):
    • 各行の氏名列と合計列の値をデバッグウィンドウに出力します。
安藤明彦       338 
飯島伊代       438 
内山初華       354 
海老原瑛太     323 
岡田央佳       353 
川島和也       438 
北沢恭介       348 
熊沢玖瑠美     461 
慶田健太       390 
近藤琴葉       302 
坂本聡美       429 
柴田翔平       347 

3. 用途と利便性

このコードは、Excelシートで成績表などのデータを処理する際に使われます。Enumを使用することで、コード内で列を変更したい場合も、数値を変更するのではなく、列挙型の定義を変更するだけで対応可能です。これにより、コードがより直感的で保守しやすくなります。

以下のようにインテリセンスが使用でき、間違いのないプログラミングができます。

Follow me!