[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
こんばんは若槻です。何だか今週は走るように日にちが
過ぎたような気がします。年取ったせいですかねぇw
まあそれはさておき本日は久しぶりにVBAでも。
ただし前の続きではなくてちょっと横道にそれます。
今回は「列番号から列名に変換する」です。
今まで晒してきたVBAでも使ってましたが、そちらは
人様のソースを使ってたに過ぎなかったのでちょいと
自作してみました。
こちら↓
◎ソース
'==============================================
' 列番号を列名に変換
'==============================================
Function RetuHenkan(ByVal k As Integer) As String
Dim RetuMei As Variant 'A~Zを格納
Dim RetuA As Integer '参照するkの値が27以上の時の1桁目の文字を判断
Dim RetuB As Integer '参照するkの値が27以上の時の2桁目の文字を判断
RetuMei = Array("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", _
"O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z")
If k > 26 Then
RetuA = Int(k / 26)
RetuB = k Mod 26
If RetuB = 0 Then
RetuA = RetuA - 1
RetuB = 26
End If
RetuHenkan = RetuMei(RetuA - 1) & RetuMei(RetuB - 1)
Else
RetuHenkan = RetuMei(k - 1)
End If
End Function
◎説明
1.基本
1)受け渡し用に変数kを定義。これは何でもよし(必ず数字型)
2)ファンクション自体は"列名"が欲しいので文字型に
3)Variant型で定義した変数にArrayでA~Zを格納
2.本筋
1)kの値が27以上(=AA列以上)の時
・RetuAにkを26で割った値を格納。1~25の時は0、26~51の時は1、など
・RetuBにkを26で割ったあまりを格納。0=Z、1=A、2=B……と対応
?もしもRetuBが0だったら?
→割り切れる数=Z分類なので、RetuAの値はひとつ減らし、
RetuBには26を入れる
=RetuHenkan(ファンクション名)にRetuAの値、RetuBの値に相当する
文字を格納する
2)kの値がそれ以外の時(A列~Z列)
・RetuHenkanにRetumeiから相当する文字を格納する
これだけです。
一応動作確認はしていますが私のところで大丈夫でも他の方のところで
上手くいく保証はないのでお気をつけください。
ちなみに使い方は標準モジュールにこれを置いて必要な時に呼び出すだけ。
「列番号が移動してて今どこにいるのか分からない」
「列名が必要なのに列番号しか分からない」
という時に使えると思います。
以下サイトメール返信です。
無名拍手の皆さんもありがとうございます^^