Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


11285 / 76735 ←次へ | 前へ→

【70988】Re:データが同じ行の削除
発言  kanabun  - 12/1/24(火) 10:02 -

引用なし
パスワード
   ▼doka さん:
Dictionary(辞書)オブジェクトを使うと、こんな風に処理が
できます。

Sub Try1()
  Dim r As Range
  Dim dic As Object
  Dim ss As String '1行データパターン
  Dim n As Long
  
  Set dic = CreateObject("Scripting.Dictionary")
  With Range("B1:Z51")
    .Interior.ColorIndex = xlNone
    For Each r In .Rows
      n = n + 1 '処理行
      '一行をTab区切り文字列に変換
      ss = Join(Application.Index(r.Value, 0#), vbTab)
      If dic.Exists(ss) Then
        If dic(ss) > 0 Then
          .Rows(dic(ss)).Interior.ColorIndex = 6
          dic(ss) = -dic(ss) '先頭行に色塗り,完了
        End If
      Else
        dic(ss) = n '初出パターン
      End If
    Next
  End With
  
  Set dic = Nothing
          
End Sub

>    For Each r In .Rows
から処理開始です。これは [B1:Z51]の範囲を Row単位で処理を
くり返す、という命令です。

>      '一行をTab区切り文字列に変換
>      ss = Join(Application.Index(r.Value, 0#), vbTab)
ここはコメントにある通り、範囲のうち1行を1つの文字列に連結して
いるところです。
範囲1行目が 7 8 6  6 ....  9
としますと、上の処理により
  ss = "7・8・6・・6・....・・9"  (・はTabコード)
というある文字列となります。
2行目データですと
  ss = "2・5・・・・....・6・7"  (・はTabコード)
です。
この1行パターンss を辞書に登録していけば(登録するとき、初出行番号
と組で登録します)、
たとえば 51行目のパターン
  ss = "2・5・・・・....・6・7"  (・はTabコード)
が、すでに辞書の中にあるか? は
↓のようにして調べることが可能ですから、
>      If dic.Exists(ss) Then 'ss が存在すればTrueが返る
51行目のパターンのとき True が返りますので、
すぐ次の行でこのパターンの初出行番号を調べ、
その行を黄色に塗りつぶし、
塗りつぶしが終わったしるしに 格納した行番号をマイナスにしておきます。
>        If dic(ss) > 0 Then
>          .Rows(dic(ss)).Interior.ColorIndex = 6
>          dic(ss) = -dic(ss) '先頭行に色塗り,完了

3 hits

【70985】データが同じ行の削除 doka 12/1/24(火) 8:41 質問
【70987】Re:データが同じ行の削除 Yuki 12/1/24(火) 9:37 回答
【70990】Re:データが同じ行の削除 doka 12/1/24(火) 15:24 お礼
【70988】Re:データが同じ行の削除 kanabun 12/1/24(火) 10:02 発言
【70991】Re:データが同じ行の削除 doka 12/1/24(火) 15:36 質問
【71012】Re:データが同じ行の削除 doka 12/1/26(木) 7:29 お礼
【71013】Re:データが同じ行の削除 kanabun 12/1/26(木) 8:59 発言
【71032】Re:データが同じ行の削除 doka 12/1/26(木) 22:26 お礼

11285 / 76735 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free