アプリ版:「スタンプのみでお礼する」機能のリリースについて

エクセルVBAにて、重複データ処理の高速化を実施したいのですが、いい方法はありますでしょうか?
G列に10000文字が入力されており、重複データがあった場合は、G列入力文字の後ろに(1)、(2)、(3)と重複回数を追加し、G列の同じセルに上書きを行いたいのですが、重すぎて停止してしまいます。
重複データは、最大で、50個あります。

Sub 重複データチェック6()
Dim i As Long, j As Long
Dim LastRow As Long
Dim LastCol As Long
Application.ScreenUpdating = False ' 画面更新を止める
LastRow = Range("A" &Rows.Count).End(xlUp).Row
For i = 1 To LastRow
For j = 1 To 50
If WorksheetFunction.CountIf(Range(Cells(LastRow, 1), Cells(1, 7)), Cells(i, 7)) = j Then
Cells(i, 7) = Cells(i, 7) & "(" & j & ")"
Next j
End If
Next i
Application.ScreenUpdating = True ' 画面更新をするように戻す
End Sub

A 回答 (4件)

こんばんは!



Sub Sample1()
 Dim myDic As Object
 Dim i As Long, lastRow As Long
 Dim myR
  Set myDic = CreateObject("Scripting.Dictionary")
   lastRow = Cells(Rows.Count, "A").End(xlUp).Row
    myR = Range(Cells(1, "G"), Cells(lastRow, "G"))
     For i = UBound(myR, 1) To 1 Step -1
      If Not myDic.exists(myR(i, 1)) Then
       myDic.Add myR(i, 1), 1
       myR(i, 1) = myR(i, 1) & "(1)"
      Else
       myDic(myR(i, 1)) = myDic(myR(i, 1)) + 1
       myR(i, 1) = myR(i, 1) & "(" & myDic(myR(i, 1)) & ")"
      End If
     Next i
    Range(Cells(1, "G"), Cells(lastRow, "G")) = myR
   Set myDic = Nothing
   MsgBox "完了"
End Sub

こんな感じのコトをお望みなのでしょうか?

とりあえず配列に格納し、値だけを一気に吐き出しています。

※ お望みの結果でなかったらごめんなさい。m(_ _)m
    • good
    • 1
この回答へのお礼

完璧に臨む動作となりました。
ありがとうございます。あんなに遅かったプログラムが一瞬でした。
本当にありがとうございます!

お礼日時:2018/11/13 20:19

LastRow = Range("A" &Rows.Count).End(xlUp).Row


For i = 1 To LastRow
j = WorksheetFunction.CountIf(Range(Cells(1, 7) , Cells(i, 7)), Cells(i, 7))
If j > 0 Then
Cells(i, 7) = Cells(i, 7) & "(" & j & ")"
End If
Next i

未検証ですけど。
    • good
    • 0

「VBAで高速化」ということならセルへのアクセスは最小限にしましょう。


VBAでセルから値を取得するとき、
Variant型変数にSetなしでセル値を代入すると
Range型ではなく配列のVariant型として取得できます。
後は値の編集はVBA内でFor文やIf文でグリグリ回してやればOKです。
最後に編集した配列をそのままセルに出力可能です。

セルへのアクセス回数さえ減らせば、どんなロジックでも大抵劇的に高速化します。
今回の場合は「最初にG列から値を一括入力」「最後に編集結果をG列に一括出力」の2回のセルアクセスだけで実現できます。(逐次入出力ではなく一括入出力です。)
    • good
    • 2
この回答へのお礼

アドバイスありがとうございます。

配列を使用した場合の記載方法がわからず、困ってます。もし、可能であれば御教授願いますでしょうか?

お礼日時:2018/11/13 19:42

VBAお得意の方がいます。

ご安心を(^_-)-☆
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A