|
初心者なので分かりずらい質問すいません。
他の人が作ったものを加工したくて投稿しました。
やりたいことは
前シート
ABCD
あ12
か 41
さ1 2
後シート
ABCD
か 21
あ22
た134
前と後のA列を検索してなかったら後のAセルに色をつける
前と後のA列に同じ値があったら
Bセル→Cセル→Dセルと比較をしていってセルの値が違っていたら
色をつけるとしたいのです。現状だと途中で空白セルがあると比較が
止まってしまいます。どう記述をしていいのかもわかりません。
大変申し訳ありません。よろしくお願いします。
▼kanabun さん:
>▼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するだけで十分なのではありませんか?
>
>なので、
>各シートの 簡単なサンプルデータつきのレイアウトで説明があると
>より分かりやすいのですが。
|
|