advanced help
per page, with , order by , clip by
Results of 1 - 1 of about 1385 for ������������ #N/A (0.016 sec.)
[[20211030175057]]
#score: 6930
@digest: 3b6ca45898fdd4816323cf381b942545
@id: 89451
@mdate: 2021-11-01T12:00:36Z
@size: 13232
@type: text/plain
#keywords: 丑様 (29993), 色コ (27342), 192 (18126), interior (7350), 定3 (6500), よ" (6197), 定2 (5508), color (5346), 判定 (4025), グレ (3817), rgb (3527), cells (3051), 255 (2949), sheets (2859), ー値 (2761), 研究 (2715), プ実 (2495), テッ (2413), レー (2329), クポ (2074), 変勉 (1900), ブレ (1818), 実験 (1808), iserror (1806), ステ (1609), 提示 (1507), エラ (1381), ト1 (1365), ラー (1288), case (1278), intersect (1211), 2021 (1196)
『マクロで条件一致したらセルに色を塗りたい』(くるみ)
表題について、教えて下さい。すみません、マクロ初心者でうまく行きません。 シート1, シート2があります。 シート1 A B C 1 2 判定1 No. 判定2 3 A 1-009 2 4 A 1-015 1 5 A 1-014 4 6 A 1-012 1 7 A 1-011 1 8 A 1-016 2 9 A 1-020 2 10 A 1-008 1 シート2 A B 1 2 3 No. 記号 4 1-009 〇 5 1-015 〇 6 1-014 〇 7 1-012 △ 8 1-011 × 9 1-016 × 10 1-020 11 1-008 シート1もシート2も、No.の並びは同じですが、行の始まりが違います。 やりたい事は、シート2の記号が〇か△か×(つまり空欄以外)はシート1のNo.が一致する行の判定1と判定2のセルの色を黄色で塗りつぶしたいです。 但し、一つ条件があり、もし〇か△か×だったとしても、シート1の判定2の値が4だった場合は、グレーとしたいです。(A5セルとC5セルをグレーとしたい) 記号が空欄の場合は何も色を塗りません。 下記のように考えましたが、これだと シート1のA列の3〜8行目が黒で塗りつぶされてしまいます。黄色やグレーにならない。 かつ、判定2(C列)にも色を付けたいのですが、色が何もつきません。 Sub test() Dim i As Long For i = 3 To 10 If Sheets("2").Cells(i + 1, 2) = "〇" Or Sheets("2").Cells(i + 1, 2) = "△" Or Sheets("2").Cells(i + 1, 2) = "×" Then Sheets("1").Cells(i, 1).Interior.Color = RGB(255, 255, 0) And Sheets("1").Cells(i, 3).Interior.Color = RGB(255, 255, 0) If Sheets("1").Cells(i, 3).Value = 4 Then Sheets("1").Cells(i, 1).Interior.Color = RGB(192, 192, 192) And Sheets("1").Cells(i, 3).Interior.Color = RGB(192, 192, 192) End If End If Next i End Sub 宜しくお願いいたします。 < 使用 Excel:Excel2016、使用 OS:Windows10 > ---- And ではなく : で繋げば一行に書けますけど、2行に分けた方が見やすいかも。 Sub test() Dim i As Long For i = 3 To 10 If Sheets("2").Cells(i + 1, 2) = "〇" Or Sheets("2").Cells(i + 1, 2) = "△" Or Sheets("2").Cells(i + 1, 2) = "×" Then Sheets("1").Cells(i, 1).Interior.Color = RGB(255, 255, 0): Sheets("1").Cells(i, 3).Interior.Color = RGB(255, 255, 0) If Sheets("1").Cells(i, 3).Value = 4 Then Sheets("1").Cells(i, 1).Interior.Color = RGB(192, 192, 192): Sheets("1").Cells(i, 3).Interior.Color = RGB(192, 192, 192) End If End If Next i End Sub (丑) 2021/10/30(土) 18:55 ---- Sub test_まとめてみた() Dim i As Long Dim R As Long, G As Long, B As Long For i = 3 To 10 With Sheets("2") If .Cells(i + 1, 2) = "〇" Or .Cells(i + 1, 2) = "△" Or .Cells(i + 1, 2) = "×" Then R = 255: G = 255: B = 0 With Sheets("1") If .Cells(i, 3).Value = 4 Then R = 192: G = 192: B = 192 Union(.Cells(i, 1), .Cells(i, 3)).Interior.Color = RGB(R, G, B) End With End If End With Next i End Sub ※すみません、一部修正。 19:33 (丑) 2021/10/30(土) 19:14 ---- 書きためていたら話が進んでいましたが投稿しておきます。 ■1 まず、おかしいなとおもったら【ステップ実行】して思った通りの処理になっているか自己検証することをお勧めします ※なお、ステップ実行という言葉を聞いたことがなければ↓を読んでみてください。 【ステップ実行】 https://www.239-programing.com/excel-vba/basic/basic023.html http://plus1excel.web.fc2.com/learning/l301/t405.html 【ブレークポイント】 https://www.239-programing.com/excel-vba/basic/basic022.html https://www.tipsfound.com/vba/01010 また、以下も知っておいて損は無いと思います。 【イミディエイトウィンドウ】 https://www.239-programing.com/excel-vba/basic/basic024.html https://excel-ubara.com/excelvba1/EXCELVBA486.html 【ローカルウィンドウ】 https://excel-ubara.com/excelvba4/EXCEL266.html http://excelvba.pc-users.net/fol8/8_2.html ■2 構文エラーにはならないようですが↓の書き方には違和感を感じますので再考されてはいかがでしょうか。 Sheets("1").Cells(i, 1).Interior.Color = RGB(255, 255, 0) And Sheets("1").Cells(i, 3).Interior.Color = RGB(255, 255, 0) ■3 おそらく判定の順番としては (1)「2」シートのB列が空白でない (2) かつ、「「1」シートのB列が4である」が真のとき・・・「1」シートのA,C列をグレーで塗りつぶし (3) 〃 偽のとき・・・「1」シートのA,C列を黄色で塗りつぶし ということですよね。 それをコードにすると↓のような感じになるとおもいますので、興味があればステップ実行して研究のうえ、必要な部分をご自身のコードに組み込んでみてください。 (理解していただきたいので、丸パクリして完成!というのはご遠慮ください。) Sub 研究用() Dim i As Long Dim 行 As Variant Stop 'ブレークポイントの代わり With Worksheets("1") For i = 3 To .Cells(.Rows.Count, "B").End(xlUp).Row 行 = Application.Match(.Cells(i, "B").Value, Worksheets("2").Range("A:A"), 0) If IsError(行) Then MsgBox .Cells(i, "B").Value & " が発見できません" Else If Worksheets("2").Cells(行, "B").Value <> "" Then If .Cells(i, "C").Value = 4 Then Intersect(.Rows(i), .Range("A:A,C:C")).Interior.Color = RGB(192, 192, 192) Else Intersect(.Rows(i), .Range("A:A,C:C")).Interior.Color = vbYellow End If End If End If Next i End With End Sub (もこな2) 2021/10/30(土) 19:43 ---- Sub sample() Dim i As Long Dim Yellow As Long, Grey As Long Yellow = RGB(255, 255, 0) Grey = RGB(192, 192, 192) For i = 3 To 10 Select Case Sheets("2").Cells(i + 1, 2) Case "〇", "△", "×" Select Case Sheets("1").Cells(i, 3).Value Case 1, 2, 3 Sheets("1").Cells(i, 1).Interior.Color = Yellow Sheets("1").Cells(i, 3).Interior.Color = Yellow Case 4 Sheets("1").Cells(i, 1).Interior.Color = Grey Sheets("1").Cells(i, 3).Interior.Color = Grey End Select End Select Next i End Sub (参考) 2021/10/30(土) 20:31 ---- 丑様 ありがとうございます!! まず、ANDの使い方が良くなかったのですね。よく考えてみたらそうですよね。。 なぜ、ANDだと色が黒になってしまったのかだけがどうしても不思議なのですが。 ANDという正しくない指定をした事で、色が0とみなされて、0=黒に変換された…?、、今後解明してみたいと思います。 そして、色を変数に格納してしまうという発想も大変勉強になりました。 もこな2様 所々に参考になるコードのご提示、ありがとうございます! 今回はNo.の並びが同じといえど、matchで No.が一緒かどうか判定させておいた方が確実ですね。 やりたい事を整理する事がまだ出来ていません。今後意識したい所です。 B列が空欄でないか先に条件分岐してしまう事も、大変勉強になりました。 Intersectの考え方も目から鱗でした。ありがとうございます。 (くるみ) 2021/10/30(土) 20:39 ---- 参考様 ありがとうございます!! 今回始めにやり方をネットで調べた所、ifの他にselectが使えそう…と思ったのですが、 selectの使い方がいまいち良く分からずifにしました。 このように使用するのですね。ありがとうございます。まだまだ駆け出しですが、色々出来るようになったら楽しそうですね。 今後、引き出しを増やしていけるように頑張ります! (くるみ) 2021/10/30(土) 20:45 ---- 先日は色々教えて頂き、ありがとうございました。 追加で恐縮ですが、教えて下さい。 グレーで塗る条件を判定3も追加したいです。 もし、シート1のD列に判定3があったとして、そこには3行目から10行目まで数式で#N/Aか、対象外のどちらか 数式で表示させているとします。 判定2の値が4かつ、判定3が#N/Aの場合グレーとしたいのですが、型が一致しませんと出てしまいます。 下記 丑様にご提示して頂いたコードの If .Cells(i, 3).Value = 4 Then R = 192: G = 192: B = 192 部分を If .Cells(i, 3).Value = 4 AND .Cells(i, 4).Value = "N/A" Then R = 192: G = 192: B = 192 としました。 最初に丑様にご提示いただいたコードです。 ↓↓ With Sheets("1") If .Cells(i, 3).Value = 4 Then R = 192: G = 192: B = 192 Union(.Cells(i, 1), .Cells(i, 3)).Interior.Color = RGB(R, G, B) End With ANDの使い方がいけないのか、 変数指定のi, R, G, Bをlongにしているからなのか分からなくて困っています。 (くるみ) 2021/11/01(月) 15:25 ---- #N/Aはエラー値なので、エラーの判定をする必要があると思います。 判定するエラー値を#N/Aに限定するなら、こんな感じでしょうか。 If .Cells(i, 3).Value = 4 And .Cells(i, 4).Value = CVErr(xlErrNA) Then R = 192: G = 192: B = 192 >変数指定のi, R, G, Bをlong 今回の場合、変数の型は関係ないです。 RGBは参考さんが提示されているように、1つの変数に入れた方が扱いやすいかも。 (丑) 2021/11/01(月) 18:08 ---- 丑様 大変ありがとうございます。あの後、作業列を作り、♯N/Aを文字列に変更するというやり方を試しましたが、 そのように処理できるのですね。今回、色々勉強させて頂きました。ありがとうございました! 色の変数も1つにまとめてみます。 (くるみ) 2021/11/01(月) 18:24 ---- のんびりと書きためていたら話が終わってましたが投稿しておきます。 ■4 繰り返しになりますが、おかしいとおもったら、まず【ステップ実行】して自己検証すべきです。 また、回答者には貴方の画面は見えませんので【現状のコード】をすべて(Sub〜End Subまで)提示のうえ【どこ】で【どのような】エラーが発生するのか提示をされるとよいでしょう。 ■5 私見になりますが、↓のような書き方(マルチステートメントといいます)は慣れていれば(理解していれば)よいのですが、初心者だといっている間はご自身が混乱するとおもうので避けた方がよいように思います。 R = 192: G = 192: B = 192 付随して、IF文も If〜End Ifまでを記述する基本形のほうがわかりやすいのではないかとおもいます。 ■6 >シート1のD列に判定3があったとして、数式で#N/Aか、"対象外"のどちらか表示させているとします。 #N/Aはエラー値というものなので、普通に文字列と比較判定させようとすると「型」が一致しないというエラーが出ます。 ※【値】が【エラー値】の場合【文字列】は「型」が違うので比較できない 単純にエラーかそうでないかを調べるだけならばIsError関数を使うことで判定ができます。 Sub 実験1() If IsError(Range("A1").Value) Then MsgBox "エラー値だよ" Else MsgBox "エラーじゃ無いよ" & vbLf & Range("A1").Value & "だよ" End If End Sub ですが、「#N/A」というエラーか判定をしたいならば、ちょっとめんどくさいことになります Sub 実験2() If IsError(Range("A1").Value) Then If Range("A1").Value = CVErr(xlErrNA) Then MsgBox "N/Aエラーだよ" Else MsgBox "N/A以外のエラーだよ" End If Else MsgBox "エラーじゃ無いよ" & vbLf & Range("A1").Value & "だよ" End If End Sub なお↑は【値(Value)】を使った場合の話です。表示されている情報(Textプロパティ)であれば【文字列】として扱うことが出来ます。 Sub 実験3() Select Case Range("A1").Text Case "#N/A", "対象外" MsgBox "条件に合致" Case Else MsgBox "条件を満たさない" End Select End Sub ただし、セルの幅が狭く###のように表示されてしまっている場合は、この方法は使えません。 【参考】 https://qiita.com/nukie_53/items/6c2d9d4699149bebe863 ■7 残念ながら前回提示したものは研究していただけなかったようですが、改造版を提示しておきます。 例によって研究用として提示しているので丸パクリはNGとします。 Sub 研究用2() Dim i As Long Dim 行 As Variant Dim 色コード As Long Stop 'ブレークポイントの代わり With Worksheets("1") For i = 3 To .Cells(.Rows.Count, "B").End(xlUp).Row 色コード = 0 行 = Application.Match(.Cells(i, "B").Value, Worksheets("2").Range("A:A"), 0) If IsError(行) Then MsgBox .Cells(i, "B").Value & " が発見できません" Else Select Case Worksheets("2").Cells(行, "B").Value Case "〇", "△", "×" Select Case .Cells(i, "C").Value Case 4 If .Cells(i, "D").Text = "#N/A" Then 色コード = RGB(192, 192, 192) End If Case Else 色コード = vbYellow End Select Case Else '省略可能だがあえて記述 '何もしない End Select End If If 色コード <> 0 Then Intersect(.Rows(i), .Range("A:A,C:C")).Interior.Color = 色コード End If Next i End With End Sub (もこな2 ) 2021/11/01(月) 19:40 ---- もこな2様 先日に引き続き、順を追っての分かりやすいご説明、ありがとうございます! 型が一致しないと出てきた理由も、ご説明頂いた事でよく分かりました。 ご提示頂いたコード、前回も今回も所々に参考になるヒントが入っており、 大変勉強になっています。(ステップインで確認させて頂きました。) ありがとうございました^ ^ (くるみ) 2021/11/01(月) 21:00 ...
http://www.excel.studio-kazu.jp/wiki/kazuwiki/202110/20211030175057.txt - [detail] - similar
PREV NEXT
Powered by Hyper Estraier 1.4.13, with 97004 documents and 608067 words.

訪問者:カウンタValid HTML 4.01 Transitional