- ベストアンサー
VBA ループ処理 "型が違います"エラー
"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 -------------------------------------------------------------- 教えて下さい。お願いします。
- みんなの回答 (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
その他の回答 (3)
- bin-chan
- ベストアンサー率33% (1403/4213)
#1です。 #2さんのご指摘のとおり見たい。 If IsNull(Sht1.Offset(i)) Then にしたらどうなりますかね?
お礼
ありがとうございます。
- osamuy
- ベストアンサー率42% (1231/2878)
Range("A1:J1")のように、複数のセルからなる場合は、Variant型の配列を値として返しますので、暗黙の型変換による比較はうまく行きません。 For/For Eachでセル値をチェックするループを記述するか、ワークシート関数CountBlank()で空白セルをチェックするとか、一手間かける必要があるかと。 まずは、デバッグ>ウォッチ式の追加――等で、Sht2.Offset(i).valueを観測してみては。何故うまく行かないのかが分かると思います。
お礼
ありがとうございます。 確認してみます。
- bin-chan
- ベストアンサー率33% (1403/4213)
If Sht1.Offset(i) <> "" Then を If Sht1.Offset(i).value <> "" Then にしたらどうなりますか? #Offsetは(行差分,列差分)のような気もしますが。
お礼
ご回答ありがとうございます。 If Sht1.Offset(i).value <> "" Then にして試しましたが、やはり同じエラーが出てしまいます。 初歩的な質問ですいません><
お礼
>先の質問では無かった事ですね。 すいません。ちょっと自分なりに変えてみたのですが。。。 またまた、ご回答ありがとうございます。 問題なく動きました。流石ですT_T hana-hanaさんみたいにマスター出来るように精進します^^; すごく勉強になります。 参考書を買って勉強してるのですが。。。 それを応用しようと思うとうまくいかないのです。。。