である私は、シート1とシート2で巨大なデータでやっているものです:range.findallはここで非常にslow.any代替
は、一致するすべての行に(複数の比較に基づく)sheet1.columnnamesを比較in sheet2。差異を強調表示して結果シートに貼り付けます。
column1に同じ値を持つすべての行について、他のフィールドのフォントの色を確認してください。赤色の場合は、column1を新しい結果シートにコピーします。
(1)で完了しました。 (2)私は(http://www.cpearson.com/excel/findall.aspx)の範囲のfindall関数を使用して、column1のすべての重複のサブセットを取得しています。コードは動作していますが、非常に遅いです。私はそれを行うことができる他の方法はありますか?
私は配列を使用している可能性がありますが、配列を使用してフォントの色に触れることはできません。私はApplication.Calculation = xlCalculationManualとApplication.ScreenUpdating = Falseを試しました。それは何の違いもありませんでした。
以下は、find allのコードスニペットです。他の方法をお勧めしますか?
「column1の中で同じ値を持つすべての行の」Dim foundRange As Range
Dim SearchRange As Range
Dim FindWhat As Variant
Dim irowcount, icount, iMaxCount As Long
Dim bFlag As Boolean
With XL_Ws_Result
'range with column header
Set rowRangeHeaderA = .Range(.Cells(1, 1), .Cells(Last_Row_Base, Last_Col_Base))
'range in result sheet without column header
Set SearchRange = rowRangeHeaderA.Offset(1, 0).Resize(rowRangeHeaderA.Rows.count - 1, Last_Col_Base)
End With
For irowcount = 1 To SearchRange.Rows.count
'search string
FindWhat = SearchRange.Cells(irowcount, 1)
Set foundRange = FindAll(SearchRange:=SearchRange, _
FindWhat:=FindWhat, _
LookIn:=xlValues, _
LookAt:=xlWhole, _
SearchOrder:=xlByColumns, _
MatchCase:=False, _
BeginsWith:=vbNullString, _
EndsWith:=vbNullString, _
BeginEndCompare:=vbTextCompare)
If Not foundRange Is Nothing Then
iMaxCount = foundRange.Rows.count
For icount = 1 To iMaxCount
'check font color
If foundRange.Cells(icount, 9).Font.ColorIndex = 3 And foundRange.Cells(icount, 9).Font.ColorIndex = 3 Then
bFlag = True
Else
'if any cell is not red i want to skip entire found range. not need for further processing
bFlag = False
Set foundRange = Nothing
Exit For
End If
If bFlag = True Then
XL_Mismatch.Cells(i, 1) = foundRange.Cells(1, 1).Value
End If
Next icount
irowcount = irowcount + iMaxCount - 1
End If
Next irowcount
findformatを試してから値を確認できますか? –