重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

st = Left(.Address(0, 0), 1)この部分をおしえてくれませんでしょうか


Private Sub Worksheet_Change(ByVal Target As Range)

Dim st As String

With Target

st = Left(.Address(0, 0), 1)

Select Case st

Case "E"

If .Row Mod 2 = 0 And IsDate(.Value) Then
Cells(.Row, 5).Font.ColorIndex = 5
Else
Cells(.Row, 5).Font.ColorIndex = xlAutomatic
End If

If .Row Mod 2 = 1 And IsDate(.Value) Then
Cells(.Row, 5).Font.ColorIndex = 3
Cells(.Row - 1, 5).Font.ColorIndex = 3
Cells(.Row, 5).Interior.ColorIndex = 6
Cells(.Row - 1, 5).Interior.ColorIndex = 6
Cells(.Row, 3).Interior.ColorIndex = 6
Cells(.Row - 1, 3).Interior.ColorIndex = 6
Else
Cells(.Row, 5).Font.ColorIndex = xlAutomatic '何故かxlNoneではダメだった。古いからかも。
Cells(.Row - 1, 5).Font.ColorIndex = 5
Cells(.Row, 5).Interior.ColorIndex = xlColorIndexNone
Cells(.Row - 1, 5).Interior.ColorIndex = xlColorIndexNone
Cells(.Row, 3).Interior.ColorIndex = xlColorIndexNone
Cells(.Row - 1, 3).Interior.ColorIndex = xlColorIndexNone
End If

質問者からの補足コメント

  • どう思う?

    ※ 当然ですが上記コードだとZ列までの限定ですよね?
    ここで考えてしまいました。AAで試したら
    当然ながら動作いたしませんでした。
    どうしたらいいのですか。

    No.1の回答に寄せられた補足コメントです。 補足日時:2019/09/17 21:55

A 回答 (3件)

No.1です。



>AAで試したら・・・

とりあえず最終列まででも対応できる方法です。

>Dim cnt As Long
と変数をもう一つ追加し

 st = .Address(False, False)
  cnt = 1
   Do While Mid(st, cnt, 1) Like "[A-Z]"
    cnt = cnt + 1
   Loop
 st = Left(st, cnt - 1)

のようにしてみてはどうでしょうか?

※ もっと簡単な方法があればごめんなさい。m(_ _)m
    • good
    • 0
この回答へのお礼

ここまでできるのですか
神ですね
わたしもがんばる
有難うございます。

お礼日時:2019/09/17 22:34

※この回答は、“締め切られた質問への回答追加”として、2019/09/18 12:16に回答者の方よりご依頼をいただき、教えて!gooによって代理投稿されたものです。


---
先の質問では列数がそこまでいくとは想像してませんでした。
既に回答は出ておりますが自分の作成したコードなので一応修正をしたいかなと。

st = Left(.Address(0, 0), IIf(.Address(0, 0) Like "[A-Z][A-Z]*", 2, 1))

となります。
AddressにTrue.Flaseを用いる方もいらっしゃいますが、15年程前に参考にさせて頂いてた諸先輩回答者様が1,0を用いていたので私もそのまま使ってました。
どちらにされるかは質問者さんの方にお任せです。

意味的にはセルアドレスが英字2文字で始まるなら左から2文字を、そうでなければ1文字を抜き出すようにしてます。(Iifで)
    • good
    • 0
この回答へのお礼

いつも大変お世話になっております。
なんて答えていいのか
とても嬉しいです。

お礼日時:2019/09/23 22:30

こんばんは!



>st = Left(.Address(0, 0), 1)
の部分について・・・

>With Target
が最初にあるので結局
>st = Left(Target.Address(0, 0), 1)
というコトになりますね。ここまでは問題ないと思います。
次に
>.Address(0, 0)
の部分は
>.Address(False, False)
なので「Target」のセル番地の「$」マークを除いた文字列になります。

>.Address(1, 1) または .Address(True, True) とすれば
「$」マーク付きのセル番地になります。

仮に「Target」がE10セルであれば
① >.Address(0, 0)
で「E10」

② >.Address(1, 1)
とすれば
「$E$10」
という文字列が変数「st」になります。

今回のコードは①なので
その一番左の1文字というコトで「E」が求められます。

※ 当然ですが上記コードだとZ列までの限定ですよね?

余計なお世話かもしれませんが、
>.Address(True, False) → E$10
>.Address(False, True) → $E10

が求められます。m(_ _)m
この回答への補足あり
    • good
    • 0
この回答へのお礼

なるほどです。
納得致しました。
いろいろ勉強になりました。

お礼日時:2019/09/17 21:47

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