タイトル列を検索して、列番号もしくは列名を取得します。
タイトル列が増えたり減ったりすることがある場合に、タイトル名が固定されていれば処理への影響が少なくなります。
値段の処理を行っていた場合、C列に原価を追加した場合に、C列の記載をD列に変更する必要がでてきてしまいます。
値段で列名を取得すれば、CでもDでも修正は必要なくなります。
【補足】
GetBlankColumn() の中で、GetBlankColumn() 最終列を取得 を使用しています。
TitlenameToColumnStr() の中で、ColumnIdxToStr() 列名と列番号の変換 を使用しています。




【サンプルコード】
Sub GetTitlenameToColumn(filename as String)
Dim wb As Workbook
Dim ws As Worksheet
Dim last_column As Long
Dim result_num As Long
Dim result_str As String
' ファイルの確認
If IsFileExists(filename) = True Then
' ブックを開く
Set wb = Workbooks.Open(filename)
' シートを取得
Set ws = wb.Sheets(1)
' タイトル名から列番号を取得
result_num = TitlenameToColumn(ws, "値段")
' タイトル名から列名を取得
result_str = TitlenameToColumnStr(ws, "値段")
' ブックを閉じる
wb.Close
MsgBox "値段の列は" & result_str & "列(" & result_num & ")", vbInformation
Else
MsgBox filename & "は存在しません", vbExclamation
End If
End Sub
【関数化】
' タイトル名から列番号を取得
Function TitlenameToColumn(ws As Worksheet, title As String) As Long
Dim max_column As Long
Dim ret As Long
Dim idx As Long
' 最大列を取得
max_column = GetBlankColumn(ws)
' 初期値(タイトルが一致しない用)
ret = 0
' 列数でループする
For idx = 1 To max_column
If ws.Cells(1, idx) = title Then
' タイトルと一致したら列を返す
ret = idx
Exit For
End If
Next
TitlenameToColumn = ret
End Function
' タイトル名から列名を取得
Function TitlenameToColumnStr(ws As Worksheet, title As String) As String
Dim ret As Long
' タイトル名から列番号を取得して、番号から列名へ変換します。
ret = TitlenameToColumn(ws, title)
If ret > 0 Then
TitlenameToColumnStr = ColumnIdxToStr(ret)
Else
TitlenameToColumnStr = ""
End If
End Function
【修正】
2024/06/22 最大列を取得をGetBlankColumnから、GetLastColumnに変更。空白も想定。
【関連】
今回の処理を拡張したプログラムも参考にしてください。
タイトル列を検索して指定した列を消す
タイトル列を検索して指定した列を残す


コメント