Excelで2行目以降のA列にデータを重複がある状態で下方向に入力しているのですが、A列の一番下のデータを重複がないようにJ列にコピーしたいです。

Visual Basic | Excel152閲覧xmlns="http://www.w3.org/2000/svg">100

ベストアンサー

0

ThanksImg質問者からのお礼コメント

たくさんのご回答ありがとうございました。 とても勉強になりました。 一番処理時間が早かったのでベストアンサーにさせていただきます。

お礼日時:5/24 7:25

その他の回答(2件)

0

全て配列だけで処理しています。処理するシートを表示して実行します。 お試しください。 Private Sub Test() 'Sheets("履歴1").Activate Dim i As Long, dic As Object, D, V D = Range("A3", Cells(Rows.Count, 1).End(xlUp)) Set dic = CreateObject("Scripting.Dictionary") For i = 1 To UBound(D) dic(D(i, 1)) = i Next ReDim V(1 To UBound(D), 1 To 1) For i = 1 To UBound(D) If IsNumeric(Application.Match(i, dic.items, 0)) Then V(i, 1) = D(i, 1) End If Next Range("J3").Resize(UBound(D)) = V End Sub

0

Dictionary使っての一例です。 速度は計ってません。 それとシート名に履歴は使えないのでSheet1にしてあります。 Sub OneCase() Dim dataDic As Object Dim lastRow As Long, i As Long Dim dataArry() As String Dim s As Variant Set dataDic = CreateObject("Scripting.Dictionary") With Worksheets("Sheet1") lastRow = .Cells(Rows.Count, "A").End(xlUp).Row For i = 2 To lastRow If Not dataDic.exists(.Cells(i, "A").Value) Then dataDic.Add .Cells(i, "A").Value, i - 1 Else dataDic(.Cells(i, "A").Value) = i - 1 End If Next i ReDim dataArry(1 To lastRow, 1 To 1) For Each s In dataDic dataArry(dataDic(s), 1) = s Next s .Range("J2").Resize(UBound(dataArry)) = dataArry End With End Sub