EXCEL データを別シートに貼り付ける方法

このQ&Aのポイント
  • EXCEL データをコピーして別シートの最初の空白行に貼り付ける方法について質問があります。
  • Sheet1 のデータを Sheet2 の最初の空白行に貼り付けるマクロを使用していますが、Sheet3 への貼り付け時にエラーが発生しています。詳細な解決方法について教えてください。
  • マクロを使用して、1つのブック内の複数のシートにデータを貼り付けたいと考えていますが、3つ目のシートへの貼り付け時にエラーが発生しています。エラーの原因と解決方法を教えてください。
回答を見る
  • ベストアンサー

再質問 EXCEL データをコピーして別シートの最初の空白行に貼り付け

再質問 EXCEL データをコピーして別シートの最初の空白行に貼り付けたい QNo.6023986でEXCEL データをコピーして別シートの最初の空白行に貼り付けたいと書き込んだものです。 質問内容は以下の通りです。 Sheet1はA列からR列までを使ったシートで、1行目は各項目があり、2行目からは当月のデータが入力されています。 Sheet2はSheet1の1行目と同じようにA列からR列までが項目になっていて、期中のデータを付け足していきたいと思っています。 マクロの記録でやってみたのですが、前月の最後の行(貼り付ける最初の空白行)の認識の仕方が分からず、Sheet2への貼付がうまくいきません。 どのような方法でやったらいいのか教えて下さい。 ----------------------------------------------------------------------------------- 回答で以下のマクロを教えていただき、テストではうまくいったのですが、 ひとつのブック内でsheet1をsheet2に、sheet3をsheet4に、sheet5をsheet6にと行いたいので、 以下のコードのシート名をそれぞれ書き換えてやってみました。 ところが、1を2にはできたのですが、3を4でやってみたところ、 なんどやっても『400』というエラーが出てしまいます。 シート名の他にも書き換えが必要なのか教えてください。 よろしくお願いします。 Sub Macro1() GYOU1 = Sheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row GYOU2 = Sheets("Sheet2").Cells(Rows.Count, 1).End(xlUp).Row + 1 Sheets("Sheet1").Select Range(Cells(2, 1), Cells(GYOU1, 18)).Copy Sheets("Sheet2").Select Range("A" & GYOU2).Select ActiveSheet.Paste Application.CutCopyMode = False End Sub

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

  • ベストアンサー
  • mar00
  • ベストアンサー率36% (158/430)
回答No.25

お詫び こちらから回答させてもらったマクロは どれも動作確認して問題なく動作したものです。 しかしorange1010さんの方では正しく動作しないという事で 原因はなにかと色々考えましたが、こちらで同じ問題がおこらないので どうしてなのかわかりません(私の力量不足です。) もう一度、改めて質問して他の人の知恵を借りた方が解決するのも 早いと思います。 解決出来ないままなのは本当に残念ですが、orange1010さんも 早く解決させたいと思いますので、回答するのを終わりにさせてもらいます。 本当に申し訳ないです。すいません。

orange1010
質問者

お礼

今までこんなにお付き合いいただいただけでも助かりました。 ありがとうございました。

その他の回答 (24)

  • mar00
  • ベストアンサー率36% (158/430)
回答No.24

Sub Macro71() Dim GYOU As Integer Sheets("1-4").Select GYOU = Cells(Rows.Count, 1).End(xlUp).Row Application.ScreenUpdating = False Sheets("1-1").Select For INP = 2 To Cells(Rows.Count, 1).End(xlUp).Row Sheets("1-1").Select GYOU = GYOU + 1 For INP2 = 1 To 18 Sheets("1-1").Select DATA = Cells(INP, INP2).Value Sheets("1-4").Select Cells(GYOU, INP2) = DATA Next INP2 Next INP Application.ScreenUpdating = False Sheets("1-4").Select Range("A1").Select End Sub を実行してみて下さい。 1-4にコピーされるまで砂時計になって 少々時間がかかりますが。

orange1010
質問者

お礼

