|
>>vntSheet1、vntSheet2のIDがMatchした場合、各列の値を比較し違っている時
>IDをkeyにしていますが、選択で文字もID同様にMatchしています。
>文字の場合も同様のやり方(現在、作成中)で宜しいのでしょうか。
文字の場合も同様のやり方で出来ます
ただ、今回の様に、比較する文字列の有る列が、比較する文字列をKeyとして
Sheet1、Sheet2共に昇順にソートされているのが条件です
また、「Option Compare Text」を必ず入れて下さい
Excelでソートした場合、此れを入れないと、コードの比較順と結果が変わりますので
>>また、「fncGetSheetData」のデータ取得方法が善く解らない為、
>他のデータ(文書等)もあり、空白行・列など大量にある為、
>シート全体に対し、最終行・列を取得しています。
>>各Bookのデータは、A1から有る物としてCurrentRegionで取得しています
>項目行も変更対象なので、比較対照にしています。
「Function fncGetSheetData」は、中を替えていますが
インターファイスは替えていない為、どんばさん本来のコードでも
ソートの部分を追加すれば使えると思います
>Sheet3にMatchしないセルに色を塗りたいのですが、
>最後にメッセージにてMatchしないセルに色を塗るか選択したい為、
>どの様にしたら宜しいでしょうか。
この部分の修正は、以下の様に成ります
「Sub Test7」の中で
Dim blnNoMatch As Boolean
Dim j As Long '◎追加
Dim vntNoMatch() As Variant '◎追加
Dim blnPaint As Boolean '◎追加
'Matchしないセルの色塗り選択 ◎追加
If MsgBox("Matchしないセルに色を塗ります", _
vbInformation + vbYesNo, "Paint") = vbYes Then '◎追加
blnPaint = True '◎追加
End If '◎追加
'"D:\test1.xls"からのデータ取得
If Not fncGetSheetData(vntSheet1, lngSh1Row, _
lngSh1Cln, "Sheet1") Then
'列側のデータの比較
blnNoMatch = False
j = 0 '◎追加
For i = 1 To lngSh2Cln
If vntSheet1(lngSh1Pos, i) _
<> vntSheet2(lngSh2Pos, i) Then
blnNoMatch = True
j = j + 1 '◎追加
ReDim Preserve vntNoMatch(1 To j) '◎追加
vntNoMatch(j) = i - 1 '◎追加
' Exit For '★削除
End If
Next i
'データが一致しない場合
If blnNoMatch Then
'Sheet3に行データを書き込み
ResultWrite vntSheet2, lngSh2Pos, _
lngSh2Cln, wksSheet3, lngSh3Row
If blnPaint Then '◎追加
PaintingInterior vntNoMatch, _
wksSheet3, lngSh3Row '◎追加
End If '◎追加
End If
以下のプロシージャを追加
Private Sub PaintingInterior(vntColor As Variant, _
wksWrite As Worksheet, _
lngWriteRow As Long)
' セルの色塗り
Dim i As Long
With wksWrite.Cells(lngWriteRow, 1)
For i = 1 To UBound(vntColor)
.Offset(-1, vntColor(i)).Interior.ColorIndex = 34
Next i
End With
End Sub
PS:
話は変わりますが、どんばさんが最初に書いたコード
私のコードを下敷きにしていますか?
某所のレスも見ましたが、コメントの付け方、変数名等が、
私のコードの雰囲気にソックリな物で?
|
|