通常Excelを使う場合、列はA列・B列・C列・・・のように、文字列(アルファベット)であらわすことが一般的です。(R1C1モードも用意されていますが。)
しかし、VBA(Visual Basic for Applicatins)でExcelマクロを作成する場合、列も行と同じように数値で扱うほうが便利なことが少なくありません。
プロシージャでループ処理などを行うときなど、もし列を文字で表記したままコーディングしようとすると、面倒で仕方ありません。
列を文字であらわすより数字であらわすほうが、簡単にコーディングできることが、はるかに多いでしょう。
しかし、例えばユーザーに何らかのメッセージを出すような場合、列を数字から文字列(アルファベット)にする処理が必要になります。
例えば、何らかのメッセージで
「26列目」と表示するよりは
「Z列」と表示するほうが
ユーザーにとってはわかりやすいはずです。
そんなときのために、Excelでマクロをバリバリ作成している場合、列番号を文字列に変換するユーザー定義関数を作成しておくのがおすすめです。
Function ColNum2Txt(lngColNum As Long) As String
On Error GoTo ErrHandler
Dim strAddr As String
strAddr = Cells(1, lngColNum).Address(False, False)
ColNum2Txt = Left(strAddr, Len(strAddr) - 1)
Exit Function
ErrHandler:
ColNum2Txt = ""
End Functionバリバリのプログラマな方だと、列番号をアルファベットにするということは、数字を26進法にすることだと考え、ゴリゴリとコーディングしてしまうかもしれません。
元の数値を26で割って、そのIntを取ってChr関数を使ってアルファベットにして、残った数値から今度は・・・といった処理を間違いなくコーディングできるのなら、それでもいいでしょう。
そいうった思考が苦手な方には、今回ご紹介した方法のがはるかに簡単なはずです。
例えば、列番号が「26」のときに
「strAddr = Cells(1, lngColNum).Address(False, False)」
の処理を通ると変数strAddrには、「Z1」という一般的によく見慣れたセルアドレスが格納されます。
Addressプロパティの、第1引数RowAbsolute・第2引数ColumnAbsoluteのいずれも「False」を指定していますので、相対参照のセルアドレスが取得できます。
例えばlngColNumが
「256」なら「IV1」
「703」なら「AAA1」
「16384」なら「XFD1」
といったセルアドレスが、変数strAddrに格納されます。
このセルアドレスから右端の「1」を除外するために、セルアドレスの左から、文字列の長さから「1」マイナスした文字数だけ取得取得しています。
これが、
「= Left(strAddr, Len(strAddr) - 1)」
の部分です。
これでstrAddrから列のアルファベットだけが得られます。
上記の例では、列番号として正しくない数字が指定されたときは、空白を返すようにしてありますが、何らかのメッセージを表示したいのならば
ErrHandlerの、
「ColNum2Txt = ""」を
「ColNum2Txt = "列番号として正しくありません。"」
などとしてください。
- Newer:シート名変更のショートカットキーは?−QATの利用
- Older:表からデータを取得する・表引きする−参照演算子
Home » エクセルマクロ・Excel VBAの使い方 » ユーザー定義関数 » 列番号を文字列・アルファベットに変換する