プロが教えるわが家の防犯対策術!

"sheet1"のA1:J1を"sheet2"のA1:J1にコピー
"sheet1"のA2:J2を"sheet2"のA2:J2にコピー
"sheet1"のA3:J3を"sheet2"のA3:J3にコピー
これを"sheet1"A:Jが空欄になるまでループさせたいのですが、
どうしてもエラーが出てしまいます。。。

前回も同様の質問をして、回答を頂いたのですが、
自分なりに応用を利かせてやってみたら、エラーが出てしまいます><
------------------------------------------------------------
Sub cpy2()

Dim i As Long
Dim Sht1 As Range
Dim Sht2 As Range

Set Sht1 = Sheets("Sheet1").Range("A1:J1") ←("A1")ではエラーは出ません。
Set Sht2 = Sheets("Sheet2").Range("A1:J1") ←("A1")ではエラーは出ません。
For i = 0 To 65535
If Sht1.Offset(i) <> "" Then ←ここでエラーが出ます"型が違います"
Sht2.Offset(i) = Sht1.Offset(i)
Else
Exit For
End If
Next

End Sub
--------------------------------------------------------------
教えて下さい。お願いします。

A 回答 (4件)

>これを"sheet1"A:Jが空欄になるまでループさせたいのですが、



先の質問では無かった事ですね。
http://oshiete1.goo.ne.jp/qa3790503.html

比較対照が全く違うのでIF文の比較式では対処できないためです。
複数セルを比較するには必用に応じて別の方法を取る必用があり、下記はワークシート関数を使って一括して比較する方法です。

下記でいかがでしょうか?

Sub cpy3()

Dim i As Long
Dim Sht1 As Range
Dim Sht2 As Range

Set Sht1 = Sheets("Sheet1").Range("A1:J1")
Set Sht2 = Sheets("Sheet2").Range("A1:J1")

For i = 0 To 65535
If Application.WorksheetFunction.CountIf(Sht1.Offset(i), "<>") > 0 Then
Sht2.Offset(i) = Sht1.Offset(i)
Else
Exit For
End If
Next

End Sub
    • good
    • 0
この回答へのお礼

>先の質問では無かった事ですね。
すいません。ちょっと自分なりに変えてみたのですが。。。

またまた、ご回答ありがとうございます。
問題なく動きました。流石ですT_T
hana-hanaさんみたいにマスター出来るように精進します^^;

すごく勉強になります。
参考書を買って勉強してるのですが。。。
それを応用しようと思うとうまくいかないのです。。。

お礼日時:2008/02/20 10:07

#1です。


#2さんのご指摘のとおり見たい。

If IsNull(Sht1.Offset(i)) Then
にしたらどうなりますかね?
    • good
    • 0
この回答へのお礼

ありがとうございます。

お礼日時:2008/02/20 09:59

Range("A1:J1")のように、複数のセルからなる場合は、Variant型の配列を値として返しますので、暗黙の型変換による比較はうまく行きません。


For/For Eachでセル値をチェックするループを記述するか、ワークシート関数CountBlank()で空白セルをチェックするとか、一手間かける必要があるかと。

まずは、デバッグ>ウォッチ式の追加――等で、Sht2.Offset(i).valueを観測してみては。何故うまく行かないのかが分かると思います。
    • good
    • 0
この回答へのお礼

ありがとうございます。
確認してみます。

お礼日時:2008/02/20 09:57

If Sht1.Offset(i) <> "" Then



If Sht1.Offset(i).value <> "" Then
にしたらどうなりますか?


#Offsetは(行差分,列差分)のような気もしますが。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
If Sht1.Offset(i).value <> "" Then
にして試しましたが、やはり同じエラーが出てしまいます。
初歩的な質問ですいません><

お礼日時:2008/02/19 23:10

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