それで昨日、私は最初の SO の質問を投稿しました。しかし、私は自分自身を持ち上げ、ほこりを払いました。うまくいけば、この質問はより受け入れられるでしょう... :-)
監視する必要がある健康アンケートのリストからデータの重複を削除しようとしていますが、苦労していたトリッキーなビットは、1 つの列で重複を見つけてから、隣接する 3 つの列について同じ行のデータを確認することでした。も重複していました。検索された「重複した行」を保存することは、私をうんざりさせていたビットでした。
以下は、同様に機能する他のスクリプトからいくつかのコードを組み合わせたものです。現在、デバッグ モードに入っていますが、エラーが発生し続けています... VBA の経験があまりないため、オプションが不足しています。
g
現在、変数とで型の不一致エラーが発生していますfirstAddress
。なぜこれらが問題を引き起こしているのですか???
電話firstAddress.Row
してもいいですか、それとも間違った木を吠えていますか?
スニペットは次のとおりです。
g = .Find(Range("G" & i).Text, LookIn:=xlValues)
If Not g Is Nothing Then
firstAddress = g.Address
dupRow = firstAddress.Row
そして、これが以下のコード全体です。どんな助けでも大歓迎です!
Sub FindCpy()
Dim lw As Long
Dim i As Integer
Dim sh As Worksheet
Dim dupRow As Integer
Dim g As Integer
Dim firstAddress As Integer
'Used for the new worksheet we are pasting into
Dim objNewSheet As Worksheet
Dim rngNextAvailbleRow As Range
'Used to narrow down the logical operators for duplicates
Dim rngFirst As Range
'Set the ranges
rngFirst = Range("G" & 1, "G" & lw)
Set sh = Sheets("Completed")
lw = Range("A" & Rows.Count).End(xlUp).Row
For i = 1 To lw 'Find duplicates from the list.
If Application.CountIf(Range("A" & i & ":A" & lw), Range("A" & i).Text) = "Complete" Then
'if COMPLETE, check the rest of the sheet for any 'in progress' duplicates...
With Worksheets("Still In Progress").rngFirst
g = .Find(Range("G" & i).Text, LookIn:=xlValues)
If Not g Is Nothing Then
firstAddress = g.Address
dupRow = firstAddress.Row
If Range("H" & dupRow).Text = Range("H" & i).Text _
And Range("I" & dupRow).Text = Range("I" & i).Text _
And Range("J" & dupRow).Text = Range("J" & i).Text Then
'select the entire row
Range.EntireRow.Select
'copy the selection
Selection.Cut
'Now identify and select the new sheet to paste into
Set objNewSheet = ThisWorkbook.Worksheets("Completed")
objNewSheet.Select
'Looking at your initial question, I believe you are trying to find the next available row
Set rngNextAvailbleRow = objNewSheet.Range("A1:A" & objNewSheet.Cells(Rows.Count, "A").End(xlUp).Row)
Range("A" & rngNextAvailbleRow.Rows.Count + 1).Select
ActiveSheet.Paste
'delete the initial row
rngCell.EntireRow.Delete
Set g = .FindNext(g)
Loop While Not g Is Nothing And g.Address <> firstAddress
End If
End With
Next i
End Sub