• 締切済み

VBA 右へ1セルずつ色塗りするには 

再質問です。 VBAでの色塗りに苦戦しています。 例えば、B列とD列にランダムに下記(1)~(7)の文字列が配列しています。 COUNTIF関数によって それぞれの文字列の数をカウントします。 (1)みかん  3 (2)サイダー 2 (3)いちご   6  (4)キウイ   8 (5)なし    1 (6)ぶどう   4 (7)チョコ   3 文字列の数によって、1セルずつ右に色塗りをしたいのです。 出発点、色は下記の通り、H列からBA列で色塗り終了です。 入力によって色塗りはどんどん右にのびていくことになりますが BA列に到達してからは、それ以上入力しても反映させません。 (1)みかん  →H列11行目、黄色 (2)サイダー →H列12行目、水色 (3)トマト   →H列13行目、赤色 (4)キウイ  →H列14行目、緑色 (5)なし   →H列15行目、白色 (6)ぶどう  →H列16行目、紫色 (7)チョコ  →H列17行目、茶色 以上、よろしくお願いします。

みんなの回答

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.2

No.1です! たびたびごめんなさい。 前回は色付だけでしたが、実際は色を消すマクロも必要だと思いますので もう一度コードを載せてみます。 今回は「コマンドボタン」にしていません。 Sub 色付() Dim i, j, k, L As Long For k = 11 To 17 For i = 1 To 7 j = Cells(k, Columns.Count).End(xlToLeft).Column + 1 If Cells(k, 7) = Cells(i, 2) And j <= 53 Then L = j + Cells(i, 4) - 1 If L > 53 Then L = 53 End If With Range(Cells(k, j), Cells(k, L)) .Value = 1 .Font.ColorIndex = Cells(k, 7).Interior.ColorIndex .Interior.ColorIndex = Cells(k, 7).Interior.ColorIndex End With End If Next i Next k End Sub Sub リセット() If MsgBox("色を削除しますか?", vbYesNo) = vbYes Then With Range("H11:BA17") .ClearContents .Interior.ColorIndex = xlNone End With Else Exit Sub End If End Sub ※ 前回同様、G列にはB列のデータを入力(順番は変わっても問題ありません)しておき、 塗りつぶしたい色でセルを塗りつぶしておきます。 参考になりますかね?m(_ _)m

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.1

こんばんは! 前回似たような質問に投稿した者です。 >文字列の数によって、1セルずつ右に色塗りをしたいのです・・・ の部分で、解釈が違っていたらごめんなさい。 B・D列のセル配置が判らないので勝手に↓の画像の配置にしています。 コマンドボタンを配置して、クリックするとD列の数だけ色がつくようにしてみました。 Private Sub CommandButton1_Click() Dim i, j, k, L As Long For k = 11 To 17 For i = 1 To 7 j = Cells(k, Columns.Count).End(xlToLeft).Column + 1 If Cells(k, 7) = Cells(i, 2) And j <= 53 Then L = j + Cells(i, 4) - 1 If L > 53 Then L = 53 End If With Range(Cells(k, j), Cells(k, L)) .Value = 1 .Font.ColorIndex = Cells(k, 7).Interior.ColorIndex .Interior.ColorIndex = Cells(k, 7).Interior.ColorIndex End With End If Next i Next k End Sub ※ 「白」は塗りつぶしているかどうか判らないので「灰色25%」にしています。 ※ F列にA列データを入力・セル色は色サンプルとして塗りつぶしています。 尚、H列以降のセルには「1」のデータを入れていますので、最初からやり直す場合は データを削除し、「セルの塗りつぶし」なし にして行ってみてください。 外していたらごめんなさいね。m(_ _)m

