[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『重複に色づけについて』(fuku)
ご指導よろしくお願いします。
重複カ所を確認するため
以下(WEB上で探し)シートに合うよう若干修正してtestしてみたのですが
★部分エラー"インデックスが有効範囲にありません"が出てしまいます。
データはA〜L列にあります(ところどころ空白セルも存在)
1〜700から800行あります。
重複確認対象はF列(文字列)です。
教えていただきたいのは対象となる行(A〜Lまで)色づけしたい。
エラーを回避方法をご教授お願いします。
Sub test()
Dim DIC As Object Dim cw As String Dim i As Long Dim iCol As Long
iCol = 3
Columns("F:F").Interior.ColorIndex = xlNone
Set DIC = CreateObject("Scripting.Dictionary") For i = 1 To Cells(Rows.Count, "F").End(xlUp).Row cw = Cells(i, "F").Value If DIC.exists(cw) = False Then DIC.Add cw, "F" & i Else DIC(cw) = DIC(cw) & ",F" & i End If Next i
For i = 0 To DIC.Count - 1 cw = DIC.items()(i) If 0 < InStr(cw, ",") Then iCol = iCol + 1 Range(cw).Interior.ColorIndex = iCol ’★ End If Next i End Sub
< 使用 Excel:Excel2016、使用 OS:Windows10 >
重複カ所に色付けでいいんですよね? Sub test() Dim DIC As Object Dim i As Long Dim r As Range Dim rng As Range Dim clRng As Range Set clRng = Columns("A:L") Set DIC = CreateObject("Scripting.Dictionary") For i = 1 To Cells(Rows.Count, "F").End(xlUp).Row With Cells(i, "F") If DIC.exists(.Value) Then If rng Is Nothing Then Set rng = clRng.Rows(i) Else Set rng = Union(rng, clRng.Rows(i)) End If End If DIC(.Value) = "" End With Next i Set DIC = Nothing clRng.Interior.Color = xlNone If Not rng Is Nothing Then rng.Interior.ColorIndex = 3 '★ End Sub
(稲葉) 2020/08/20(木) 19:20
>ひとつボタンを2度クリックしたとき 意味がわからないのですが。 今回のマクロを登録したボタンを、再度クリックした場合ってことですか? できますけど、分けたほうがいいです。
その場合自分でできますよね? (稲葉) 2020/08/20(木) 21:30
で、マクロで、M1の値を切り替える
(マナ) 2020/08/20(木) 22:09
(マナ) 2020/08/20(木) 22:13
今回のマクロを登録したボタンを、再度クリックした場合ってことですか? できますけど、分けたほうがいいです。
ただ、いろいろtestしてみたのですが<重複>の着色は複数存在する重複の内
1つの重複は、着色されないようになっているようなのですが 2つの場合は
対象1行 3つある場合は対象2行 4つある場合対象3行が着色になるのですが
対象の重複全て色づけが可能でしょうか?
よろしくお願いします。
(マナ)さん
ありがとうございます。
ちょっとと理解できませんでしたすみません。
(fuku) 2020/08/21(金) 04:09
★部分エラー"インデックスが有効範囲にありません"は、色数が足りなくて
エラーとなるのでしょうか?エラーは出ますが途中の行までは着色(F列のみですが)しています。
(fuku) 2020/08/21(金) 04:36
>★部分エラー"インデックスが有効範囲にありません"は、色数が足りなくて データみてないのでわかりません。 パソコンつけたら書き直します (稲葉) 2020/08/21(金) 05:33
>データみてないのでわかりません。 >パソコンつけたら書き直します 何卒、よろしくお願いします。 (fuku) 2020/08/21(金) 05:51
または、ColorIndexを止めて、ColorプロパティにRGB指定にすれば、256*256*256通りに塗れますよ。 その微妙な色の差を、人間の目で見て認識できるとは思えませんが、100通りくらいに絞るとか。
(???) 2020/08/21(金) 11:19
70!? ううううん 91通りまでひとまず分けられたけど、男の私には判断できません・・・ 重複チェックより、色を作るのに時間かかった・・・ あとマクロ実行後に、処理を選ぶもの入れました。簡易機能ですが。 Option Explicit Sub test() Dim dic As Object Dim i As Long Dim clRng As Range Dim itm As Variant Dim c As Variant Dim cnt As Long Set clRng = Columns("A:L") Select Case MsgBox("色の削除 = はい" & vbCrLf & "重複チェック = いいえ" & vbCrLf & "処理の中断 = Cancel", vbYesNoCancel) Case vbCancel: MsgBox "処理を中断します" Case vbYes: clRng.Interior.Color = xlNone Case vbNo Set dic = CreateObject("Scripting.Dictionary") For i = 1 To Cells(Rows.Count, "F").End(xlUp).Row With Cells(i, "F") If Not dic.exists(.Value) Then Set dic(.Value) = clRng.Rows(i) Else Set dic(.Value) = Union(dic(.Value), clRng.Rows(i)) End If End With Next i clRng.Interior.Color = xlNone c = mk_color cnt = 0 For Each itm In dic.items If itm.Count > 1 Then itm.Interior.Color = c(cnt) cnt = cnt + 1 If UBound(c) < cnt Then MsgBox "配色上限を超えました。処理を中断します" Exit Sub End If End If Next itm Set dic = Nothing MsgBox "色分けが完了しました:" & cnt - 1 & "色" End Select End Sub
Function mk_color() As Variant Dim c As Long Dim cnt As Long Dim v As Variant cnt = 0 ReDim v(1000) For c = 50 To 230 Step 15 v(cnt + 0) = RGB(255, 0, c) v(cnt + 1) = RGB(0, 255, c) v(cnt + 2) = RGB(c, 0, 255) v(cnt + 3) = RGB(255, c, 0) v(cnt + 4) = RGB(c, 255, 0) v(cnt + 5) = RGB(0, c, 255) v(cnt + 6) = RGB(c, c, c) cnt = cnt + 7 Next c ReDim Preserve v(cnt) mk_color = v End Function (稲葉) 2020/08/21(金) 11:28
見事に色分けできています。80色とでました。
91通りまでとありましたので、ギリギリですね
もっと多い場合は、このマクロでも無理ということですかね
最後に、対象行全部着色(単色) 2020/08/20(木) 19:20test するには
データ多過ぎ91色でもエラー時利用したいと思うので、どのようにすれば
いいですか?何度もすみません。
よろしくお願いします。
(fuku) 2020/08/21(金) 13:10
>For c = 50 To 230 Step 15 この部分調整すれば、増やせます step 15を、step 5にすれば、270色です 見分けがつかないのに、色分けする必要を感じないので、全部同じ色か、???さんの言う通り、top10だけにすればいいと思いますけどね
それよりも、隣のセルに重複であるしるしつけたほうがいいと思いますけどねぇ そうすれば、数式ですみますし。 (稲葉) 2020/08/21(金) 14:29
G1=if(countif(f:f,f1)>1,"重複") これでいいんじゃないですか? (稲葉) 2020/08/21(金) 15:28
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.