プロが教えるわが家の防犯対策術!

Private Sub Worksheet_Change(ByVal Target As Range)
  MsgBox Target.Column
End sub
このコードを書いたシートでセル"B1"の値を変更すると、
メッセージボックスで 2 と出ますが、
B と出したい(列番号ではなく、列の英字で)場合はどのように書けばよいでしょうか。

Left関数やMid関数を使ってTarget.Addressから英字部分を抜き出す、というコードも組んでみましたが、
そんなことしなくても出そうな気がするので、
そのような書き方がありましたら教えてください。

A 回答 (4件)

すみません


質問内容にもありました英字部分を抜き出すコードのほうが遥かに簡単でした
できれば流してください
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

申し訳ありません、「教えて!goo」内で似たような質問を見つけました。
そちらでもコードを組んで取り出す方法が挙げられていたので、
質問したような都合の良い関数は無いみたいですね。
例えばですけど、Target.retuと書けば出るよ、とかそんな楽な記述があればと思って質問しました(苦笑)。
普通は英字でなくて番号で出した方が扱いやすいんでしょうか。

お礼日時:2007/07/05 19:54

実際個人的にはあればと思って、勉強してますが、出くわさないですね。


(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
ーー
どこかで別の気の効いたやり方を見た気がするが思い出せない。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

何個もありがとうございます。
別の所でも使えそうなんでコピっておきます。

皆さんに答えてもらっておいて申し訳ないですけど、
英字だけ抜く意味が無くなってしまったので結局自分で作ったMidとかInStrとか使ったコードも使わず仕舞いでした。

お礼日時:2007/07/06 20:29

こんばんは。



MsgBox Replace$(Target.Cells(1).Address(0, 0), Target.Cells(1).Row, "")

もともと、このアルファベットというのは、可読性だけの問題だと思います。Lotusというよりも、VisiCalc の時代に出来たものだと思います。実際、VBAで、そのアルファベットを取り出しても使いようがありませんよね。Microsoft 自身も、Excelになってから採用した表示形式です。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

>実際、VBAで、そのアルファベットを取り出しても使いようがありませんよね。

いえ、そんなことはありません、使いまくりです、
と書くつもりだったんですが、
確かに英字だけ取り出す意味はありませんでした。
今まではRange("A1")などと指定することが多かったのでどうしても欲しかったのですが、
Target.addressで出る「$」付きのアドレス($A$1)で十分使えました。
(結局まだ英字に執着してますけど)

お礼日時:2007/07/06 20:25

こういうことでしょうか?



参考URL:http://support.microsoft.com/kb/833402/ja
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!