- ベストアンサー
エクセル:Targetの列番号を英字で出す
Private Sub Worksheet_Change(ByVal Target As Range) MsgBox Target.Column End sub このコードを書いたシートでセル"B1"の値を変更すると、 メッセージボックスで 2 と出ますが、 B と出したい(列番号ではなく、列の英字で)場合はどのように書けばよいでしょうか。 Left関数やMid関数を使ってTarget.Addressから英字部分を抜き出す、というコードも組んでみましたが、 そんなことしなくても出そうな気がするので、 そのような書き方がありましたら教えてください。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
すみません 質問内容にもありました英字部分を抜き出すコードのほうが遥かに簡単でした できれば流してください
その他の回答 (3)
- imogasi
- ベストアンサー率27% (4737/17069)
実際個人的にはあればと思って、勉強してますが、出くわさないですね。 (1)ユーザー関数 例えば(3)のロジックを使い Function Clmna(n) Clmna=Chr(64 + n) End Function (2)Left関数やMid関数を使ってTarget.Address (3) Private Sub Worksheet_Change(ByVal Target As Range) MsgBox Chr(64 + Target.Column) End Sub (4) Private Sub Worksheet_Change(ByVal Target As Range) 'MsgBox Chr(64 + Target.Column) S = Split("A,B,C,D,E,F,G,H,I,J", ",") '10列まで MsgBox S(Target.Column - 1) End Sub ーー どこかで別の気の効いたやり方を見た気がするが思い出せない。
お礼
回答ありがとうございます。 何個もありがとうございます。 別の所でも使えそうなんでコピっておきます。 皆さんに答えてもらっておいて申し訳ないですけど、 英字だけ抜く意味が無くなってしまったので結局自分で作ったMidとかInStrとか使ったコードも使わず仕舞いでした。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 MsgBox Replace$(Target.Cells(1).Address(0, 0), Target.Cells(1).Row, "") もともと、このアルファベットというのは、可読性だけの問題だと思います。Lotusというよりも、VisiCalc の時代に出来たものだと思います。実際、VBAで、そのアルファベットを取り出しても使いようがありませんよね。Microsoft 自身も、Excelになってから採用した表示形式です。
お礼
回答ありがとうございます。 >実際、VBAで、そのアルファベットを取り出しても使いようがありませんよね。 いえ、そんなことはありません、使いまくりです、 と書くつもりだったんですが、 確かに英字だけ取り出す意味はありませんでした。 今まではRange("A1")などと指定することが多かったのでどうしても欲しかったのですが、 Target.addressで出る「$」付きのアドレス($A$1)で十分使えました。 (結局まだ英字に執着してますけど)
- jobvba
- ベストアンサー率50% (2/4)
こういうことでしょうか?
お礼
回答ありがとうございます。 申し訳ありません、「教えて!goo」内で似たような質問を見つけました。 そちらでもコードを組んで取り出す方法が挙げられていたので、 質問したような都合の良い関数は無いみたいですね。 例えばですけど、Target.retuと書けば出るよ、とかそんな楽な記述があればと思って質問しました(苦笑)。 普通は英字でなくて番号で出した方が扱いやすいんでしょうか。