アプリ版:「スタンプのみでお礼する」機能のリリースについて

コードはどのように書けばよいのでしょうか。
・5シートありC5〜R90まで"C"を検索。
C5にCがあればC4に色つけ、複数あればそれぞれ
同様に色をつけたいのですが教えて頂けないでしょうか。
・または、参考になるページがありましたら教えていただけないでしょうか?

現在勉強し始めの初心者ですが、よろしくお願いいたします。

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

  • fujillinさん、早速のご回答ありがとうございます。
    思う様にいかず…質問の仕方が良くなかったようで。
    sheet(1)〜sheet(5)あり、それぞれのシートのC5〜C90の中にCの文字を含む場合、B5〜B90のセルに色をつけます。sheet(1)C5にCがあればsheet(1)B5セル塗り潰し、sheet(2)C6にCがあればsheet(2)B6セル塗り潰しといった感じです。
    説明が至らず申し訳ありませんでした。
    よろしくお願いします。

    No.1の回答に寄せられた補足コメントです。 補足日時:2020/06/19 11:00
  • tomoさん、ご回答ありがとうございます。

    一つ教えてください
    ・シート名が日本語表記の場合、表記は変わるのでしょうか。
    よろしくお願いします。

    No.3の回答に寄せられた補足コメントです。 補足日時:2020/06/19 12:43

A 回答 (5件)

No.2・3です。



>・シート名が日本語表記の場合、表記は変わるのでしょうか。

今回に関してはシート名は全く関係ありません。
シート見出しの一番左から右へ向かってすべてのシートを対象にしているので・・・

ちなみに
Worksheets(1) でシート見出しの一番左側
Worksheets(2) で2番目・・・
となります。

※ 一つ気になったのですが、
条件付き書式であれば一度設定するだけでデータ変更にも対応できますが、
当方が回答した方法だとデータ変更があるたびにマクロを実行する必要があります。

そうなると一旦B列の色を消去した方が良いと思いますので、前回のコードの
>Set myArea = Worksheets(k).Range("C5:C90")
の行の次に
>myArea.Offset(, -1).Interior.ColorIndex = xlNone
の1行を追加しておいてください。

これで一旦B5~B90セルの色が消えます。m(_ _)m
    • good
    • 0
この回答へのお礼

tom04さん、色々ありがとうございました。少しずつ勉強したいと思います。

お礼日時:2020/06/19 13:49

No1です



>質問の仕方が良くなかったようで
というよりも、全然違う内容なのでは??

とは言え、セル範囲や位置関係が違うだけなので、条件付き書式の対象範囲をB5〜B90に、判断の対象セルをC5に変えれば良いだけだと思います。

それ以前に、「条件付き書式」という方法で良いのなら、VBAにするまでもない気がしますが…
普通にセル値をチェックして色付けする方法は、他の方が回答してくださっているので、そちらにお任せします。
(完全一致で見ているみたいですが、質問文がやや曖昧なのでどっちなのかなぁ…)
    • good
    • 0
この回答へのお礼

fujillinさん、質問等々ご迷惑をお掛けしました。ありがとうございます。

お礼日時:2020/06/19 12:35

No.2です。



投稿後、No.1さんへの補足を拝見しました。
結局C5~C90セルが対象で「C」のセルの左隣り(B列)セルの色付けをしたい!というコトですね。

前回のコードに少しだけ手を加えました。

Sub Sample2()
 Dim k As Long
 Dim c As Range
 Dim myRng As Range, myArea As Range

  For k = 1 To Worksheets.Count '//←シート見出しの一番左から最後のシートまで//
   Set myArea = Worksheets(k).Range("C5:C90") '//★//
    For Each c In myArea
     If c = "C" Then
      If myRng Is Nothing Then
       Set myRng = c.Offset(,-1) '//★//
      Else
       Set myRng = Union(myRng, c.Offset(,-1)) '//★//
      End If
     End If
    Next c
     If Not myRng Is Nothing Then
      myRng.Interior.ColorIndex = 6 '//←黄色//
     End If
    Set myRng = Nothing
  Next k
End Sub

※ 「★」の行だけに少し手を加えています。m(_ _)m
この回答への補足あり
    • good
    • 0

こんにちは!



すべてのSheetを対象にしています。
標準モジュールにしてください。

Sub Sample1()
 Dim k As Long
 Dim c As Range
 Dim myRng As Range, myArea As Range

  For k = 1 To Worksheets.Count '//←シート見出しの一番左から最後のシートまで//
   Set myArea = Worksheets(k).Range("C5:R90")
    For Each c In myArea
     If c = "C" Then
      If myRng Is Nothing Then
       Set myRng = c.Offset(-1)
      Else
       Set myRng = Union(myRng, c.Offset(-1))
      End If
     End If
    Next c
     If Not myRng Is Nothing Then
      myRng.Interior.ColorIndex = 6 '//←黄色//
     End If
    Set myRng = Nothing
  Next k
End Sub

※ 条件付き書式が設定してあると、そちらが優先され何も変化しませんので
条件付き書式はクリアしてマクロを実行してみてください。m(_ _)m
    • good
    • 0

こんにちは



条件付き書式でもよければ・・・
Sub Sample()
With Range("C5:R90")
 .FormatConditions.Delete
 .FormatConditions.Add Type:=xlExpression, Formula1:="=FIND(""C"",C6)"
 .FormatConditions(1).Interior.COLOR = 65535 '黄色
End With
End Sub

上記はActiveSheetに対して実行されます。
>5シートあり~~
シートがどこにあるのか不明なので、1シート分だけのサンプルです。
この回答への補足あり
    • good
    • 0

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