• ベストアンサー

同じ数字を3個~4個使用している重複行の塗り潰し2

いつもお世話になっております。 ご存じの方がお見えでしたら回答をよろしくお願い致します。 【質問】  2019/09/29 22:13 に質問No.9662014 として、  『同じ数字を3個~4個使用している重複行の塗り潰し』という質問をさせて  頂きました。その時に、SI299792様とnishi6様から回答を頂きました。  この時の質問は5列×20行でしたが、  今回は添付図のとおり、7列×30行に増やした場合の改造の仕方を  知りたく質問させていただきます。その他条件は前回の質問(質問No.9662014  と同じです。 以上、よろしくお願いします。  

質問者が選んだベストアンサー

  • ベストアンサー
  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.4

>I行(重複する行)に重複している行をつけるには Sub paintCell2()  Dim num(30, 37) As Integer    '// 数値  Dim r As Integer, r2 As Integer '// 行カウンタ  Dim c As Integer, c2 As Integer, c3 As Integer '// 列カウンタ  Dim n As Integer         '// 数字  Dim Flg As Integer        '// 一致フラグ(カウンタ)  With Range("A1")   '// 値を取り込む   For r = 1 To 30    For c = 1 To 7     n = .Offset(r, c)     num(r, n) = 1    Next   Next   For r = 1 To 29    '// 一致のカウント    For r2 = r + 1 To 30     Flg = 0     For c = 1 To 37      If num(r, c) = 1 And num(r2, c) = 1 Then       Flg = Flg + 1      End If     Next        '// セルを塗る     If Flg = 3 Or Flg = 4 Then      If .Offset(r, 8) = "" Then       .Offset(r, 8) = "'" & r2      Else       .Offset(r, 8) = .Offset(r, 8) & "," & r2      End If      If .Offset(r2, 8) = "" Then       .Offset(r2, 8) = "'" & r      Else       .Offset(r2, 8) = .Offset(r2, 8) & "," & r      End If            For c2 = 1 To 7       For c3 = 1 To 7        If .Offset(r, c2) = .Offset(r2, c3) Then         .Offset(r, c2).Interior.ColorIndex = 6         .Offset(r2, c3).Interior.ColorIndex = 6        End If       Next      Next     End If    Next   Next  End With End Sub

sazanami0422
質問者

お礼

重複する行をつけてくださりありがとうございます。 添付いただいた結果と同じになりました。

その他の回答 (3)

  • SI299792
  • ベストアンサー率48% (711/1467)
回答No.3

済みません。コピペミスでプログラム名が消えました。頭は、 ' Option Explicit ' Sub Macro1() ' にして下さい。以降はそのままです。

  • SI299792
  • ベストアンサー率48% (711/1467)
回答No.2

列数の自動判断を付けました。行数、列数が増えても、プログラムの変更の必要はありません。 前回のnishi6さんのプログラムを参考に、実行速度を上げました。 その代わり、最大値は31です。最大値が大きくなる場合、To 31 の数を増やして下さい。 前回同様、黄色でなく、カラフルにしました。 3か所以上重複がある場合、どうするか書いてありません。そのまま色を付けています。その為、5か所以上色が付くことがあります。 なお、入力が面倒なので、このデータでは試していません。 ' Option Explicit '   Dim Row1 As Long   Dim Row2 As Long   Dim Count As Integer   Dim CEnd As Integer   Dim Col1 As Integer   Dim Col2 As Integer   Dim Index As Integer   Dim Find1(1 To 31) As Integer   Dim Find2(1 To 31) As Integer '   CEnd = [B1].End(xlToRight).Column   Cells.Interior.Pattern = xlNone   Cells(2, CEnd).Resize(Rows.Count - 1).ClearContents '   For Row1 = 2 To [B1].End(xlDown).Row - 1 '     For Row2 = Row1 + 1 To [B1].End(xlDown).Row       Count = 0       Erase Find1       Erase Find2 '       For Col1 = 2 To CEnd - 1         Index = Cells(Row1, Col1)         Find1(Index) = Col1         Index = Cells(Row2, Col1)         Find2(Index) = Col1       Next Col1 '       For Index = 1 To 31         Col1 = Find1(Index)         Col2 = Find2(Index)         Count = Count - (Col1 * Col2 > 0)       Next Index '       If Count = 3 Or Count = 4 Then '         For Index = 1 To 31           Col1 = Find1(Index)           Col2 = Find2(Index) '           If Col1 * Col2 > 0 Then             Cells(Row1, Col1).Interior.ColorIndex = Row1 + 1             Cells(Row2, Col2).Interior.ColorIndex = Row1 + 1           End If         Next Index         Cells(Row1, CEnd) = Cells(Row1, CEnd) & " " & Row2 - 1         Cells(Row2, CEnd) = Cells(Row2, CEnd) & " " & Row1 - 1       End If     Next Row2   Next Row1 End Sub

sazanami0422
質問者

お礼

いつもお世話になっております。 >行数、列数が増えても、プログラムの変更の必要はありません。 今後を見据えて対応してくださりありがとうございます。 上手く動きました。

  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.1

黄色が沢山になりました。 Sub paintCell()  Dim num(30, 37) As Integer    '// 数値  Dim r As Integer, r2 As Integer '// 行カウンタ  Dim c As Integer, c2 As Integer, c3 As Integer '// 列カウンタ  Dim n As Integer         '// 数字  Dim Flg As Integer        '// 一致フラグ(カウンタ)  With Range("A1")   '// 値を取り込む   For r = 1 To 30    For c = 1 To 7     n = .Offset(r, c)     num(r, n) = 1    Next   Next   For r = 1 To 29    '// 一致のカウント    For r2 = r + 1 To 30     Flg = 0     For c = 1 To 37      If num(r, c) = 1 And num(r2, c) = 1 Then       Flg = Flg + 1      End If     Next        '// セルを塗る     If Flg = 3 Or Flg = 4 Then      For c2 = 1 To 7       For c3 = 1 To 7        If .Offset(r, c2) = .Offset(r2, c3) Then         .Offset(r, c2).Interior.ColorIndex = 6         .Offset(r2, c3).Interior.ColorIndex = 6        End If       Next      Next     End If    Next   Next  End With End Sub

sazanami0422
質問者

補足

回答いただきありがとうございます。 確かに”ほぼ黄色”ですね。 追加で質問して申し訳ありませんが、 どの行と重複しているか判別するために I行(重複する行)に重複している行をつけるにはどうすればよいですか?

関連するQ&A

  • 同じ数字を2個使用している重複行の数字の出力方法

    いつもお世話になっております。 ご存じの方がお見えでしたら回答をよろしくお願い致します。 【質問】  2019/12/08 22:31 に質問No.9687909 として  『同じ数字を3個~4個使用している重複行の塗り潰し2』という質問をさせて  頂き、SI299792様とnishi6様から回答を頂きました。  この時の質問から発展して、『同じ数字を2個使用している重複行の数字の出力  方法』が今回の質問です。添付図のとおり、5列×20行に絞り、2個の数字が  重複していたら黄色でセルを塗り潰し、”重複している行”をG列に書き出す事は  前回の回答から対応できましたが、実際にどの2個の数字が重複しているか塗潰  されたセルでは分かり難い場合があるため、H列~AA列に書き出す方法が知り  たく質問させて頂きます。 以上、よろしくお願いします。

  • 同じ数字を2個使用している重複行の数字の出力方法2

    いつも大変お世話になっております。 どなたかご存じの方がお見えでしたら回答頂けると幸いです。 【質問】 2019/12/20 22:51に質問No.9692415として 『同じ数字を2個使用している重複行の数字の出力方法』という質問をさせて頂き、 nishi6様から回答を頂きました。 動作としては添付図のとおり5列×20行の数字の中から、2個の数字が重複していたら黄色でセルを塗り潰し、重複する行に重複した行を、実際に重複した2個の数字をH列~AA列に書き出します。)この時の質問から発展して、『同じ数字を2個使用している重複行の数字の出力方法2』が今回の質問です。 具体的には下記2つです。 (1)重複数字1~重複数字10の2列×20行の数字をAB列・AC列に縦に並べた後、昇順に並び変えて重複数字を削除する。 (2)重複数字1~重複数字10の2列×20行の数字をAE列のみに縦に並べた後、  昇順に並び変えて重複数字を削除する。(又は、(1)で重複数字が削除された数字をAE列に1列に並べた後、昇順に並び変えて重複数字を削除する。) 以上、よろしくお願いします。

  • 同じ数字を2個使用している重複行の数字の出力方法3

    いつも大変お世話になっております。 どなたかご存じの方がお見えでしたら回答頂けると幸いです。 【質問】 2020/02/29 15:35に質問No.9718103として 『同じ数字を2個使用している重複行の数字の出力方法2』という質問を させて頂き、SI299792様から回答を頂きました。 動作としては添付図のとおり5列×20行の数字の中から、 2個の数字が重複していたら黄色でセルを塗り潰し、 重複する行に重複した行を実際に重複した2個の数字をH列~AA列に書き出し、 重複数字1~重複数字10の2列×20行の数字をAB列・AC列に縦に並べた後、 昇順に並び変えて重複数字を削除し、重複数字1~重複数字10の2列×20行の数字をAE列のみに縦に並べた後、昇順に並び変えて重複数字を削除する。 ここから今回の質問です。 (1)AB列・AC列に縦に並べた後、昇順に並び変えて重複数字を削除されるはずですが、添付図のとおりAB19・AC19、AB21・AC21に「22 30」が残っています。 この重複を削除するにはどうすればよいですか? 以上、よろしくお願いします。

  • 同じ数字を3個~4個使用している重複行の塗り潰し

    いつもお世話になっております。 ご存じの方がお見えでしたら回答をよろしくお願い致します。 【質問】  添付図の様にA行~T行の第一数字から第五数字まで1から31の数字が重複して 入っています。(1行だけで見れば重複はしておらず、第一数字から昇順に第五数 字まで並んでいます。)初めにA行からB行~T行を1行ずつ見ていき、  A行の5つの数字のうち3個~4個同じ数字を使用している行があればどちらの行  の数字も黄色に塗り潰す、次にB行からC行~T行を1行ずつ見ていき・・・  と、最後はS行からT行を見るまでを繰り返し、5つの数字のうち3個~4個  同じ数字を使用している行があればどちらの行の数字も黄色に塗りつぶす方法が  知りたいです。  ◎添付図の結果として黄色に塗り潰される行は   (1)A行とG行・・・2、7、19、23が重複   (2)B行とH行・・・3、6、14,22が重複   (3)C行とI行・・・4,15、17,21が重複   (4)D行とJ行・・・8、9、18、25が重複   (5)M行とQ行・・・12,14、23,28が重複   (6)N行とS行・・・5,19,31が重複   (7)O行とT行・・・1,6,21が重複 【注意事項】   ・使用するエクセルは2016です。   ・A行~T行に入る数字は毎回異なります。    但し使用数字は1~31で、1行でみれば重複無しで左から昇順です。   ・3個~4個の数字が重複する行が存在しないことはありません。 以上、よろしくお願いします。

  • 【再】連続する同じ数字のセルの塗り潰しがしたい。

    先程は、質問の添付図が添付されていなかたので再掲載します。 @@@@@@@@@@@@@@@@@@@@@ このカテゴリーのエクセルの達人の方々に質問です。 どなたか回答して頂ける方がお見えでしたら回答よろしくお願いします。 (ちゃんとした回答ではなく、文句やクレーム等を混ぜた記載はご遠慮ください。  また私の質問が気に入らない場合は無視して頂ければ結構です。) 【質問】  添付図のとおり、4行×25列の中に数字が1~31まであり、重複して入っています。  この中にある数字で、同じ数字が縦・右斜め・左斜め(横は無い)のいずれかに該当すれば  その数字のセルを黄色で塗り潰す方法をVBAで実現する方法が知りたいです。   【注意事項】   ・4行×25列の中にある数字の並びは毎回異なります。   ・VBAで実現する方法~、と書きましたが、    同様のことが他の方法でも実現できればそれを教えて下さい。   ・使用するエクセルは2021です。 以上、よろしくお願いします。

  • 連続する同じ数字のセルの塗り潰しがしたい。

    このカテゴリーのエクセルの達人の方々に質問です。 どなたか回答して頂ける方がお見えでしたら回答よろしくお願いします。 (ちゃんとした回答ではなく、文句やクレーム等を混ぜた記載はご遠慮ください。  また私の質問が気に入らない場合は無視して頂ければ結構です。) 【質問】  添付図のとおり、4行×25列の中に数字が1~31まであり、重複して入っています。  この中にある数字で、同じ数字が縦・右斜め・左斜め(横は無い)のいずれかに該当すれば  その数字のセルを黄色で塗り潰す方法をVBAで実現する方法が知りたいです。   【注意事項】   ・4行×25列の中にある数字の並びは毎回異なります。   ・VBAで実現する方法~、と書きましたが、    同様のことが他の方法でも実現できればそれを教えて下さい。   ・使用するエクセルは2021です。 以上、よろしくお願いします。

  • 重複数字の数に応じてセルに色をつける。

    このカテゴリーのエクセルの達人の方々に質問です。 どなたか回答して頂ける方がお見えでしたらよろしくお願いします。 (ちゃんとした回答ではなく、文句やクレーム等を混ぜた記載はご遠慮ください。  また私の質問が気に入らない場合は無視して頂ければ結構です。) 【質問】  添付図のとおり、1列×25行の中に数字が1~31まであり、  重複数字を含んで昇順に並んでおり、それが4列あります。  1列毎に数字を見て以下の条件にあえばセルを塗り潰します。   2個重複⇒セルを黄色に塗り潰す。   3個重複⇒セルを青色に塗り潰す。   4個重複⇒セルを緑色に塗り潰す。   5個重複⇒セルを赤色に塗り潰す。   上記を実現する方法をVBAで実現する方法が知りたいです。   【注意事項】   ・1列×25行の中にある数字の並びは毎回異なります。   ・1列×25行の中に重複数字が無い場合があります。(例:A列)   ・VBAで実現する方法~、と書きましたが、    同様のことが他の方法でも実現できればそれを教えて下さい。   ・使用するエクセルは2021です。 以上、よろしくお願いします。

  • 同じ位置(n行m列)にある数字に網掛けをする方法

    どなたかご存じでしたら回答をよろしくお願いします。 【質問】 下記のように5行6列のセルを1つの塊と見て、2つ上下にあるとします。 この上下のセルの1行1列から5行6列まで入っている数字を見比べて、 「n行m列にある数字が同じ数字の場合、その数字を網掛け(又は塗り潰し)する方法」 が知りたいです。 10 11 16 19 28 39 02 04 09 15 24 36 07 08 20 35 37 38 01 05 14 23 33 34 13 21 31 32 42 43 09 16 17 21 25 39 02 15 19 20 36 43 04 11 14 34 38 41 01 08 13 31 37 40 07 12 29 32 33 35 【実行例】・・・02,01,39が同じn行m列にあったため、上下どちらも塗り潰す。 10 11 16 19 28 ■ ■ 04 09 15 24 36 07 08 20 35 37 38 ■ 05 14 23 33 34 13 21 31 32 42 43 09 16 17 21 25 ■ ■ 15 19 20 36 43 04 11 14 34 38 41 ■ 08 13 31 37 40 07 12 29 32 33 35 ◎注意事項   ・5行6列のセルに入る数字は、1~43迄の数字で、重複はありません。   ・使用するエクセルは2010です。   ・数字が一致した場合は、網掛けでも塗り潰しどちらでも構いません。 以上、よろしくお願いします。

  • セルの数字を昇順に並び替えて重複削除する方法

    いつも大変お世話になっております。 どなたかご存じの方がお見えでしたら回答頂けると幸いです。 【質問】  添付図のとおり、2列×20行の数字が【入力値2列】欄に入っています。  この数字を昇順に並び替えて重複数字を削除したものを【重複チェック済2列】に  出力します。また、【入力値2列】欄の数字を【入力値1列】に縦1列にして数字 を昇順に並び替えて重複数字を削除したものを【重複チェック済1列】に出力しま す。具体的には下記(1)~(4)の手順です。質問は2列×20行での場合ですが、  2列×200行の場合でも上記のことができるようにしたいです。    *********************************** (1)入力値2列(A列・B列)に2つの値をセットします。 (2)入力値2列(A列・B列)の値を重複チェック済2列(D列・E列)に並べて昇順に並び替えて重複数字を削除します。 (3)入力値2列(A列・B列)の値を入力値1列(G列)に1列にセットします。 (4)入力値1列(G列)の値を重複チェック済1列(I列)に並べて昇順に並び替えて重複数字を削除します。 以上、よろしくお願いします。

  • 2個の数字をひと塊として同じ塊を探してセルの塗潰し

    いつもお世話になっております。 ご存じの方がお見えでしたら回答をよろしくお願い致します。 【質問】  添付図の様に各列2行分の数字(破線で囲った部分)をひと塊と捉え、  5列×20行の中で同じ塊が重複して存在したら黄色に塗潰す方法が  知りたいです。 【注意事項】  ・5列×20行に入る数字は1~31迄で重複してランダムに入ります。  ・ひと塊の重複は最低1つは存在します。  ・使用するエクセルは2016です。  以上、よろしくお願いします。

専門家に質問してみよう