- ベストアンサー
検索値が隣どうしの場合に黄色に塗潰されない
- 検索値が隣どうしの場合に黄色に塗潰されない不具合が発生しています。修正方法を教えてください。
- 質問のソースコードを提供しています。修正のためのソースコードを教えてください。
- 質問の例題を提供しています。検索値によって黄色・赤色・青色で塗潰されるセルを教えてください。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
関連するQ&A
- 全部黄色になってしまいます
下記のマクロを作成しました。 1.Sheet1のA列の数字を1つずつ検索して、sheet2にその数字があれば、sheet2のそのセル赤くする。 全部あればすべてのセルが赤くなり、無いところがあれば白いままというマクロ 2.sheet1羅列を検索してsheet2に無い場合、逆にsheet1のその数字(検索してなかった数字)を黄色にする。 困っていることは、何も数字の無いところが全部黄色になってしまいます。 sheet1の空白のところは処理せずにそのまま白くあって欲しいのですがどのようにすればいいでしょうか? ●sheet1のA列に下記のような数字が羅列(200行程)しています。 238062 238075 238096 238210 91518 238230 123456 789123 456789 ●sheet2のA列に下記のような数字が羅列しています。 91518 238062 238075 238096 238210 Sub 赤色付け() Set WS1 = Worksheets("Sheet1") Set WS2 = Worksheets("Sheet2") Dim RowPos As Integer Dim i As Integer For RowPos = 1 To 200 If WorksheetFunction.CountIf(Range(WS2.Cells(1, 1), WS2.Cells(200, 1)), WS1.Cells(RowPos, 1)) > 0 Then i = WorksheetFunction.Match(WS1.Cells(RowPos, 1), Range(WS2.Cells(1, 1), WS2.Cells(200, 1)), 0) WS2.Cells(i, 1).Interior.ColorIndex = 3 ELSE WS1.Cells(RowPos, 1).Interior.ColorIndex = 6 End If Next End Sub
- ベストアンサー
- その他MS Office製品
- マクロでセルの色を塗りたい
マクロでセルの色を塗りたいです。 現在、予めRGBの値を取得しておいて Private Sub Worksheet_Change(ByVal Target As Range) Dim R As Integer Dim G As Integer Dim B As Integer R = 100 G = 50 B = 128 If Target.Value = "A" Then Target.Interior.Color = RGB(R, G, B) End If End Sub のように使っています。 このRGBの値を他の所で流用するに当たって、1つの変数のまとめたいのですが、 RGBをまとめて代入?する方法はあるでしょうか。 以下のような使い方をしたいです(勿論これはダメでしたけど。見るからにダメそうですし)。 Dim IRO As String IRO = "100, 50, 128" Target.Interior.Color = RGB(IRO) 不可能でしょうか?
- ベストアンサー
- オフィス系ソフト
- エクセルのマクロ(黄色付け)
派遣切り後、事務職の就職がようやく見つかりました。 仕事の効率を少しでも上げて、より多くの業務処理をしたいので下記のマクロを作成したいと考えています。 1ヶ月前に書籍を購入して独自でできるか試したのですがダイレクトな情報が見つからず、基礎の部分だけはできたところです。 恐縮なのですがもし、できる方がいましたらぜひ教えて頂けませんでしょうか【黄色付け機能の所を】。 赤色付け機能(既に有り): 下記のようにSheet1のA列の数字を1つずつ検索して、sheet2にその数字があれば、sheet2のそのセル赤くする。 Sub 赤色付け() Set WS1 = Worksheets("Sheet1") Set WS2 = Worksheets("Sheet2") Dim RowPos As Integer Dim i As Integer For RowPos = 1 To 200 If WorksheetFunction.CountIf(Range(WS2.Cells(1, 1), WS2.Cells(200, 1)), WS1.Cells(RowPos, 1)) > 0 Then i = WorksheetFunction.Match(WS1.Cells(RowPos, 1), Range(WS2.Cells(1, 1), WS2.Cells(200, 1)), 0) WS2.Cells(i, 1).Interior.ColorIndex = 3 End If Next End Sub 【黄色付け機能:】 sheet1羅列を検索してsheet2に無い場合、逆にsheet1のその数字(検索してなかった数字)を黄色にもする ということは可能でしょうか。 下の場合、sheet1の123456と789123と456789が黄色になります。 そして、sheet2の123456と789123と456789以外が赤色になります。 ●sheet1のA列に下記のような数字が羅列(200行程)しています。 238062 238075 238096 238210 91518 238230 123456 789123 456789 ●sheet2のA列に下記のような数字が羅列しています。 91518 238062 238075 238096 238210 238230
- ベストアンサー
- その他MS Office製品
- macroについて教えてください
こんにちは。以前こちらでPrivate SubについてMacroを教えていただきました。(あの後ログインパスワード等が不明になりお礼も出来ませんでしたが。。。回答頂いた方すみませんでした。) 下記がそのMacroですが、今回また少し変えることになり どのように変えていいのか分かりません。 前回は1~5はグレー、6~10は茶色・・・という形にしたのですが 今回は進捗率での管理をしたく、80%以下は白、80~90%は赤、90~100%は青としたいと思っています。 Private Sub Worksheet_Change(ByVal Target As Range) Dim iColors As Variant Dim rw As Long Dim CellCnt As Integer Dim col As Integer Dim col2 As Integer Dim i As Integer Dim j As Integer Dim k As Integer Dim c As Variant Dim ar() As Variant Dim Sh1 As Worksheet Set Sh1 = Worksheets("小児科Dr") col = Target.Cells(1).Column '制限された列 If Not (col = 4 Or col = 8 Or col = 12 Or col = 16) Then Exit Sub iColors = Array(16, 16, 16, 16, 16, 53, 53, 53, 53, 53, 54, 54, 54, 54, 54) CellCnt = Target.Count ReDim ar(CellCnt - 1) For Each c In Target If c.Value <> "" Then If IsNumeric(c.Value) Then i = c.Value If i >= 11 Then i = 10 End If If i > 0 And i < 11 Then j = iColors(i - 1) Else j = 2 End If ar(k) = j k = k + 1 End If End If Next c rw = Target.Row Select Case col Case 4: col2 = 2 Case 8: col2 = 8 Case 12: col2 = 14 Case 16: col2 = 20 'Sh1.Cells(rw + 2, 13).Resize(Int(Target.Count / 3), 3).Interior.ColorIndex = j End Select InsideColors Sh1, rw, col2, CellCnt, ar() Set Sh1 = Nothing End Sub Private Sub InsideColors(sh As Worksheet, _ rw As Long, _ col As Integer, _ cnt As Integer, _ ar As Variant) 'sh[シート],rw[行], col[列],cnt[セル個数],iColor[色指数] Dim i As Integer Dim j As Integer Dim n As Integer Dim k As Integer If cnt Mod 5 > 0 Then '範囲行数 i = (cnt + 5 - (cnt Mod 5)) / 5 Else i = cnt / 5 End If rw = Int((rw - 1) / 5) + 1 '行再設定 j = ((rw - 1) Mod 5) + 1 '列設定 For n = j To cnt sh.Cells(rw + 2, col).Resize(i, 5).Cells(n).Interior.ColorIndex = ar(k) k = k + 1 Next n End Sub 毎回他の人を頼ってしまい、申し訳ないのですがお願いします。 また、前回分からなかったので1~5を指定するときに5回同じカラー番号を書いたのですがこちらも良かったら手直し方法を教えていただければ助かります。 宜しくお願いします。
- ベストアンサー
- オフィス系ソフト
- 【改造】検索値と一緒に出ている隣接数字を知るには?
いつもお世話になっております。 どかたかご存知でしたら回答をお願いします。 1ケ月程前に下記の質問をさせていただきました。 そして回答を頂きました。これを改造したく質問します。 尚、5×6マス以外に、5×5マス、5×7マスへの改造方法も教えて頂けると助かります。 ◆改造(付け加える)要件・・・下記以外は前回と同じです。 (3)コピー後に検索値欄の値でコピーした側の4つの5×6のセル内を検索して塗潰す。 具体的には、 (1)検索値と同じ値を見つけたら、黄色でセルを塗潰す。【既存】 (2)検索値と同じ値で隣接する8方向(上、下、左、右、右下、左下、右上、左上) の数字との差が0か1なら、検索値とそのセルを赤色で塗潰す。【既存】 (3)検索値と同じ値で隣接する8方向(上、下、左、右、右下、左下、右上、左上) の数字が全て同じなら、青く塗り潰す。【追加】 〇例題 A B C D E F G H I J K L M 1 01 11 16 26 31 40 08 15 21 25 30 35 2 02 03 06 17 27 41 01 11 26 28 31 36 3 04 09 12 19 22 42 02 03 06 16 17 37 4 05 13 14 23 29 43 04 09 12 22 27 38 5 07 10 18 20 24 27 05 13 19 23 29 39 6 7 04 13 16 30 31 33 05 08 20 22 26 37 8 02 15 17 24 29 34 01 03 07 18 19 38 9 01 03 07 19 25 35 04 12 14 16 25 39 10 11 12 14 21 27 36 10 11 21 23 27 40 11 06 09 10 23 28 37 06 08 09 20 28 41 複写数:01 ※最大1~43の数字が入る。 検索値:01 ※最大43個の数字が右に並ぶ。 〇結果 A1、H2、A9、H8:01が黄色で塗潰される。 A2、H3、A8 :02が赤色で塗潰される。 B2、I3、B9、I8 :03が青色で塗潰される。 〇青色を塗潰す説明 A1にある01の隣接数字は小さい順に、02、03、11 H2にある01の隣接数字は小さい順に、02、03、08、11、15 A9にある01の隣接数字は小さい順に、02、03、11、12、15 H8にある01の隣接数字は小さい順に、03、04、05、08、12 01が見つかった4か所全てに出現している隣接数字は03なので03を青色で塗潰す。 逆に03を検索値とした場合は、 B2にある03接数字は小さい順に、01、02、04、06、09、11、12、16 I3にある03隣接数字は小さい順に、01、02、04、06、09、11、12、26 B9にある03隣接数字は小さい順に、01、02、07、11、12、14、15、17 I8にある0の隣接数字は小さい順に、01、04、05、07、08、12、14、20 03が見つかった4か所全てに出現している隣接数字は01、12なので、 01、12を青色で塗潰す。 ****2018/11/21の質問の内容**** 【質問】 例題の様に5×6マスが4つあり、その中を1~43の数字が重複有りで入っています。 1つ目の5×6マス:A1~F5 2つ目の5×6マス:H1~M5 3つ目の5×6マス:A7~F11 4つ目の5×6マス:H7~M11 使い方としては、 (1)複写数欄と検索値欄それぞれに値を入れます。 (2)複写数欄の数だけ、上記4つの5×6のセルを1塊りとして下にコピーする (最大:43)。 検索値欄の検索値も1つコピーする。 (3)コピー後に検索値欄の値でコピーした側の4つの5×6のセル内を検索して塗潰す。 具体的には、 (1)検索値と同じ値を見つけたら、黄色でセルを塗潰す。 (2)検索値と同じ値で隣接する8方向(上、下、左、右、右下、左下、右上、左上) の数字との差が0か1なら、検索値とそのセルを赤色で塗潰す。 〇例題 A B C D E F G H I J K L M 1 06 21 23 36 37 43 01 08 16 31 35 41 2 07 12 14 23 32 43 06 10 13 20 27 32 3 09 17 20 29 42 40 02 15 18 30 34 38 4 03 05 13 25 27 41 01 09 25 30 42 43 5 04 11 22 28 35 39 11 16 18 24 29 42 6 7 03 17 27 36 40 41 07 21 22 23 33 37 8 03 04 08 24 26 39 02 03 07 14 18 38 9 10 12 22 32 37 42 05 10 13 40 41 42 10 02 09 25 32 41 42 07 13 22 40 41 42 11 08 14 23 24 30 39 03 29 31 40 41 42 複写数:01 ※最大1~43の数字が入る。 検索値:41 ※最大43個の数字が右に並ぶ。 〇結果 M1:41が黄色で塗潰される。 E3、F3、F4 :40、41、42が赤色で塗潰される。 E7、F7 :40、41が赤色で塗潰される。 F9、E10、F10:41、42、42が赤色で塗潰される。 K9、L9、M9、K10、L10、M10、K11、L11、M11:40、41、42が赤色で塗潰される。 〇注意事項 ・使用するエクセルは2010です。 ・セルの数字は表示上、2桁で表しています。(例:1ではなく01) ・検索値欄に入力できる数字は最大43個で、1~43迄の数字です。 ・複写数欄に入力できる数字は1~43迄の1つです。 以上、よろしくお願いします。
- ベストアンサー
- Excel(エクセル)
- 【改造】検索値と一緒に出ている隣接数字を知るには2
いつもお世話になっております。 どかたかご存知でしたら回答をお願いします。 ここ最近、同じ様な質問をしておりますが、よろしくお願いします。 ◆改造(付け加える)要件・・・下記以外は前回と同じです。 (3)コピー後に検索値欄の値でコピーした側の4つの5×6のセル内を検索して塗潰す。 具体的には、 (1)検索値と同じ値を見つけたら、黄色でセルを塗潰す。【既存】 (2)検索値と同じ値で隣接する8方向(上、下、左、右、右下、左下、右上、左上) の数字との差が0か1なら、検索値とそのセルを赤色で塗潰す。【既存】 (3)検索値と同じ値で隣接する8方向(上、下、左、右、右下、左下、右上、左上) の数字が全て同じなら、青く塗り潰す。【既存】 (4)検索値と同じ値で隣接する8方向(上、下、左、右、右下、左下、右上、左上) の数字が1ヶ所を除いて全て同じなら、緑色で塗り潰す。【追加】 〇例題 A B C D E F G H I J K L M 1 01 11 16 26 31 40 08 15 21 25 30 35 2 02 03 06 17 27 41 01 11 26 28 31 36 3 04 09 12 19 22 42 02 03 06 16 17 37 4 05 13 14 23 29 43 04 09 12 22 27 38 5 07 10 18 20 24 27 05 13 19 23 29 39 6 7 04 13 16 30 31 33 05 08 20 22 26 37 8 02 15 17 24 29 34 01 03 07 18 19 38 9 01 03 07 19 25 35 04 12 14 16 25 39 10 11 12 14 21 27 36 10 11 21 23 27 40 11 06 09 10 23 28 37 06 08 09 20 28 41 複写数:01 ※最大1~43の数字が入る。 検索値:01 ※最大43個の数字が右に並ぶ。 〇結果 A1、H2、A9、H8:01が黄色で塗潰される。 A2、H3、A8 :02が赤色となる筈だが、3ヶ所で出ているので緑色で塗潰す。 B2、I3、B9、I8 :03が青色で塗潰される。 B1、I2、A10 :11が緑色で塗潰される。 〇青色、緑色で塗潰す説明 A1にある01の隣接数字は小さい順に、02、03、11 H2にある01の隣接数字は小さい順に、02、03、08、11、15 A9にある01の隣接数字は小さい順に、02、03、11、12、15 H8にある01の隣接数字は小さい順に、03、04、05、08、12 01が見つかった4か所全てに出現している隣接数字は03なので03を青色で塗潰す。 01が見つかった3か所全てに出現している隣接数字は02と11なので、 02と11を緑色で塗潰す。 ※02は本来、01の差:1のため赤色となるが、緑色の条件にも当てはまるため最終的に 緑色で塗潰す。(青色の条件に当てはまった場合も緑色の条件にも当てはまれば最終的に 緑色で塗潰す。) 逆に03を検索値とした場合は、 B2にある03接数字は小さい順に、01、02、04、06、09、11、12、16 I3にある03隣接数字は小さい順に、01、02、04、06、09、11、12、26 B9にある03隣接数字は小さい順に、01、02、07、11、12、14、15、17 I8にある0の隣接数字は小さい順に、01、04、05、07、08、12、14、20 03が見つかった4か所全てに出現している隣接数字は01、12なので、 01、12を青色で塗潰す。 03が見つかった3か所全てに出現している隣接数字は02、04、11、なので、 02、04、11を緑色で塗潰す。 ****2018/11/21の質問の内容**** 【質問】 例題の様に5×6マスが4つあり、その中を1~43の数字が重複有りで入っています。 1つ目の5×6マス:A1~F5 2つ目の5×6マス:H1~M5 3つ目の5×6マス:A7~F11 4つ目の5×6マス:H7~M11 使い方としては、 (1)複写数欄と検索値欄それぞれに値を入れます。 (2)複写数欄の数だけ、上記4つの5×6のセルを1塊りとして下にコピーする (最大:43)。 検索値欄の検索値も1つコピーする。 (3)コピー後に検索値欄の値でコピーした側の4つの5×6のセル内を検索して塗潰す。 具体的には、 (1)検索値と同じ値を見つけたら、黄色でセルを塗潰す。 (2)検索値と同じ値で隣接する8方向(上、下、左、右、右下、左下、右上、左上) の数字との差が0か1なら、検索値とそのセルを赤色で塗潰す。 〇例題 A B C D E F G H I J K L M 1 06 21 23 36 37 43 01 08 16 31 35 41 2 07 12 14 23 32 43 06 10 13 20 27 32 3 09 17 20 29 42 40 02 15 18 30 34 38 4 03 05 13 25 27 41 01 09 25 30 42 43 5 04 11 22 28 35 39 11 16 18 24 29 42 6 7 03 17 27 36 40 41 07 21 22 23 33 37 8 03 04 08 24 26 39 02 03 07 14 18 38 9 10 12 22 32 37 42 05 10 13 40 41 42 10 02 09 25 32 41 42 07 13 22 40 41 42 11 08 14 23 24 30 39 03 29 31 40 41 42 複写数:01 ※最大1~43の数字が入る。 検索値:41 ※最大43個の数字が右に並ぶ。 〇結果 M1:41が黄色で塗潰される。 E3、F3、F4 :40、41、42が赤色で塗潰される。 E7、F7 :40、41が赤色で塗潰される。 F9、E10、F10:41、42、42が赤色で塗潰される。 K9、L9、M9、K10、L10、M10、K11、L11、M11:40、41、42が赤色で塗潰される。 〇注意事項 ・使用するエクセルは2010です。 ・セルの数字は表示上、2桁で表しています。(例:1ではなく01) ・検索値欄に入力できる数字は最大43個で、1~43迄の数字です。 ・複写数欄に入力できる数字は1~43迄の1つです。 以上、よろしくお願いします。
- ベストアンサー
- Excel(エクセル)
- VBA 特定の色がついたセルを数える…
VBA初心者です。 特定の色がついているセルを数えるプログラムが組めなくて困っています。 たとえば Dim a as Integer a=Range(Cell(1,1),Cell(1,12))の間にあるセルが緑色の個数 このようにしたいのです。 できるだけFor文など一つ一つカウントしていくようなプログラムは避けたいです。 Countプロパティが鍵かなとは思ったのですが、思うように組めません。 なにかいい構文などはないでしょうか?
- ベストアンサー
- オフィス系ソフト
- Excel2003 VBA 文字を打ち込んだだけで色が変わる方法
突然失礼いたします。 前回、ファイルを開いたときに、青文字は無視、マイナスのときは赤に塗りつぶし、プラスのときは緑に塗りつぶし、それ以外は無視というプログラムを作りました。 今回は、それを文字を打っただけで実行できるようにしたいのですが、良い案はありますでしょうか。 ボタンを押すと・・・って処理でも良いんですが、それだと部長が忘れる可能性が高いんで・・・(^^;) 前回のプログラム: Private Sub Workbook_Open() Dim 英語 As Integer Dim 数字 As Integer Dim sh1 As Worksheet 英語 = 1 数字 = 1 For 数字 = 1 To 17 For 英語 = 1 To 7 '選択セル内が、文字色が青だったら無視、数字がマイナスだったら赤、数字がプラスだったら緑、それ以外は無視 If Cells(英語, 数字).Font.ColorIndex = 5 Then Cells(英語, 数字).Interior.ColorIndex = 0 ElseIf Cells(英語, 数字) < 0 Then Cells(英語, 数字).Interior.ColorIndex = 7 ElseIf Cells(英語, 数字) > 0 Then Cells(英語, 数字).Interior.ColorIndex = 4 Else Cells(英語, 数字).Interior.ColorIndex = 0 End If Next 英語 Next 数字 End Sub
- 締切済み
- Visual Basic
- 色付セルの数
こんにちは、詳しい方よろしくお願いします。 添付画像の表内赤色セルの数の合計を表したいのですが、0になってしまいます。 VBA Function CountColorA(Rng As Range) As Long Dim myRng As Range Dim Col_cnt As Long Application.Volatile Col_cnt = 0 For Each myRng In Rng If myRng.Interior.ColorIndex > 0 Then Col_cnt = Col_cnt + 1 End If Next myRng CountColorA = Col_cnt End Function 数を表示させたいセルに =CountColorA(D3:D29)としています。 どこが間違っているかわかる方、よろしくお願いします。 勉強不足ですみません。
- ベストアンサー
- Excel(エクセル)
- マクロで色が同じになるように設定したい
こんにちは。 現在マクロに挑戦中なのですが、一点分からず戸惑っています。 お分かりになる方教えてください。 下記のマクロを書きました。 Sheet2のセルに数字を入れることによってSheet1のセルの色が変わるようにしています。 25以上の数字は全て青(カラー番号5)表示にしたいのですが、どのように記したら良のか教えてください。 --------------------------------------------------------------- Private Sub Worksheet_Change(ByVal Target As Range) Dim iColors As Variant Dim i As Integer Dim j As Integer iColors = Array(36, 20, 24, 37, 40, 39, 17, 22, 45, 43, 28, 6, 4, 41, 18, 47, 50, 46, 10, 7, 3, 21, 9, 5) For Each c In Target If c.Value <> "" Then If IsNumeric(c.Value) Then i = c.Value If i > 0 And i < 25 Then j = iColors(i - 1) Else j = 2 End If End If End If i = c.Row If i > 2 And j > 0 Then Worksheets("Sheet1").Range("B3:K6").Cells(i - 3).Interior.ColorIndex = j End If Next c End Sub --------------------------------------------------------------- お分かりになる方、宜しくお願い致します。
- ベストアンサー
- オフィス系ソフト
お礼
回答頂きありがとうございます。 最初に回答頂いた後の確認不足でした。 再度、頂いた回答で修正されている事を確認しました。 新しい機能を付けて頂き、より区別しやすくなりました。 活用させて頂きます。 >実は、不具合を知らせる為に、あなた宛てに質問したのですが、連絡は来ていませんか。もしそうなら「このユーザに質>問する」は機能していないこという事です(OKWAVEではよくある事です)。すみませんが、連絡が来ているかどうか>確認していただけますか。 >もう1つ、1ケ月程前の質問(青が付いていない)が気になります。よければアドレスを載せて下さい。 この質問はOKWEBではなくBIGLOBEからさせて頂いてます。 「このユーザーに質問する」という機能は無いですし、私宛の連絡も来ていないです。 また、アドレスを載せる方法も無いです。 次回からは頂いた回答の確認に時間を取ってから質問を締め切るようにします。 このたびはありがとうございました。