[[20040818095729]] 『B列にBと入力したら左隣のA列のセルを赤く』(Satoko) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『B列にBと入力したら左隣のA列のセルを赤く』(Satoko)

『Bの列に”B”と入力したら,入力した左隣のAのセルを赤く塗りつぶし,
同時に,Bの列に”A”と入力したら,
入力した左隣のAのセルを青く塗りつぶしたいのですが,
その様なことは出来るでしょうか。

尚,当方マクロ初心者です。
よろしくお願いします。』(Satoko)

エクセルのバージョンは2000,OSはWin2000です。


 マクロがご希望ではないですよね。
 つい先ほど同じような質問がありましたので、参考にしてお試しください。
[[20040818093955]]『A1が○ならB1の文字は赤色になる』(さんちゃん)
 (川野鮎太郎)


早速のご回答ありがとうございます。
そちらも参考にさせてもらったのですが,条件付書式の場合,3件までしか条件が
登録できないのですよね?
実はA〜Eまでの5つの選択肢があり,それぞれ対応させたいのです。
マクロはテキストを参考にしながらなら多少VBAを使えるようにはなった程度です。
もし,マクロを使って出来るのであれば挑戦してみたいと思うのですが。
(Satoko)


 そうでしたか、失礼しましたm(_ _)m
 4つ以上の条件の場合のマクロが過去ログにあると思います。
 新単語検索で、(弥太郎) さんか、(夏目雅子似) さんであると思います。(多分(^_^A;
 一応今から探してみます。どちらが早いか競争しましょう。(笑
 (川野鮎太郎)


 一番乗り〜!(笑)
 おしゃべりは後回しにして、
 '---------------------------
 Private Sub Worksheet_Change(ByVal Target As Range)
    Dim i As Integer
    Dim colr
    If Target.Count > 1 Then Exit Sub
    If Target.Column <> 2 Then Exit Sub
        colr = Array("A", "B", "C", "D", "E")
        For i = 0 To UBound(colr)
            If Target = colr(i) Then
                Target.Offset(, -1).Interior.ColorIndex = i + 3
                Exit For
            End If
        Next i

 End Sub
 Sheet1のモジュールに貼り付けてくだはい。
      (弥太郎)


 _/ ̄|○ il||liがくり、負けちゃいました(^_^A;

 探そうと思ってもなかなか見つけられませんね><

 フォローありがとうございます。

 (川野鮎太郎)

 ついでと言ってはなんですが、ご教示ください。
 上記マクロでB列の値が"A", "B", "C", "D", "E"以外の場合には、
 Interior.ColorIndex = xlNone として、一度着色されたものを消去するようにするため、
 以下のような感じでやろうとしたのですが、"A", "B", "C", "D", "E"以外の判定をするための構文が判りません。

 ご教示願えませんでしょうか。

 Private Sub Worksheet_Change(ByVal Target As Range)
    Dim i As Integer
    Dim colr
    If Target.Value =    Then ←このThenの前です。※
        If Target.Count > 1 Then Exit Sub
        If Target.Column <> 2 Then Exit Sub
        colr = Array("A", "B", "C", "D", "E")
        For i = 0 To UBound(colr)
            If Target = colr(i) Then
                Target.Offset(, -1).Interior.ColorIndex = i + 3
                Exit For
            End If
        Next i
    Else
        Target.Offset(, -1).Interior.ColorIndex = xlNone
    End If
 End Sub
 (川野鮎太郎)

 色んな方法があるでっしゃろけど、flagで判定させる方法です。

 Private Sub Worksheet_Change(ByVal Target As Range)
    Dim i As Integer
    Dim colr
    Dim flag As Boolean

    If Target.Count > 1 Then Exit Sub
    If Target.Column <> 2 Then Exit Sub
        colr = Array("A", "B", "C", "D", "E")
        For i = 0 To UBound(colr)
            If Target = colr(i) Then
                Target.Offset(, -1).Interior.ColorIndex = i + 3
                flag = True
                Exit For
            End If
        Next i
        If flag <> True Then Target.Offset(, -1).Interior.ColorIndex = xlnon
 End Sub
 最初にIfで判定しようとすると条件が多くなってコードが嵩むと思いまっせぇ。
     (弥太郎)


 これでエエのとちゃいまっか?
 (ramrun)

 Private Sub Worksheet_Change(ByVal Target As Range)
    Dim i As Integer
    Dim colr
    If Target.Count > 1 Then Exit Sub
    If Target.Column <> 2 Then Exit Sub
        colr = Array("A", "B", "C", "D", "E")
        For i = 0 To UBound(colr)
            If Target = colr(i) Then
                Target.Offset(, -1).Interior.ColorIndex = i + 3
                Exit For
            Else
                Target.Offset(, -1).Interior.ColorIndex = xlnon
            End If
        Next i
 End Sub

 Private Sub Worksheet_Change(ByVal Target As Range)
    Dim i As Integer
    Dim colr
    If Target.Count > 1 Then Exit Sub
    If Target.Column <> 2 Then Exit Sub
        colr = Array("A", "B", "C", "D", "E")
        For i = 0 To UBound(colr)
            If Target.Value = colr(i) Then
                Target.Offset(, -1).Interior.ColorIndex = i + 3
                Exit For
            Else
                Target.Offset(, -1).Interior.ColorIndex = xlNone
            End If
        Next i
 End Sub
 
For内で該当がなければ リセットしてしまえば?
処理回数は多いのですが。って、さきこされてまんがな。
(KAMIYA)

 あっ、イチャモン屋が二人も!
 ふふっ、わちきのマクロをパクリおって。(笑)
    パクられ屋(弥太郎)
 '---------------
  Private Sub Worksheet_Change(ByVal Target As Range)
    Dim i As Integer
    Dim colr
    If Target.Count > 1 Then Exit Sub
    If Target.Column <> 2 Then Exit Sub
    Select Case Target
        Case "A", "B", "C", "D", "E"
            colr = Array("A", "B", "C", "D", "E")
            For i = 0 To UBound(colr)
                If Target = colr(i) Then
                    Target.Offset(, -1).Interior.ColorIndex = i + 3
                    Exit For
                End If
            Next i
        Case Else
            Target.Offset(, -1).Interior.ColorIndex = xlnon
    End Select

 End Sub

 以外ならForに進まない方法。

 KAMIYAさん、ramrunさん、早速のご教示ありがとうございます。m(_ _)m 
 弥太郎さん、!!!

 本当にいろんな方法があるんですね。

 このいろんな方法があるのが返って初心者には頭が混乱する原因でもあるような・・・(^_^A;

 今後ともご指導お願いいたします。

 (川野鮎太郎)


 だったらこれでいいような、いくないような?
 (ramrun)

 Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Count > 1 Then Exit Sub
    If Target.Column <> 2 Then Exit Sub
    Select Case Target
        Case "A", "B", "C", "D", "E"
            Target.Offset(, -1).Interior.ColorIndex = Asc(Target) - 62
        Case Else
            Target.Offset(, -1).Interior.ColorIndex = xlnon
    End Select
 End Sub

 う〜ん、Asc(Target)-62は反則技。
 これには解説が必要でっせ。
    反則技に負けとる(弥太郎)

 一生懸命、エクセルのAsc関数で頭を捻ってました(^_^A;
 VBAのヘルプを見たら文字コードなんですね。
 エクセルのCODEで値を見たら、Aが65、Bが66、・・・・・
 これで納得しました〜。!!!
 (川野鮎太郎)

 せやけどCaseの中身が変わると色のローテーションも変わってしまう難点。
 やっぱし反則技は使えん・・・、か。
     オホホのヘ(弥太郎)

 なるほど・・・・
 ○、×、△、□、◎で分けたりする場合には使えないって事で、反則技ってことですね。
 _〆\(..;) メモメモ
 (川野鮎太郎)


ご教授いただいた皆様

 ありがとうございます。
 早速貼り付けてやってみたのですが,マクロの実行ボタンを押しても,

 マクロの名前が出て来ず,実行することが出来ません(>_<)
 どうしたらよいのでしょうか・・・。


 これは、ボタンを押して実行するマクロではないので、該当シートのタブを右クリックして、
 コードの表示を押したときに出たウインドウに貼り付けるだけで、
 B列に入力したら自動的に変わりますよ^^
 (川野鮎太郎)

川野鮎太郎さん
 ありがとうございます〜〜。
 貼り付けたら何とかできました。
 もう一つ続けて質問なんですが,今の設定だと,色づけは色見本の数字の順番ですよね?
 (3だと赤からとか,4からだと黄緑からとか)
 これを,Aだと8番,Bだと22番という風に設定は出来るのでしょうか?
 (Satoko)

 鮎太郎はんは引く手あまたの大繁盛ですワ。
 変わりに私めが作りましたんやけど、規則性がなければ1つ1つ分岐せなあきまへん。
 colrに好きな番号を入力してくだはい。
   (弥太郎)
 '--------------------------
 Private Sub Worksheet_Change(ByVal Target As Range)
    Dim i As Integer
    Dim colr As Integer

    If Target.Count > 1 Then Exit Sub
    If Target.Column <> 2 Then Exit Sub
    Select Case Target
        Case "A"
            colr = 5 'ここの色番号をお好きなように
        Case "B"
            colr = 8  '々
        Case "C"
            colr = 22 '々
        Case "D"
            colr = 30 '々
        Case "E"
            colr = 6  '々
        Case Else
            Target.Offset(, -1).Interior.ColorIndex = xlnon
            Exit Sub
    End Select

    Target.Offset(, -1).Interior.ColorIndex = colr

 End Sub


 弥太郎さん
 ありがとうございます〜!!
 無事に出来ました!!
 また何か有ったときには,ご教授くださいね。
 (Satoko)

 昨日式のの応用になるのでしょうか?
 ”大阪”と入力した左二つ隣のセルに色をつける場合,どこを
 いじればよいのでしょうか。
 単純に,Case "E"
            colr = 6  
 のところを,Case "大阪"
            colr = 6  '々
 とし,2ヶ所あるTarget.Offset(, -1).のところを
 Target.Offset(, -2).にすればよいのでしょうか?
(Satoko)

 と思ったら、実際にやって試してみましょう^^
そこで手を動かすか、動かす前に聞いてしまうかが、学習スピードの差になりますよ。
もちろんコピーしてからにしてくださいね。 (とおりすがる〜)

 説明不足でしたね。
 上記の件,試してみたのですが,反応が無かったため,質問したのです。
 (Satoko)

 B列の左二つ隣のセル?存在しません。
 >If Target.Column <> 2 Then Exit Sub
ここを修正する必要ありです。何列に入力して何列の色を変えたいのかは分かりませんが・・・
(ケン)

衝突しました・・・。
 同じ事ですが、
 上記マクロはB列に入力を対象としてありますので、左2列は無いので反応が無いのでは?
 大阪と入れている列がCならば、
 If Target.Column <> 2 Then Exit Sub
            ~~~ここを3に変更
 (川野鮎太郎)

 >上記の件,試してみたのですが,反応が無かったため,質問したのです。

 それは失礼しました。(とおりすがる〜 改め る〜)

 >反応が無かったため,
 If Target.Column <> 2 Then Exit Sub
ここで、Targetの列のチェックをしていますが、2列目、
つまり、B列での入力かどうかをはんだんしています。
しかるに、(Satoko)さんは処理対象外のC列で入力を
行ったので反応がなかったものと推測します。
Target.Offset(, -2)
に修正した状態でB列に入力すれば、
「インデックスが有効範囲にありません」エラー。
つまり、B列から左へ2列もオフセットできないよ、
としかられます。
構文一つ一つ解釈していくのは最初はしんどいもんです。
(KAMIYA)


 KENさん,鮎太郎さん,KAMIYAさん
 変更したところ,無事に処理が行えました。
 超初心者なので,一つ一つ勉強して使いこなせるようになりたいと思います。
 ありがとうございました。
 (Satoko)


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.