|
▼hama さん:
インデントや変数名等 読みにくかったので(失礼)
いらぬお節介かもですが、修正してみました。
・2つの Worksheet は 変数に入れる
・外側の Do 〜 Loop は 「後」シートのA列をLoopしているようだから
For Each 〜 Next に変更。
・そのシートのA列の値を検索値Ans1 としているようだが、
セルそのもの(Rangeオブジェクト) と セルの値 は区別してコーディング
したい。
Ans1 = c.Value
Sub 後シート色づけ3()
Dim Ans1 As Variant
Dim Ans2 As Variant
Dim newX As Long
Dim newY As Long
Dim oldX As Long
Dim oldY As Long
Dim ws前 As Worksheet
Dim ws後 As Worksheet
Dim foundCell As Range
Dim c As Range
Set ws前 = Worksheets("前")
Set ws後 = Worksheets("後")
'「後」シートのA列(の値を検索値として)でループする
For Each c In ws後.Range("A2", _
ws後.Cells(ws後.Rows.Count, 1).End(xlUp))
Ans1 = c.Value
'「後」シートのA列の値で「前」シートを検索
Set foundCell = ws前.Cells.Find(Ans1)
'「前」シートにみつからなければ、この値のセルを色塗り
If foundCell Is Nothing Then
c.Interior.ColorIndex = 27
Else '「前」シートにこの値があったばあい
' A列〜D列まで比較・色塗りする …… ?
newX = 2
oldX = 2
oldY = ws前.Cells.Find(Ans1).Row
Do
If ws前.Cells(oldY, oldX).Value <> _
ws後.Cells(newY, newX).Value Then
ws後.Cells(newY, newX).Interior.ColorIndex = 27
End If
newX = newX + 1
oldX = oldX + 1
Ans2 = ws後.Cells(newY, newX)
Loop Until Ans2 = ""
End If
Next c
End Sub
このように直してみると、
質問
>ループをA列〜D列までにしたい
は、
内側のLoop時の 検索列をA列〜D列までに限定したいということのようですが、
より具体的に その内側のループでやっていることを日本語で説明してもらうと、
どう書いたら良いか、レスが付きやすいと思います。
というのも、現状コードでは(A列ではなく) B列から比較を始めているように
読めるので、その点も含めて、説明が必要と思うのです。
他にも分からないところがあります。
たとえば、「後」シートのA列の値で、「前」シートのセル全体をFindしてます
が、ほんとに Cells(全セル)の検索が必要なのでしょうか?
「前」シートのほうも、A列をFindするだけで十分なのではありませんか?
なので、
各シートの 簡単なサンプルデータつきのレイアウトで説明があると
より分かりやすいのですが。
|
|