【VBA】セルのAddressから列のアルファベットだけを抜き取る3つの方法まとめ

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
  • 正規表現が使えない場合は 手動抽出

どれもコピペで使えるので、プロジェクトに合わせて選べます

コメント

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