- ベストアンサー
シート間のコピーマクロについて
下記のような、TextBoxで入力した行の内容を違うシートへ貼り付けるマクロを作成しています。 マクロは素人で参考書を見ながら作製しているのですが、 「ActiveSheet.Range("A&r:Z&r").Copy Destination:=Worksheets(tuki).Range("A&idousaki:Z&idousaki")」 のところで、 『アプリケーション定義またはオブジェクト定義のエラーです』 と表示されます。 多分めちゃくちゃな文をかいてるんだろうなと思うのですが、私には分かりませんでした・・・ どなたか、修正点をご教授お願致します。 Private Sub OK_Click() Dim r As Integer, tuki As String, idousaki As Variant If OptionButton1.Value = True Then '行指定 r = TextBox1.Value tuki = ComboBox1.Value '移動先の行番号取得 If Worksheets(tuki).Range("D7").Offset(1).Value = "" Then idousaki = Worksheets(tuki).Range("D7").Offset(1).Rows Else idousaki = Worksheets(tuki).Range("D7").End(xlDown).Ofset(1).Rows End If ActiveSheet.Range("A&r:Z&r").Copy Destination:=Worksheets(tuki).Range("A&idousaki:Z&idousaki") Else MsgBox "移動方法を選択してください" End If End Sub
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
一箇所、 idousaki = Worksheets(tuki).Range("D7").End(xlDown).Ofset(1).Rows の Ofset(1) は、 Offset(1) ですね。 [結論] hallo-2007さんのご回答のとおり。 idousaki = Worksheets(tuki).Range("D7").Offset(1).Row ではないでしょうかね?(Rowsではない) ActiveSheet.Range("A" & r & ":Z" & r).Copy Destination:=Worksheets(tuki).Range("A" & idousaki) でもよいです。(Range("A" & idousaki & ":Z" & idousaki)でなくてもよい) [確認方法] idousaki = Worksheets(tuki).Range("D7").Offset(1).Rows msgbox ("idousaki = " & idousaki) と記述し、確認したら、msgboxの表示は、 idousaki = でした。 idousakiは、行番号を取得できていないようです。 ためしに、行番号抜きの ------------------- Sub test() Range("A1:Z1").Copy Destination:=Worksheets("Sheet2").Range("A:Z") End Sub ------------------- を作って、Sheet1のA1からZ1に値入れて、上記 test マクロを実行したら...A1からZ1の値をSheet2のA1からZ65536までコピーしました。 どのように使用されるのかはわかりませんが、OptionButton1、TextBox1、ComboBox1 が配置されているようですので、 UserFormを使用していると勝手に判断し... UserForm1を作って、CommandButton1、CommandButton2を追加で配置して、 CommandButton1_Clickの動作として、当方で確認したものを、 CommandButton2_Clickの動作として、質問者様のものを、 として確認してみました。 コードが必要でしたら補足してください。 しばらくファイルはとっておきます。
その他の回答 (4)
- hallo-2007
- ベストアンサー率41% (888/2115)
デバックした時に マウスを r とか idousaki とかの変数の上に移動してみてください。 変数に入っている値が表示されます。希望している値が出ていますでしょうか。 idousaki = Worksheets(tuki).Range("D7").End(xlDown).Ofset(1).Rows 希望のセルの行番号を取得したいのだと思いますが 最後のOfset(1).Rowsは Ofset(1).Row では。 エラーではありませんが Destination=Worksheets(tuki).Range("A" & idousaki) と最初のセルを指定しても大丈夫かと。
- hallo-2007
- ベストアンサー率41% (888/2115)
No1です。ちょっと訂正します Range("A" & r & ":Z" & r) ("A" & idousaki & ":Z" & idousaki) &を忘れてました。
お礼
ActiveSheet.Range("A" & r & ":Z" & r).Copy Destination:=Worksheets(tuki).Range("A" & idousaki & ":Z" & idousaki) にしたら一歩進みました! しかし、次は以下エラーがでてしまいした・・・ 「選択範囲が大きすぎます」 ん~なかなかうまくいかない。
- phoenix343
- ベストアンサー率15% (296/1946)
ヒント "A&r:Z&r" これじゃただの文字列だよ。 "A" & r & ":Z" & r だろう?
- hallo-2007
- ベストアンサー率41% (888/2115)
「ActiveSheet.Range("A&r:Z&r").Copy Destination:=Worksheets(tuki).Range("A&idousaki:Z&idousaki")」 は Range("A"&r":Z"&r) と ("A"&idousaki":Z"&idousaki) ではなかろうかと
お礼
ご回答ありがとうございます。 すごい・・・ 記載通りで出来ました! ありがとございます。