Sub Macro71() Dim GYOU As Integer Sheets("1-4").Select GYOU = Cells(Rows.Count, 1).End(xlUp).Row Application.ScreenUpdating = False Sheets("1-1").Select ここから For INP = 2 To Cells(Rows.Count, 1).End(xlUp).Row Sheets("1-1").Select GYOU = GYOU + 1 For INP2 = 1 To 18 Sheets("1-1").Select DATA = Cells(INP, INP2).Value Sheets("1-4").Select Cells(GYOU, INP2) = DATA Next INP2 Next INP ここへ Application.ScreenUpdating = False Sheets("1-4").Select Range("A1").Select End Sub "ここから""ここへ"と書いたところ ここからここへ飛びます。 また砂時計にもならず貼り付けされませんでした。

  • mar00
  • ベストアンサー率36% (158/430)
回答No.23

15から19を繰り返しているという事は 正しい動作をしているという事です。 1-4にデータがはいると思います。 ステップインではなくて普通にマクロを実行してみて下さい。

orange1010
質問者

お礼

1 Sub Macro1() 2 Dim GYOU As Integer 3 Dim INP As Long 4 Sheets("1-4").Select 5 GYOU = Cells(Rows.Count, 1).End(xlUp).Row 6 'Application.ScreenUpdating = False 7 Sheets("1-1").Select 8 For INP = 2 To 1000000 9 Sheets("1-1").Select 10 If IsEmpty(Cells(INP, 1)) Then 11 Exit For 12 Else 13 GYOU = GYOU + 1 14 For INP2 = 1 To 18 15 Sheets("1-1").Select 16 DATA = Cells(INP, INP2) 17 Sheets("1-4").Select 18 Cells(GYOU, INP2) = DATA 19 Next INP2 20 End If 21 Next INP 22 'Application.ScreenUpdating = False 23 Sheets("1-4").Select 24 Range("A1").Select 25 End Sub 11から22に飛んで貼り付けされずに終わってしまいました・・・・

  • mar00
  • ベストアンサー率36% (158/430)
回答No.22

もういぢそのままマクロを実行してみて下さい。 シート1-1にシートの保護など通常の書式設定以外に 何か設定してますか?。

orange1010
質問者

お礼

設定してないです。 ’をはずして実行してみたところ、19まで行って、 15に戻るということを繰り返しているようです。

  • mar00
  • ベストアンサー率36% (158/430)
回答No.21

11から22に飛ぶということなので 6 Application.ScreenUpdating = Falsesと 22 Application.ScreenUpdating = Falseの 頭に ' を追加(緑色に変わる) シート1-1のセルA2に入力されたデータがあるかを確認して下さい。 シート1-1のセルA2に入力されたデータがある場合 シート1-1を開く ステップインを開始 マクロではなくてExcelの動きを確認しながら 5が黄色くなった時、シート1-4が開いているか 6が黄色くなった時、GYOUは2になっているか 8が黄色くなった時、シート1-1が開いているか 以上を確認して下さい。 シート1-1のセルA2に入力されたデータがない場合 8の1000000を Cells(Rows.Count, 1).End(xlUp).Rowになおす 10から12、20を削除 してから実行してみて下さい。

orange1010
質問者

お礼

ご指導通り、以下のように変えました。 1 Sub Macro1() 2 Dim GYOU As Integer 3 Dim INP As Long 4 Sheets("1-4").Select 5 GYOU = Cells(Rows.Count, 1).End(xlUp).Row 6 'Application.ScreenUpdating = False 7 Sheets("1-1").Select 8 For INP = 2 To 1000000 9 Sheets("1-1").Select 10 If IsEmpty(Cells(INP, 1)) Then 11 Exit For 12 Else 13 GYOU = GYOU + 1 14 For INP2 = 1 To 18 15 Sheets("1-1").Select 16 DATA = Cells(INP, INP2) 17 Sheets("1-4").Select 18 Cells(GYOU, INP2) = DATA 19 Next INP2 20 End If 21 Next INP 22 'Application.ScreenUpdating = False 23 Sheets("1-4").Select 24 Range("A1").Select 25 End Sub >シート1-1のセルA2に入力されたデータがあるかを確認して下さい あります。1-1のA2にはいつもデータが入った状態です。 >5が黄色くなった時、シート1-4が開いているか 開いています。 >6が黄色くなった時、GYOUは2になっているか  5から7に飛ぶので確認できませんでした。 >8が黄色くなった時、シート1-1が開いているか  開いています。

  • mar00
  • ベストアンサー率36% (158/430)
