Excel VBAでセル番地(例:”B3″ や “AA10″)を扱うとき、
「列のアルファベット部分だけ欲しい」という場面はよくあります。
例えば:
- “C5” → “C”
- “AB12” → “AB”
- “XFD1048576” → “XFD”(Excel最大列)
この記事では、初心者でも理解しやすい3つの方法を紹介します。
目次
方法1:正規表現でアルファベットだけ抜き取る(最もシンプル)
✔ 特徴
- コードが短い
- 文字列から A〜Z の連続部分を抽出するだけ
- Address の形式に依存しないので安定
🔧 コード
Function GetColumnLetters(addr As String) As String
Dim reg As Object
Set reg = CreateObject("VBScript.RegExp")
reg.Pattern = "[A-Z]+" '→ 「A〜Z の連続部分を抽出する正規表現」
reg.Global = False
If reg.Test(addr) Then
GetColumnLetters = reg.Execute(addr)(0)
End If
End Function
📝 使用例
MsgBox GetColumnLetters("AB12") '→ "AB"
方法2:Range.Column で列番号を取得 → 列文字に変換する
✔ 特徴
- Excelの仕組みを使うので信頼性が高い
- 列番号も同時に扱いたい場合に便利
🔧 列番号 → 列文字の変換関数
Function ColumnNumberToLetter(colNum As Long) As String
ColumnNumberToLetter = Split(Cells(1, colNum).Address(True, False), "$")(0)
End Function
🔧 Address から列文字を取得
Function GetColumnLetters2(addr As String) As String
Dim colNum As Long
colNum = Range(addr).Column
GetColumnLetters2 = ColumnNumberToLetter(colNum)
End Function
📝 使用例
MsgBox GetColumnLetters2("AA10") '→ "AA"
方法3:正規表現なしで手動で抽出する(環境制限がある場合)
✔ 特徴
- 正規表現が使えない環境でも動く
- Address の先頭から A〜Z を読み取るだけ
🔧 コード
Function GetColumnLetters3(addr As String) As String
Dim i As Long
For i = 1 To Len(addr)
If Mid(addr, i, 1) Like "[A-Z]" Then
GetColumnLetters3 = GetColumnLetters3 & Mid(addr, i, 1)
Else
Exit For
End If
Next i
End Function
どの方法を使えばいい?
方法 おすすめ度 理由
| 正規表現(方法1) | ⭐⭐⭐⭐⭐ | コードが短くて読みやすい |
| Range.Column(方法2) | ⭐⭐⭐⭐ | 列番号も扱いたいときに最適 |
| 手動抽出(方法3) | ⭐⭐⭐ | 正規表現が使えない環境向け |
初心者(保垢)向けの補足:Address の仕組み
Excelのセル番地は基本的に
「列のアルファベット」+「行番号」
で構成されています。
例:
- “A1” → 列A、行1
- “BC15” → 列BC、行15
だから、Address から列だけ取りたいときは
「先頭のアルファベット部分だけ抜き取る」
という考え方になります。
まとめ
- Address から列文字を抜き取る方法は3種類
- 一番簡単なのは 正規表現
- 列番号も扱いたいなら Range.Column
- 正規表現が使えない場合は 手動抽出
どれもコピペで使えるので、プロジェクトに合わせて選べます
コメント