VBATips

ヘッダー行が可変の場合でも、正常に処理をさせる【ExcelVBA】

パーツ化とは

ExcelVBAマクロ初級者からの脱却が、処理のパーツ化(プロシージャの分割)と考えています。
マクロを作る上で基本機能をパーツ化する事で、開発時間の削減に繋がります。
処理はパーツ単位で分ける事を心掛けましょう。

分かりやすく説明すると、エクセルの「関数」と同様です。
SUM関数であれば セル内に「=SUM(1+2+3)」と記載すれば、セルには「6」と表示されますよね。
値を渡せば正しい値で返ってくる動きです。

このコードをコピペでOK

今回はパーツ化ではあるのですが、どちらかというとワンランク上のコードの組み方の参考例です。
CSVやテキストデータを取込や出力する際、ヘッダー行が固定ではなく可変の場合があります。
ヘッダー行を可変に対応したプログラムの作成者はユーザーの事を考えているなと思います。

Public COL_JAN_CODE As Variant
Public COL_GOODS_NAME As Variant
Public Const ROW_HEADER As Long = 1
Public Const COL_START As Long = 1 
'■ヘッダー行が可変の場合に、列名を取得する。
Public Function call_COL_Exec()
    Dim tCol As Long
    Dim lastCol As Long
    
    Dim ws As Worksheet
    '■検索対象シートを代入
    Set ws = ThisWorkbook.Worksheets(1)
    
    '■JANコードの列取得 tColなら数字、COL_JAN_CODEなら列名
    lastCol = Call_LastColWs(ROW_HEADER, ws)
    tCol = Call_SearchResultCol(ws, "JAN", ROW_HEADER, COL_START , ROW_HEADER, lastCol)
    COL_JAN_CODE = Call_ColConv(tCol)

    '■商品名の列取得 tColなら数字、COL_GOODS_NAMEなら列名
    lastCol = Call_LastColWs(ROW_HEADER, ws)
    tCol = Call_SearchResultCol(ws, "商品名", ROW_HEADER, COL_START , ROW_HEADER, lastCol)
    COL_GOODS_NAME = Call_ColConv(tCol)

End Function

結果イメージ

JANコードがA列、商品名がB列の場合、以下のような結果が得られます。

tColCOL_JAN_CODE
COL_GOODS_NAME
JAN1A
商品名2B

その他

今回は、色々なパーツを組み合わせての処理です。こちらの記事のコードの単独では動きません。
下記の関数を追加しておく必要があります。

エラー回避処理は入れていませんので、指定したヘッダー行は存在している前提です。

 

コメント

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