回答No.20

すいません。 回答を送ったと思っていたのですが 送信されていませんでした。 行数の増減は問題ないです。 Sub Macro1() Dim GYOU As Integer Dim INP As Long Sheets("1-4").Select GYOU = Cells(Rows.Count, 1).End(xlUp).Row Application.ScreenUpdating = False Sheets("1-1").Select For INP = 2 To 1000000 Sheets("1-1").Select If IsEmpty(Cells(INP, 1)) Then Exit For Else GYOU = GYOU + 1 For INP2 = 1 To 18 Sheets("1-1").Select DATA = Cells(INP, INP2) Sheets("1-4").Select Cells(GYOU, INP2) = DATA Next INP2 End If Next INP Application.ScreenUpdating = False Sheets("1-4").Select Range("A1").Select End Sub 一度試してみてください。 今回もダメでしたらNext INPのところにブレークポイントを 設定して、中断したらINPの数値を確認して下さい。 最初は2です。 確認したら継続ボタンを押してまたINPを確認 この作業を数回行ってください。 下から3行目に飛んで終了してしまったら最後に確認した INPの数値を教えて下さい。

orange1010
質問者

お礼

1  Sub Macro1() 2  Dim GYOU As Integer 3 Dim INP As Long 4 Sheets("1-4").Select 5 GYOU = Cells(Rows.Count, 1).End(xlUp).Row 6 Application.ScreenUpdating = False 7 Sheets("1-1").Select 8 For INP = 2 To 1000000 9 Sheets("1-1").Select 10 If IsEmpty(Cells(INP, 1)) Then 11 Exit For 12 Else 13 GYOU = GYOU + 1 14 For INP2 = 1 To 18 15 Sheets("1-1").Select 16 DATA = Cells(INP, INP2) 17 Sheets("1-4").Select 18 Cells(GYOU, INP2) = DATA 19 Next INP2 20 End If 21 Next INP 22 Application.ScreenUpdating = False 23 Sheets("1-4").Select 24 Range("A1").Select 25 End Sub ありがとうございます。お返事が遅くなって申し訳ありません。 まず、最初に教えてください。 左側に番号を振りましたが、 (1)21にブレークポイントでいいですか? (2)ステップインを開始すると1から4に飛びますがいいですか? (3)11から22に飛びますがいいですか? (4)INPの値というのは8以降の10/16/21のことでしょうか? よろしくお願いします。

  • mar00
  • ベストアンサー率36% (158/430)
回答No.19

念のためですが、一番最初のマクロです。 Sheet1、Sheet2のやつです。 もう一度動かしてみてください。 Sub Macro1() GYOU1 = Sheets("1-1").Cells(Rows.Count, 1).End(xlUp).Row GYOU2 = Sheets("1-4").Cells(Rows.Count, 1).End(xlUp).Row + 1 Sheets("1-1").Select Range(Cells(2, 1), Cells(GYOU1, 18)).Copy Sheets("1-4").Select Range("A" & GYOU2).Select ActiveSheet.Paste Application.CutCopyMode = False End Sub これが正常に動かないということはSheet1、Sheet2の時と 1-1、1-4のどこかが違うのではないかと思います。 Sheet1と1-1だとは思うのですが。 それとANo.18のマクロですが EXIT FORから 下から3行目に飛ぶということですが 1-1のA列に空白セルが出てきたら飛ぶようになっているのですが A列は1行目が項目で2行目から最後の行までデータが入力されているのでは ないのでしょうか?

orange1010
質問者

お礼

本当に申し訳ありません。 混乱してしまっています。 最初から確認してみたところ、最初のファイルと今のファイルでは行数が違う事に気づきました。 本当にすみません・・・ マクロの記録を取ってしまい行数が18ではなく15になっていたのです。 15に変えてみたのですが、出来なかったということは他にもいじる所があるのでしょうか。 以下、現在使用しているファイルです。 1-1(月1でやる作業です) A1~O1まで項目 A2~O2よりデータが入っています。 Q2~R28まではA2~O2のデータをカウントする為の数式等が入っています。 1-4(1-1のデータを一年分とり、ピボットするために継ぎ足していくシートです) A1~O1まで項目(1-1)と同じ項目が入っています。 これと同じ作業を他に2種やります。(項目の数は違います) 私が知識がなさ過ぎる為に、こんなことになってしまって本当に申し訳ありませんでした。 もう一度お力添えいただけないでしょうか?

  • mar00
  • ベストアンサー率36% (158/430)
