タイトル列の検索

タイトル列を検索して、列番号もしくは列名を取得します。

タイトル列が増えたり減ったりすることがある場合に、タイトル名が固定されていれば処理への影響が少なくなります。
値段の処理を行っていた場合、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に変更。空白も想定。

【関連】
今回の処理を拡張したプログラムも参考にしてください。
タイトル列を検索して指定した列を消す
タイトル列を検索して指定した列を残す

コメント