アプリ版:「スタンプのみでお礼する」機能のリリースについて

Excel 2007 マクロ 別シートの情報を反映する方法

Sheet1とSheet2があります。
Sheet1のD列とSheet2のM列で同じ値があれば、
Sheet1のE列の値をSheet2のN列に反映するマクロを
作成しました。

下記が正しいと思っていたのですが、エラーメッセージは出ずに
値が反映されません。

マクロに問題点があればご指摘ください。

よろしくお願いいたします。

Sub Rist()
Dim i, j As Long
Dim ws1, ws2 As Worksheet
Set ws1 = Worksheets("Sheet1")
Set ws2 = Worksheets("Sheet2")
For i = 2 To ws1.Cells(Rows.Count, "D").End(xlUp).Row
For j = 2 To ws2.Cells(Rows.Count, "M").End(xlUp).Row
If ws2.Cells(j, "M") = ws1.Cells(i, "D") Then
ws2.Cells(j, "N") = ws1.Cells(i, "E")
End If
Next j
Next i
End Sub

A 回答 (6件)

No.2・4です!


前回のNo.4は無視してください。

If Val(ws2.Cells(j, 13)) = Val(ws1.Cells(i, 4)) Then

としてみてください。
何度もごめんなさいね。m(__)m
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。うまくいきました。大変助かりました。

お礼日時:2010/10/22 22:42

> 数字が文字列になっているや数値になっている等の理由で


> 同じ数字でも異なるものとして認識されることはございますか。

はい、それは当然です。
数値の数字と文字列の数字は異なるものですから。
それを同じとしたいならVal関数を使うか*1をするかですね。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。

お礼日時:2010/10/22 22:42

No.2です!


補足を読ませてもらいました。
文字列の数字と数値が混在しているわけですかね?

もしそうであって、数字の文字列を数値として扱いたい場合は

If ws2.Cells(j, 13).Value = ws1.Cells(i, 4).Value Then

としてみてはどうでしょう?

本来であればこの 「.Vlue」は省かずに入力する習慣をつけた方が良いのかもしれません。

外していたらごめんなさいね。m(__)m
    • good
    • 0

hyogara777さんの提示したコードは、直すところといったら


Dim i As Long, j As Long
Dim ws1 As Worksheet, ws2 As Worksheet
と書いた方がいいというくらいで、お書きになった
> Sheet1のD列とSheet2のM列で同じ値があれば、
> Sheet1のE列の値をSheet2のN列に反映する
を正しく表現しています。
そのままで動くはずです。
そうならないとしたら前提が違っているのでは?

この回答への補足

ご回答ありがとうございます。
すみません。ご回答頂きました3人の方に同じ補足の質問をさせて頂きます。

If ws2.Cells(j, 13) = ws1.Cells(i, 4) Then

それぞれのセルには3桁の数字が入っています。
それぞれの数字を比較する場合、
数字が文字列になっているや数値になっている等の理由で
同じ数字でも異なるものとして認識されることはございますか。

補足日時:2010/10/21 19:45
    • good
    • 0

こんにちは!


すでに回答は出ていますので、参考程度で、

列番号も数値にしてみてはどうでしょうか?

こんな感じですかね?

Sub Rist()
Dim i, j As Long
Dim ws1, ws2 As Worksheet
Set ws1 = Worksheets("Sheet1")
Set ws2 = Worksheets("Sheet2")
For i = 2 To ws1.Cells(Rows.Count, 4).End(xlUp).Row
For j = 2 To ws2.Cells(Rows.Count, 13).End(xlUp).Row
If ws2.Cells(j, 13) = ws1.Cells(i, 4) Then
ws2.Cells(j, 14) = ws1.Cells(i, 5)
End If
Next j
Next i
End Sub

m(__)m

この回答への補足

ご回答ありがとうございます。
すみません。ご回答頂きました3人の方に同じ補足の質問をさせて頂きます。

If ws2.Cells(j, 13) = ws1.Cells(i, 4) Then

それぞれのセルには3桁の数字が入っています。
それぞれの数字を比較する場合、
数字が文字列になっているや数値になっている等の理由で
同じ数字でも異なるものとして認識されることはございますか。

補足日時:2010/10/21 19:45
    • good
    • 0

次のように変えてみてはいかがでしょう。



For i = 2 To ws1.Range("D65536").End(xlUp).Row
For j = 2 To ws2.Range("M65536").End(xlUp).Row

この回答への補足

ご回答ありがとうございます。
すみません。ご回答頂きました3人の方に同じ補足の質問をさせて頂きます。

If ws2.Cells(j, 13) = ws1.Cells(i, 4) Then

それぞれのセルには3桁の数字が入っています。
それぞれの数字を比較する場合、
数字が文字列になっているや数値になっている等の理由で
同じ数字でも異なるものとして認識されることはございますか。

補足日時:2010/10/21 19:46
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!