回答No.18

Sub Macro5() Dim GYOU As Integer Dim INP As Long Sheets("1-4").Select GYOU = Cells(Rows.Count, 1).End(xlUp).Row 'Application.ScreenUpdating = False Sheets("1-1").Select For INP = 2 To 1000000 Sheets("1-1").Select If IsEmpty(Cells(INP, 1)) Then Exit For Else GYOU = GYOU + 1 Sheets("1-1").Select Range(Cells(INP, 1), Cells(INP, 18)).Copy Sheets("1-4").Select Range("A" & GYOU).Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Application.CutCopyMode = False End If Next INP 'Application.ScreenUpdating = False Sheets("1-4").Select Range("A1").Select End Sub シート名の1-1、1-4は半角でテンキーから入力しています。

orange1010
質問者

お礼

ペーストされませんでした… Exit Forから下から3行目のSheets("1-4").Selectに飛ぶんですが、 それは問題ではないですか?

  • mar00
  • ベストアンサー率36% (158/430)
回答No.17

orange1010さんの返事を見ましたが マクロは正しく動作しているようです。 ただペーストされずに終了した所を除けばですが。 ActiveSheet.Pastek部分を Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False に変えてみてください。 だめだった場合、 こっちも試して見て下さい。 Sub Macro5() Dim WS1 As String Dim WS2 As String Dim GYOU As Long WS1 = InputBox("元データを入力して下さい。") WS2 = InputBox("コピー先を入力して下さい。") Sheets(WS2).Select GYOU = Cells(Rows.Count, 1).End(xlUp).Row Application.ScreenUpdating = False Sheets(WS1).Select For INP1 = 2 To 1000000 Sheets(WS1).Select If IsEmpty(Cells(INP1, 1)) Then Exit For Else GYOU = GYOU + 1 For INP2 = 1 To 18 Sheets(WS2).Cells(GYOU, INP2) = Sheets(WS1).Cells(INP1, INP2) Next INP2 End If Next INP1 Application.ScreenUpdating = False Sheets(WS2).Select Range("A1").Select End Sub

orange1010
質問者

お礼

どちらも試してみましたが、 ペーストされませんでした…。

  • mar00
  • ベストアンサー率36% (158/430)
回答No.16

Sub Macro1() Dim WS1 As String Dim WS2 As String Dim GYOU1 As Long Dim GYOU2 As Long WS1 = InputBox("元データを入力して下さい。") GYOU1 = Sheets(WS1).Cells(Rows.Count, 1).End(xlUp).Row WS2 = InputBox("コピー先を入力して下さい。") (1) Sheets(WS1).Select (2) Range(Cells(2, 1), Cells(GYOU1, 18)).Copy (3) Sheets(WS2).Select (4) GYOU2 = Sheets(WS2).Cells(Rows.Count, 1).End(xlUp).Row + 1 (5) Cells(GYOU2, 1).Select (6) ActiveSheet.Paste Application.CutCopyMode = False Range("A1").Select End Sub (1)の行が黄色くなった時、GYOU1を(1-1のデータの最終行になるはず) (3)の行が黄色くなった時、1-1が選択されているかを (4)の行が黄色くなった時、1-1のデータ範囲が選択されているかを (5)の行が黄色くなった時、1-4が選択されているかを (6)の行が黄色くなった時、GYOU2を のように確認したい対象がある次の行が黄色くなった時に どういう値になっているかを確認してほしいのです。 最初の方は黄色くなっている時に確認してもEmpty値になります。 通り過ぎて初めて変数が設定されるためです。

orange1010
質問者

お礼