関連するQ&A

  • エクセル VBAで色塗りについて教えてください

    VBA初心者です。 例えばB列2行目から下に(1)~(7)までの番号を不規則に入力することにより F列11~17行目に1セルずつ右へ色塗りをしていくにはどうプログラムをかいたらよいでしょうか? 番号によって、色塗りの行と色は決まっています。 (1)→11行目、黄色 (2)→12行目、青色 (3)→13行目、赤色 (4)→14行目、緑色 (5)→15行目、白色 (6)→16行目、黒色 (7)→17行目、茶色 また色塗りはF列からBD列までで終了です。 番号の入力回数の多いものが色塗りを早く終了できることになります。 VBAの本をみながら試行錯誤していましたが、うまくできず… どなたか詳しい方、お力を貸してください。

  • 行内で空白、重複を除いた結果を別セルに表示したい

    A~D列に言葉が入っているのを、F列以降に空白、重複を除いて、結果を表示したいのですが、やり方がわかりません。(別シートではなく、同じシート内で処理したいです。) A~D列に入る言葉は200個程の種類があります。 行は4万行くらいのデーターがあるので行列を入れ替えた表には出来ません。 ジャンプで空白セル選択→まとめて削除をすると、データー数が多いので、パソコンが固まってしまいました。 なので、行ごとに処理をしたいのです。 よろしくお願いします。  A     B   C    D        F     G    H    I みかん ぶどう りんご みかん → みかん りんご ぶどう みかん (空白) (空白) みかん → みかん (空白) ぶどう りんご みかん → ぶどう  りんご みかん みかん ぶどう りんご すいか → みかん ぶどう りんご すいか

  • エクセルでカウントした数を特定のセルに入力したい

    エクセルの関数について質問させてください。 A列  B列   C列 8/9       リンゴ 8/10      ミカン 8/11      リンゴ 8/12      ブドウ 8/13      ミカン 8/14      リンゴ 8/15      ブドウ 上記のような表で、C列でカウントしたリンゴの数を 前日の日付の行の、B列に入力したいのです。 ※今が8/10だとすると、リンゴの数「3」を  8/9の行のB列の欄に入力したい。 COUNTやCOUNTIFSで色々試してみたのですが、 どうしてもうまくいきません。 どうぞ宜しくお願いします。

  • EXCEL VBA における個数のカウント方法について

    すいませんEXCEL VBAについて質問があります。     A列   1行  みかん 2行  みかん 3行  (空欄) 4行  みかん 5行  ぶどう 6行  みかん 7行  みかん 8行  ぶどう 9行  (空欄) ・ ・ 50行 A列は「みかん」若しくは「ぶどう」の値又は空欄のいずれかになっている。 空欄は無視して(1行~4行はみかんが3つ連続で並んだと考える)、 50 行までの間に「みかん」が最大で何回連続で並んだかを調べ、その最大の値をB1セルに入れる。 これをVBAで処理するにはどうしたらいいのでしょうか。 For ~NextとIfで条件分岐 というような形になるのかなと思ったのですが どうしても思い浮かびません。 どうぞよろしくお願いします。

  • 条件付き書式で色塗りしたセルをカウント マクロ 

    数値がランダムに入っている表に条件付き書式で指定の数式に合致するとセルを色塗りするよう設定しあります。その色塗りしたセルをカウントするにはどうすればよいか検索していましたら、下記にマクロでの手法が説明されていましたが、マクロに詳しくないので、どう利用したらよいかわかりません。 http://keep-on.com/excelyou/1999lng4/199908/99080044.txt たとえば、A1:Y30の範囲の表があるとして、1行ごとに色塗りしたセルをカウントしたいです。Z1,Z2,Z3,Z4...にそれぞれ結果が表示されるようにするには、上記のマクロ(もしくは違う方法)をどのように使用したらよいんでしょうか? ちなみに1列おきにカウントしたくない列が入っているので、COUNTIF関数を使わないでやりたいんです。色のついたセルを定義してやる方法もありましたが、条件付き書式では不可能とわかりましたので、上記の方法しかないのかなと思うんですが。詳しい方、教えてください。

  • 『FLASE』のエラーが出た時そのセルを空白に

    Excelの初心者です。下記のようにする為に、 I列の3行目に『蜜柑』を入力すると数式が入っているセルに『1』が入力される。 I列の3行目に『林檎』を入力すると数式が入っているセルに『1』を入力される。 I列の3行目に『葡萄』を入力すると数式が入っているセルに『0』を入力される。 I列の3行目に『無花果』を入力すると数式が入っているセルは空白のままとする。 I列の3行目が空白の時は、数式が入っているセルも空白のままとする。 =IF(I3="蜜柑",1,IF(I3="林檎",1,IF(I3="葡萄",0,IF(I3="無花果","",IF(I3="","")))))の式を考えましたが、 上記以外の文字をI列に入力した場合は、『FLASE』の文字が表示されてしまいます。 数式を入力した欄に『FLASE』のエラーが出た時は、空白にしたいのですが、どのように数式を組み合わせたら良いのか分からず大変困っています。 お分かりでしたら、ご教示をお願い出来ますと大変助かります。 以上 どうぞよろしくお願い致します。

  • あるセルの文字列が条件で、あるセルに色を設定するには?(2)

    例えば、下のような表で      A      B      C       D      1   商品名   数量     名前    2   りんご     2     さとう 3   みかん     1     さとう     3 4   ぶどう     1     すずき 5   ばなな     2     すずき     3 6   みかん     3     たなか 7   りんご     2     たなか 8   ぶどう     2     たなか     4 「みかん」という商品名の時だけ、C列の重複している名前の一番下のセルに、黄色を設定したい場合は、どうしたらよいのでしょうか? つまり、セルC3とC8に色をかけたいのです。不可能でしょうか(-_-;)ちなみにD列は、重複している名前の一番下の行に合計が出る関数が入っています。一番下が難しいなら、みかんの商品があるうちの重複している名前(さとう・たなか)すべてに色がついてもかまいません。 どなたかいい方法があれば教えてください。よろしくお願いします(>_<)

  • エクセルVBA 条件にあうときセルを塗りつぶすには?

    エクセルVBA 条件にあうときセルを塗りつぶすには? エクセルVBAについて教えてください。 _________A 列 _________B 列_________C列_________D列 -------------------------------------------- 1行| 基準値_________ 5_____________1____________8 2行| りんご____________1_____________9____________0 3行| みかん___________12___________5____________3 4行| ぶどう____________15___________7____________8 5行| バナナ____________3_____________1____________4 上図のようにデータがあります。 (実物は列行共に膨大です。また条件を4つ以上つける予定なので条件付書式は使えません) 各列の基準値に対して、セルの増減が、0以下のときに黄色に、5から8のとき大きくなるときに赤、9以上のときに青にセルの色を塗りつぶしたいです。 どのようにすればよいでしょうか? B列の場合、基準値が5です。 B2のセルの場合、基準値5と1(B2セル)の増減は-4です。 増減が0以下のときは黄色に、増減が5から8のときは赤に、増減が9以上のときに青にするので、このときは黄色に塗りつぶします。 B3のセルの場合、基準値5と12(B3セル)の増減は7です。 増減が5から8のとき赤に塗りつぶすので、このセルは赤に塗りつぶします。 B4のセルの場合、基準値5と15(B4セル)の増減は10です。 増減が9以上のとき青色に塗りつぶすので、このセルは青色に塗りつぶします。 C2のセルの場合は、C列の基準値は1(C1セル)です。 基準値1と9(C2のセル)の増減は8です。 増減が5から8のとき赤に塗りつぶすので、このセルは赤に塗りつぶします。 よろしくお願いいたします。

  • EXCEL VBAについて

    いつも識者の皆様にはお世話になっております。 Excel VBAのことで質問させてください。 下記のようなシートがあります。 データの状態は下記です。 1. 1行目は必ずタイトル行になっています。 2. 1行目が「入荷_1」になっている列以降の日付はシリアル値となっています。 ※必ずしもG1が「入荷_1」となっているとは限りません。H1だったりI1だったりします。 VBAでやりたいことは下記です。 1. 過去取引と現在取引の状態によってA列に入力する文字列を変える。 過去取引_1=有 現在取引_1=有 の場合 「OK」 過去取引_1=有 現在取引_1=無 の場合 「NG」 過去取引_1=ブランク 現在取引_1=有 の場合 「確認要」 2. 「入荷_1」以降の列で「入荷_1」「出荷_1」など、アンダーバー以降の文字列が同じになっている2列を一まとめとして、そのどちらかもしくは両方に日付の入っているセルを探し、その列の1行目の、アンダーバーの次の文字から最後の文字までを[]で囲んだ文字列をB列に入力する。 ※_1にも_2にもある場合は、アンダーバーを使って文字列を連結する。(B2セル) ※パイナップルやぶどうのように入荷か出荷のいずれかにしか日付が入っていないものもある。 3. タイトル行が「入荷_1」となっている列以降で日付の入っている列を探し、出荷から入荷を引いた数字をC列に入力する。 ※_1にも_2にもある場合は、アンダーバーを使って文字列を連結する。(C2セル) これを2行目から1行ずつ最後の行まで行い、かつ、このシートはブックにある複数のシートの中の1つですが、BA1セルが空白ではないシートにだけこの処理をしたいのです。 どうやらSelect Caseという構文を使えばできそうだというところまで突き止めたものの、条件が僕には複雑すぎて(特に2列を1まとめにするところ)まったく進みません。 どなたか、上記内容の場合どのような構文になるのか教えていただけませんでしょうか。 よろしくお願いいたします。

  • 入力名を参照して右ヘ18個目の値をたのセルにコピー

     セル地U10からU39の列にH14.H15.H16・・・・・・・・・・・・・・H43(平成6年、平成7」とかの意味です)。この列の範囲の中で「H14」~とかが、1行上がったり、2行下がったりするので、行が変化しても、その時点の「H14」の行のセルの右へ18個目のセルの値をQ55にコピーしたい。  同じように「H15」の行のセルの右へ18個目のセルの値をQ56・・・・・・・・・・・(順に下がっていき)「H43」の行のセルの右へ18個目のセルの値をQ84と順に上から貼り付けたいのですが よろしくお願いします。

専門家に質問してみよう