• ベストアンサー

エクセルVBAによるシート間コピー&ペースト

「データベース控え」と「手番」という2つのシートがあります。 今、シート「データベース控え」を開いています。 VBAを使って「手番」シートにA3:S3をコピー&ペーストする記述方法を教えて下さい。 マクロで表現すると以下の記述となります。 繰り返し処理をする実運用では画面が切り替わるなどスマートな方法ではないので困っています。 Range("A3:S3").Select Selection.Copy Sheets("手番").Select Range("A3").Select ActiveSheet.Paste Sheets("データベース控え").Select Range("A4").Select 実運用では数値の部分を変数に置き換えて繰り返し処理をしたいと思っています。よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.1

Sheets("データベース控え").Select Range("A3:S3").Copy Sheets("手番").Range("A3") >繰り返し処理をする実運用では画面が切り替わるなどスマートな方法ではないので困っています。 先頭行に Application.ScreenUpdating = False と記述すると、画面の書き換えが抑止されるのでちらつきが無くなります。 >実運用では数値の部分を変数に置き換えて繰り返し処理をしたいと こんな方法もあります。 Dim tmp As Range Dim tmp2 As Range Set tmp = Application.InputBox("範囲を選択してください。", "Copy", , , , , , 8) Set tmp2 = Application.InputBox("コピー先を選択してください。", "Copy", , , , , , 8) 'tmp.Copy Sheets("Sheet2").Range("A1") tmp.Copy tmp2

yokagura
質問者

お礼

ありがとうございました。2行目が求めていた記述です。 Range("A3:S3").Copy Sheets("手番").Range("A3") 先頭行に Application.ScreenUpdating = False を入れずに試してみたのですが画面の書き換えは起こりませんでした。 でもそういう方法があるのですね。参考になりました。

その他の回答 (2)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

質問の意味がはっきりしない。 まず (1)「データベース控え」シートから、「手番」シートへコピーする一方通行だね。 (2)「手番」シートは同一ブック(内)ですね。 (3)コピーをするきっかけが書いてない。マクロ初心者だからだろうが、イベントを考える必要がある。コマンドボタンでも作るか。 (4)>数値の部分を変数に置き換えて 数値の部分とは表現がおかしい。コピー元のセル範囲のことかな。 (5)>実運用では画面が切り替わるなど コピー先のシートに切り替わるのが、気に食わないのか (6)(5)であるというなら(手番シートを開きたくないなら)手番シートのどの範囲に貼り付けるのかをどのように指定するのか(決めるのか)? 順次今までの貼り付けの済みの下の部分に貼り付けるコードを書いておく。 ーー 以上質問課題をこなすには経験不足と思う。本当はもっと勉強してからの課題でしょう。 ーー Sheet1にコマンドボタンを1つ張り付け。 ボタンをダブルクリックして出てくる画面に下記を張り付け。 Private Sub CommandButton1_Click() d = Worksheets("sheet3").Range("A65536").End(xlUp).Row MsgBox (d + 1) & "行から張り付け" Selection.Copy Destination:=Worksheets("sheet3").Range("A" & d + 1) End Sub ーー MsgBox (d + 1) & "行から張り付け" は練習用。納得すれば削除。 Sheet3の部分は「手番」に「変えること。 ーー 操作 データベース控えシートでコピーしたいセル範囲をマウスで範囲指定。 コマンドボタンをクリック。 手番シートには今までの最終行の直下行のA列から、データが張り付いている。

yokagura
質問者

お礼

親切な回答ありがとうございます。 (1)そうです一方通行のワークです。 (2)「手番」シートは同一ブック(内)です。 (3)コマンドボタンに登録します。 (4)数値の部分とは行番号のことでした (5)実行中は画面が切り替わらないことを望みました (6)手番シートを開かずに手番シートA3行目に貼り付ける ということでした。 色々お教えいただきましたことをこれからじっくり練習用として教材にしたいと思います。一応困り事は解決しましたがまだまだ初心者です。 今回の質問を応用して作りましたものを御笑覧ください(^^ゞ Sub 納期シート作成() Dim i, k As Integer i = 3 k = 3 Do While Cells(i, "A").Value <> "" If Cells(i, "a").Value <> Cells(i - 1, "a").Value Then Range("A" & i & ":" & "S" & i).Copy Sheets("手番").Range("A" & k) k = k + 1 End If i = i + 1 Loop End Sub

  • squip
  • ベストアンサー率16% (2/12)
回答No.2

Range("A3:S3").Copy Worksheets("手番").Range("A3")

yokagura
質問者

お礼

分かりづらい質問だったと反省しているのですが、 ズバリ的を得た回答をいただきました。ありがとうございます。 Worksheets は sheets と書いても動きました。 どう違うのかは勉強したいと思います。

関連するQ&A