そういうことだったんですか…申し訳ありませんでした。 (1)  Sub Macro1() (2)  Dim WS1 As String (3)  Dim WS2 As String (4)  Dim GYOU1 As Long (5)  Dim GYOU2 As Long (6)  WS1 = InputBox("元データを入力して下さい。") (7)  GYOU1 = Sheets(WS1).Cells(Rows.Count, 1).End(xlUp).Row (8)  WS2 = InputBox("コピー先を入力して下さい。") (1) (9)  Sheets(WS1).Select (2) (10)  Range(Cells(2, 1), Cells(GYOU1, 18)).Copy (3) (11)  Sheets(WS2).Select (4) (12)  GYOU2 = Sheets(WS2).Cells(Rows.Count, 1).End(xlUp).Row + 1 (5) (13)  Cells(GYOU2, 1).Select (6) (14)  ActiveSheet.Paste (15)  Application.CutCopyMode = False (16)  Range("A1").Select (17)  End Sub 以下、やってみたご報告です。 (1)の行が黄色くなった時、GYOU1を(1-1のデータの最終行になるはず)  >左の数字(7)のGYOU1の所 → GYOU1=301となっていますので合ってます。 (3)の行が黄色くなった時、1-1が選択されているかを  >左の数字(9)の(WS1)の所 → WS=”1-1”となっています。 (4)の行が黄色くなった時、1-1のデータ範囲が選択されているかを  >左の数字(10)の(GYOU1,の所 → GYOU=301 (5)の行が黄色くなった時、1-4が選択されているかを  >左の数字(11)の(WS2)の所 → WS=”1-4” (6)の行が黄色くなった時、GYOU2を  >(12)のGYOU2の所 → GYOU2=2 このようになっています。 ただペーストされずに終了してしまいました。 よろしくお願いします。

  • mar00
  • ベストアンサー率36% (158/430)
回答No.15

Sub Macro1() Dim WS1 As String Dim WS2 As String Dim GYOU1 As Long Dim GYOU2 As Long WS1 = InputBox("元データを入力して下さい。") GYOU1 = Sheets(WS1).Cells(Rows.Count, 1).End(xlUp).Row WS2 = InputBox("コピー先を入力して下さい。") (1) Sheets(WS1).Select (2) Range(Cells(2, 1), Cells(GYOU1, 18)).Copy (3) Sheets(WS2).Select (4) GYOU2 = Sheets(WS2).Cells(Rows.Count, 1).End(xlUp).Row + 1 (5) Cells(GYOU2, 1).Select (6) ActiveSheet.Paste Application.CutCopyMode = False Range("A1").Select End Sub (1)の行が黄色くなった時、GYOU1を(1-1のデータの最終行になるはず) (3)の行が黄色くなった時、1-1が選択されているかを (4)の行が黄色くなった時、1-1のデータ範囲が選択されているかを (5)の行が黄色くなった時、1-4が選択されているかを (6)の行が黄色くなった時、GYOU2を のように確認したい対象がある次の行が黄色くなった時に どういう値になっているかを確認してほしいのです。 最初の方は黄色くなっている時に確認してもEmpty値になります。 通り過ぎて初めて変数が設定されるためです。

関連するQ&A

  • VBA 最終行を選んだシートにコピーする。

    VBAど初心者です。どうしても最終行のデータを選んだシートにコピーできません。 LastRow.Selectのところで、止まってしまいます。どのように行を設定していいのかさっぱりわかりません。どなたか、ご指導のほどよろしくお願いします。 Sub copy_last_line() Dim LastRow As Long Sheets("Sheet1").Select LastRow = Cells(Rows.Count, 1).End(xlUp).Row LastRow.Select Selection.Copy Sheets("Sheet2").Select Range("A1").Select ActiveSheet.Paste Sheets("Sheet1").Select Range("A1").Select End Sub

  • Excel VBAの質問。行のコピーと削除について

    Excel VBAでSheet1のD列に「処分」という文字が入力されていたら、その行を Sheet2へコピーし、Sheet1のその行を削除するというマクロを作成したいのですが、 削除をさせる位置が悪いのか件数が合いません。 下の例では、Sheet1のD列には「処分」という文字が入力されている行が3行あります。 Sheet1の1,3,4行目をSheet2へコピーした後にSheet1の1,3,4行目を削除して 行を上に詰めたいのです。 ネットで検索したり、書籍を読みながらここまで作成したのですが、どうしてもうまくいきません。 大変困っております。どうか、間違えている箇所を教えてください。よろしくお願いします。 A B C D E F -|----------------------------------------- 1| 1 03/01 時計 処分 倉庫 特になし 2| 2 03/05 電話 保留  倉庫 連絡済 3| 3 03/10 紙袋 処分 売店  使用済み 4| 4 03/11 電池 処分  倉庫 空白 5| 5 03/12 時計 保留  売店  空白 Private Sub cmdmSyobun_Click() Dim SyobunWord As String Dim gyou As Long Dim word As String Dim LastRow As Long Dim hantei As Integer Dim count As Integer Dim baseB As Workbook Dim baseS As Worksheet SyobunWord = "処分" Set baseB = ThisWorkbook Set baseS = baseB.Worksheets("Sheet1") baseS.Activate With Worksheets("Sheet1") hantei = MsgBox("「処分」データを移動しますか?", vbYesNo) Select Case hantei Case vbYes count = 0 gyou = 2 LastRow = baseS.Cells(Rows.count, 1).End(xlUp).Row Do While Cells(gyou, 4) <> "" word = Cells(gyou, 4) If InStr(word, MoveWord) >= 1 Then count = count + 1 Rows(gyou).Copy Worksheets("Sheet2").Cells(Rows.count, 1).End(xlUp).Offset(1, 0) Rows(gyou).Delete Shift:=xlShiftUp End If gyou = gyou + 1 Loop Case vbNo MsgBox "「処分」データは移動されませんでした。" End Select End With MsgBox MoveWord & "は、" & count & "件でした。" End Sub

  • エクセル VBA 特定文字がある行を別シートに移動

    ソフト excel2003 o列に文字列が入力された表があります。 マクロ実行時下記のようにするには、VBAのコードをどのように記入すればよろしいでしょうか? 赤枠で囲んだボタンをクリックすると シート1のO列に 中 が入力されている行を切り取りし中シートに貼り付け (下の行は上方向にシフト) ※ シート1の内容は日毎に更新されますので、更新後、赤枠で囲んだボタンをクリックするとその時点で 中 が入力されているものは中シートのリストへ追加されるようにしたいのです。 以前ここで教えていただいたものを参考に作成してみたの(以下に記載)ですがうまくいきません。 お助けいただけないでしょうか。 宜しくお願い致します。 Sub ボタン中シート_Click() 'Sheet2の挿入位置(C列は結合セルではなく、必ず何か入っている事) nMax2 = Sheets("中シート").Cells(Rows.Count, 3).End(xlUp).Row + 1 With Sheets("sheet1") nMax1 = .Cells(Rows.Count, 9).End(xlUp).Row For i = nMax1 To 2 Step -2 If .Cells(o, 15) = "中" Then .Range(.Cells(o, 1), .Cells(o + 1, 10)).Copy Sheets("中シート").Cells(nMax2, 1).Insert Shift:=xlDown .Range(.Cells(o, 1), .Cells(o + 1, 10)).Delete Shift:=xlUp End If Next i End With End Sub

  • エクセルVBAで行のコピー貼り付けについて

    初心者、勉強中でエクセル2007です。 A1行からK40行までの表があります。 これを下にコピーをしながら増やしていってるのですが、マクロでしようと思い下記のとおり 考えました。 selecion.row.Offset(39, -1).Select ここでオブジェクトが必要ですと出ます。 それからその下の?とを色々ぐぐってみますがどうしてもわかりません。 それと2007ですので65536行ではないのですが、MaxRow = Cells(Rows.Count, 1).End(xlUp).Row だと動かないみたいですので下記としています。 よろしくご教授お願いします。 Sub Gcopy() MaxRow = Range("B65536").End(xlUp).Offset(-39, -1).Select データの入ってる最終行を取得 Selecion.row.Offset(39, -1).Select 選択された行から上に39行移動し選択 ?                    下へ39行まで選択   MaxRow = Range("B65536").End(xlUp).Offset(1, -1) 最終行を取得 ActiveSheet.Paste 貼り付け End Sub

  • excel2003入力したデータを別シートにコピー

    会社でエクセル2003を使っています。 ド素人で、専門用語が全く分からないのでお許しください。 ひな形に入力したデータを その都度、別シートにリストとして保存したいのです。 ネットで調べたところマクロを使うようで Sub 正方形長方形4_Click() Call macro01 Call macro02 End Sub Sub macro01() Dim ws1 As Worksheet, ws2 As Worksheet Dim x As Long, y As Long Set ws1 = Sheets("Sheet1") Set ws2 = Sheets("Sheet2") x = ws2.Cells(Rows.Count, "b").End(xlUp).Row + 1 y = ws1.Cells(Rows.Count, "b").End(xlUp).Row ws1.Cells(21, "b").Resize(y, 9).Copy ws2.Cells(x, "B").PasteSpecial Paste:=xlPasteValues Application.CutCopyMode = False End Sub Sub macro02() Worksheets("Sheet1").PrintOut End Sub いろいろ知らべみてこのようなマクロを作りました。 家のエクセル2010では順番に入力行のその下にデータリストが増えていくのですが 会社の2003だと2行空いてしまうのです。 上記にマクロは家で作って会社ではそのマクロを入力する形です。 マクロの意味が全く分からず、どこを修正すればいいのかもわかりません。 お力をお貸しください。 よろしくお願いいたします。

  • 途中に空白行や列があるデータ範囲

    エクセル2003です。 セルA1からセルC50までデータがあり 10行目と20行目は全て空白、 セルC39が空白で セルE55、F57、G55にはデータがある の状態で以下の構文ですと Sub 範囲コピー1() Range("B3").Select Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select Selection.Copy End Sub 途中に空白行や列、空白セルがあり さらに離れた所E55、F57、G55に データが有るのにもかかわらず セルB3からセルG57までを選択してクリップボードにコピー してくれます。 ですが問題がありまして 上記のシートにて A45~F50を選択してDeleteをし、 さらにセルのF55、G55もDeleteして データ範囲を セルA1~E44とセルE55のみにしてからから 上記構文を実行すると セルB3からセルE55を選択してクリップボードにコピー してほしいのに、 データ削除前と同様の セルB3からセルG57を選択してクリップボードにコピー されてしまいます。 これはエクセルの手操作 Ctrl+Shift+End でも同じようになりますので当然の結果(※1)と思っています。 (※1→なにか別な方法はありますか?) 上記の使用方法はあまりないのですが 構文を使う時点での最大行数や最大列数は常に不明で 途中空白が有る場合無い場合、 上記のようにシート上でデータ操作をした直後であっても データ削除部分は加味しデータのある範囲だけの取得の対応 が可能な構文を1種類で作成したいのですが どういう方法があるでしょうか? ちなみに Sub 範囲コピー2() Range("B3").Select Range(Cells(Rows.Count, 1).End(xlUp).Row).Select Range(Cells(1, Columns.Count).End(xlToLeft).Column).Select Selection.Copy End Sub これですと 実行時エラー1004 Rangeメソッドは失敗しましたGlobalオブジェクト となります。 ヘルプをクリックしても何も表示されません。 WEB検索するとこのエラーの質問は結構多いのですが 事例が相違する為よく理解できません。 もしかしてRangeなのに 取得できる値が一つの番号でセルを指定できないからでしょうか? エラーになる構文だと最初のRangeは行番号、次のRangeは列番号、 ですので。 で、 Sub 範囲コピー3() Dim 最終行 Dim 最終列 Range("B3").Select 最終行 = Cells(Rows.Count, 1).End(xlUp).Row 最終列 = Cells(1, Columns.Count).End(xlToLeft).Column Cells(最終行, 最終列).Select Selection.Copy End Sub これならエラーにはなりませんが 事例だとセルC50だけが単独選択されて範囲として 取得をしてくれません。 また 1, Columns.Count ですので最終列の列番号の取得が1行目の最終列から左に検索し データのある所の列番号を返すので 3→C列 となってしまい D,E,F列を見つけてくれません。 かといって 55, Columns.Count では データが55行まで無い場合には対応が出来ませんのでこれも駄目です。 途中に空白が無い場合や離れたセルが無い場合でも使いたいので UsedRangeは使用したくない(よくわかってない事もあって)です。 よろしくお願いします。

  • フィルタで選択した行を別シートにコピーするマクロ

    よろしくお願いします シート1 の一行目にタイトルがあって 二行目以降にデータ(30列目まで)が 入っております そのデータをオートフィルタで抽出して 抽出されたデータ(タイトル行は不要)を 選択してシート2のデータ最終行の 一行下へ貼り付けたいのですが。 シート1で Range(Cells(2, 1), Cells(Cells(65536, 1).End(xlUp).Row, 30)).Select こうやって選択した後の記述がわかりません。 このままシート2の最終行を 選択貼り付けしようとするとシート1の選択内容が 消えてしまう(シート2が最新の選択になるため?) 挿入の際に「下へ」「右へ」など聞かれるのも 面倒なので行選択したいのですが 御教授ねがいます

  • シート1のC列の最終行をコピーして同じ行に値貼り付けしたい

    シート1のC列の最終行を取得して その行を丸々値貼り付けするマクロを作りたいと思います。 シート3のB18の値をシート1のC列の最終行の1つ下のセルに値貼り付け すると、その行のA、B列に日付が入力される関数が入っています。(下まで) 関数が入ったままだと、うまくいかない時があるので最終行をコピーして値貼り付けしたいのですが、マクロの作り方を教えてください。 シート1の最終行に貼り付け Sheets("Sheet3").Select Range("B18").Select Selection.Copy Sheets("Sheet1").Select Range("C65536").End(xlUp).Offset(1).Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Application.CutCopyMode = False End Sub 最終行をコピーして値貼り付け Dim 最終行 As Integer 最終行 = Range("C65536").End(xlUp).Row Range("A6:C" & 最終行).Select Selection.Copy Sheets("Sheet1").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Application.CutCopyMode = False End Sub このマクロだと、A6からC列の最終行まで全てコピーされてしまうので、C列の最終行のAからC列まで1行だけコピーできないでしょうか?

  • 変数を名前に使ったシートにデータをコピーする方法

    いつもお世話になります。 hisworkbookにあるVBAから新たに開いたmyFileにデータをコピーさせようとしています。 myFileである統合.xlsにはあらかじめ該当するシートが作成されています。 myBushoとmyGroupはそれぞれセルの値を参照しています。 それを元に対応するシート名にデータのコピーをしたいのです。 当初workbooks(myFile)をactiveworkbookにしていたのですが、うまくコピーされなかったので、 ファイルパスを記述しました。 sub test() dim cnt as long dim lcnt as long dim myFile as string dim myBusho as string dim myGroup as string cnt = ThisWorkbook.Sheets(1).Cells(Rows.Count, 1).End(xlUp).Row lcnt = ActiveWorkbook.Sheets(myBusho & "_" & myGroup).Cells(Rows.Count, 1).End(xlUp).Row myFile = "C:\統合.xls" myBusho = range("A1").value myGroup = range("A2").value ThisWorkbook.Sheets("Sheet1").Range(Cells(9, 1), Cells(cnt, 21)).Copy _ Workbooks(myFile).Sheet(myBusho & "_" & myGroup).Cells(lcnt + 1, 1) end sub 上記のコードではうまくコピーできませんでした。 よろしくアドバイスのほど、お願いします。

  • Excel007大量データのコピーが

    (1)、Sheet1の("Y7:MV7")の各セルに値A、B、C、の何れかが配置形の中央揃えで入ってます。 (2)、Sheet2の("O3:ML3")の各セルには1~336の数字が順に振られています。 そして(1)の形でデータが入るたびに(2)の最下に(1)の値だけがコピーされるようにVBAで次の様に書いてみました。 Sub test() Worksheets("Sheet2").Select Dim n As Byte, t As Byte n = Cells(Rows.Count, "O").E nd(xlup).Row + 1 t = Cells(Rows.Count, "ML"). End(xlup).Row + 1 Range("O" & n:"ML" & t).Sele ct Selection = Worksheets("Shee t1").Range("Y7:MV7").Value End Sub が、オーバーフローのエラーになります。 間違いの原因やお奨めなど頂けたらありがたいです。

専門家に質問してみよう