Copyコマンドの使い方についての質問

このQ&Aのポイント
  • Copyコマンドを使用してH~Uの行を下の行にコピーする方法について教えてください。
  • 一つ目の方法では、Sheets(1).Range("H12:U12").Copy Destination:=Sheets(1).Range("H13")というコードを使用していましたが、任意の行で使う方法を知りたいです。
  • Cellsを使って上手くコピーする方法を教えてください。
回答を見る
  • ベストアンサー

Copyコマンドについて

ある行のH~Uまでをすぐ下の行にコピーしたいのですが今まではセルの場所が判っていましたので Sheets(1).Range("H12:U12").Copy Destination:=Sheets(1).Range("H13") としていましたが任意の行ですので r = Sheets(SN).Range("b65536").End(xlUp).Row Sheets(12).Range(Sheets(12).Cells(r + 11, 8), Sheets(SN).Cells(r + 11, 15)).Copy Destination:=Sheets(12).Cells(r + 12, 8) では上手くいきませんCellsを使うときはどうすればよいか教えてください よろしくお願いします

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

  • ベストアンサー
  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.2

Sheets(12)とSheets(SN)は同じ? という疑問はおいておいて 無理にCellsで指定しなくてもRnageで r = Range("B65536").End(xlUp).Row Range("H" & r + 1 & ":U" & r + 1).Value = Range("H" & r & ":U" & r).Value という書き方もありますよ。

saab8743
質問者

お礼

ありがとうございます 教えていただいたコードで行きます。

その他の回答 (2)

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

シート関係を質問に明確に表現すること。 r = Sheets(SN).Range("b65536").End(xlUp).Row というからにはSheets(SN)の下の行に貼り付けるのではないか。 ーー その場合は >Sheets(12).Range(Sheets(12).Cells(r + 11, 8), )).Copy Sheets(SN).Cells(r + 11, 15)).Copy Destination:=Sheets(12).Cells(r + 12, 8) はDestination:=Sheets(SN).Cells(r + 12, 8)のような形になるのでは。 何をしたいかはっきりさせて質問すること。 ーー Sheets(12).Range(Sheets・・も Sheets(12).Range(1,3)のような形になっている。Rangeの場合は()内は"C1"のような文字列で指定。 Range(1,3)のような記述は出来るはずがない。 Cells(i,j)からの安易な類推で間違っている。 ーー 例題 下記をよく読んで考えること。 Sub test02() Worksheets("sheet1").Cells(1, 2) = "A" MsgBox Worksheets("sheet1").Range(Worksheets("sheet1").Cells(1, 2) & 1) End Sub ならA1セルの値が返る。 ーーー 参考 エラーが起こったら(上記のような文法、記法的なエラーは別にして) Sub test01() ’SN-->Sheet2 r = Sheets("sheet2").Range("B65536").End(xlUp).Row 'SN=Sheet2 MsgBox r MsgBox r + 11 '16 'Sheet12-->Sheet1 Sheets("Sheet1").Range(Sheets("Sheet1").Cells(r + 11, "H"), Sheets("Sheet1").Cells(r + 11, "J")).Copy _ Destination:=Sheets("Sheet1").Cells(r + 12, "H") End Sub のように範囲や列、行を具体的に、簡単な例に置き換えてみて、うまく行くかどうかMsgboxなどで確認すればデバッグが進むと思う。 == 表題も、>Copyコマンドについて は不適当。

saab8743
質問者

お礼

質問の方法がまずかったようで失礼しました。 Sheets(SN)はSheets(12)の間違いでした。 ありがとうございました。 今後気をつけます失礼しました。

  • kmetu
  • ベストアンサー率41% (562/1346)
回答No.1

Range(Sheets(12).Cells(r + 11, 8), Sheets(SN).Cells(r + 11, 15) Rangeの中で別シートって指定できましたっけ? Range(Cells(r + 11, 8), Cells(r + 11, 15)) じゃないんでしょうか。

saab8743
質問者

お礼

ありがとうございました この方法もありですね

関連するQ&A

  • Cells(1,3)をRange("C1")に変換

    Sheets(Sn).Range("A1:Z98").Copy Destination:=Sheets(Sn).Range("V9") r=131です 上記のVBAを使用したいのですが求められるのはCells(r-1,3)なのです。そのためにCells(r-1,3)をRange("C130")に変換できないでしょうか よろしくお願いします。

  • VBAのCopyコマンドについて

    エクセルVBAでシート3のRangeの値をからシート2のRangeへデータをコピーしようとしているのですが Sheets(3).Range("B3:B100").Copy _ Sheets(2).Range(Cells(3, col2 - 1), Cells(100, col2 - 1)) がうまくいって、 Sheets(3).Range(Cells(2, col1), Cells(100, col1)).Copy _ sheets(2).Range(Cells(2, col2), Cells(100, col2)) が何故、オブジェクト定義エラーになってしまうのがわかりません。 col1、col2は列の変数です。 よろしくお願いします。

  • Copyコマンドで値のみのコピーをするには

    現在このような形でCopyを実行しています。 Sheets(2).Range("C8")の書式が変わってしましますのでxlPasteValuesなどを使用して値のみのCopyをしたいのですがどう書けばよいのでしょうか Sheets(1).Range("A12").Copy Destination:=Sheets(2).Range("C8") よろしくお願いします。

  • VBAの転記について

    With Sheets("入力") '3行目~22行目まで For i = 5 To 24 SheetName = Sheets("入力").Cells(i, "C").Value On Error Resume Next Set Dummy = Sheets(SheetName) SheetName2 = .Cells(i, "C").Value U最終行 = Sheets(SheetName2).Range("C65536").End(xlUp).Row + 1 If U最終行 = 39 Then Sheets(SheetName2).Copy BEFORE:=ActiveSheet Sheets(SheetName).Delete End If If Err.Number = 0 Then A = Sheets(SheetName2).Range("C65536").End(xlUp).Row + 1 Sheets(SheetName2).Range("C" & A).Value = .Cells(i, "G").Value Sheets(SheetName2).Range("D" & A).Value = .Cells(i, "I").Value Sheets(SheetName2).Range("E" & A).Value = .Cells(i, "L").Value Sheets(SheetName2).Range("F" & A).Value = .Cells(i, "N").Value Sheets(SheetName2).Range("G" & A).Value = .Cells(i, "P").Value Sheets(SheetName2).Range("H" & A).Value = .Cells(i, "R").Value Sheets(SheetName2).Range("I" & A).Value = .Cells(i, "T").Value Sheets(SheetName2).Range("K" & A).Value = .Cells(i, "V").Value Sheets(SheetName2).Range("L" & A).Value = .Cells(i, "X").Value ElseIf .Cells(i, "C").Value <> "" Then G = Sheets("原紙").Range("C65536").End(xlUp).Row + 1 Sheets("原紙").Range("B1").Value = .Cells(i, "D").Value Sheets("原紙").Range("B4").Value = .Cells(2, "D").Value Sheets("原紙").Range("C" & G).Value = .Cells(i, "G").Value Sheets("原紙").Range("D" & G).Value = .Cells(i, "I").Value Sheets("原紙").Range("E" & G).Value = .Cells(i, "L").Value Sheets("原紙").Range("F" & G).Value = .Cells(i, "N").Value Sheets("原紙").Range("G" & G).Value = .Cells(i, "P").Value Sheets("原紙").Range("H" & G).Value = .Cells(i, "R").Value Sheets("原紙").Range("I" & G).Value = .Cells(i, "T").Value Sheets("原紙").Range("K" & G).Value = .Cells(i, "V").Value Sheets("原紙").Range("L" & G).Value = .Cells(i, "X").Value '原紙をコピーする Sheets("原紙").Copy BEFORE:=Sheets(1) 'シートの名前を市場コードにする Sheets(1).Name = SheetName End If Next i End With On Error GoTo 0 上記のVBAを作成しましたが、 C行の値ごとの転記(G~Xの値)が出来ません。 どこが間違いか教えていただけないでしょうか。

  • エクセルマクロの件(2)

    お世話になります。 先日このサイトで教えていただき(No.3433483)、下記のようなマクロができました。 その節はありがとうございました。 マクロ実行したところ、1回目は問題なく動作し、マクロ実行によって作成されたデータを削除し、改めて実行すれば問題ありませんでした。 ただ、2回目以降(一覧データを削除せずそのまま実行)マクロを実行すると、毎回180行以降のデータが重複するようになりました。 3回実行すると、180行より前のデータは1行のみの表示ですが、181行目以降のものは3行同じデータが記載されるということです。 全てのデータが重複するのであれば分からなくはないのですが、一部分のみの重複なので意味が分からなくなってしまいました。 (マクロの中にそう処理するよう記載があるのだと思いますが素人のため分かりません;) 理由の分かる方がいらっしゃいましたらご指摘いただければと思いますのでよろしくお願いします。 Dim ptr As Integer Sheets("シートA").Activate ptr = Range("A65536").End(xlUp).Row Range("A4:P" & ptr).Copy Destination:=Sheets("一覧").Range("A4") Sheets("シートB").Activate ptr = Sheets("シートB").Range("A65536").End(xlUp).Row Range("A4:P" & ptr).Copy Destination:=Sheets("一覧").Range("A65536").End(xlUp).Offset(1, 0) Sheets("一覧").Activate Range(Cells(4, "A"), Cells(Range("A65536").End(xlUp).Row, "P")).Sort _ Key1:=Range("D4"), Order1:=xlAscending, Key2:=Range("E4"), _ Order2:=xlAscending, Key3:=Range("F4"), Order3:=xlAscending, _ Header:=xlGuess, OrderCustom:=1, MatchCase:=False, _ Orientation:=xlTopToBottom, SortMethod:=xlPinYin, DataOption1:=xlSortNormal, _ DataOption2:=xlSortNormal, DataOption3:=xlSortNormal ' End Sub

  • エクセルで式のセルを値で貼り付ける際(マクロを組んで)

    毎回お世話になっております。 よろしくお願いします。 1行目にタイトルがありまして A2セルから下にデータが入っています (A2から隙間無く詰まっています  毎回変わりますが おおよそ数百くらい) そのA行のデータを参照している数式が M行 N行セルに 入っています。 たとえば M2=A2*3 N2=A2+9 というふうに M2 N2の式をA行のデータがある最終部分まで Cells(2, 13).Copy Range(Cells(3, 13), Cells(Cells(65536, 1).End(xlUp).Row, 13)) Cells(2, 14).Copy Range(Cells(3, 14), Cells(Cells(65536, 1).End(xlUp).Row, 14)) この式でコピーしています。 そしてMN行全体を選択して「値」で貼り付けているのですが 動作が重くなってきます。 そこでMN行のデータがある部分を選択できる マクロでの方法はありませんでしょうか? もしくは 「考える方向がおかしい」などの 御指摘ありましたら よろしくお願い致します。

  • VBA アプリケーション定義またはオブジェクト定義エラーについて

    doc_wbkというブックのSheets(2)の内容をdoc_wbk2のActiveSheetにコピーしようとしています。 以下のコードの5行目で「アプリケーション定義またはオブジェクト定義エラー」が出てしまいます。ブックやシートまで指定しないといけないのかと思い doc_wbk.Sheets(2) を5行目行頭に追加しましたが変わりません。逆に5行目行頭の . を外してやるとアクティブシートの内容をコピーしてしまいます。Sheets(2)の内容をコピーしてやるにはどうしたらよいでしょうか?よろしくお願いします。 Set doc_wbk = Workbooks.Open(doc_dir + doc_file, 0) With Sheets(2) If .Range("A4").Value <> "" Then row_num = .Range("a65536").End(xlUp).Row .Range(Cells(4, 1), Cells(row_num, 11)).Copy doc_wbk2.ActiveSheet.Cells(row_num2 + 1, 1) End If End With

  • Next,End Withのエラー

    Sub 入力() If Sheets("入力").Range("D3").Value = "" Then MsgBox "客先名を入力して下さい" Else Dim K最終行 As Long Dim T最終行 As Long Dim i As Integer With Sheets("入力") For i = 3 To 12 If .Cells(i, "H").Value <> "" Then U最終行 = Sheets("注文書").Range("G65536").End(xlUp).Row + 1 If U最終行 = 461 Then MsgBox "注文書がいっぱいです" Exit Sub Else End If E最終行 = Sheets("営業確認").Range("G65536").End(xlUp).Row + 1 Sheets("営業確認").Range("k" & E最終行).Value = .Cells(i, "b").Value Sheets("営業確認").Range("b" & E最終行).Value = .Cells(i, "c").Value Sheets("営業確認").Range("c" & E最終行).Value = .Cells(i, "d").Value Sheets("営業確認").Range("d" & E最終行).Value = .Cells(i, "e").Value Sheets("営業確認").Range("g" & E最終行).Value = .Cells(i, "h").Value Sheets("営業確認").Range("f" & E最終行).Value = .Cells(i, "i").Value Sheets("営業確認").Range("i" & E最終行).Value = .Cells(i, "m").Value Sheets("営業確認").Range("h" & E最終行).Value = .Cells(i, "p").Value Else End If Select Case .Cells(i, "o").Value Case "北" K最終行 = Sheets("北").Range("h65536").End(xlUp).Row + 1 Sheets("北").Range("B" & K最終行).Value = .Cells(3, "C").Value Sheets("北").Range("c" & K最終行).Value = .Cells(3, "b").Value Case "中" T最終行 = Sheets("中").Range("H65536").End(xlUp).Row + 1 Sheets("中").Range("b" & T最終行).Value = .Cells(3, "c").Value Sheets("中").Range("c" & T最終行).Value = .Cells(3, "b").Value End Select Exit Sub Dim Dummy As Worksheet Dim SheetName As String Dim OTA As Long Dim GEN As Long Dim SheetName2 As String With Sheets("入力") '3行目~22行目まで For j = 3 To 22 SheetName = Sheets("入力").Range("D3").Value On Error Resume Next Set Dummy = Sheets(SheetName) SheetName2 = .Cells(i, 14).Value 'もしシートがあれば・・・ If Err.Number = 0 Then 'SheetName2は入力シートのN行 SheetName2 = .Cells(i, 14).Value OTA = Sheets(SheetName2).Range("B65536").End(xlUp).Row + 1 Sheets(SheetName2).Range("A7").Value = .Cells(3, "D").Value Sheets(SheetName2).Range("C3").Value = .Cells(3, "C").Value Sheets(SheetName2).Range("B" & OTA).Value = .Cells(i, "H").Value Sheets(SheetName2).Range("I" & OTA).Value = .Cells(i, "I").Value Sheets(SheetName2).Range("F" & OTA).Value = .Cells(i, "K").Value Sheets(SheetName2).Range("H" & OTA).Value = .Cells(i, "L").Value Sheets(SheetName2).Range("J" & OTA).Value = .Cells(i, "M").Value 'シートが無ければ・・・ Else GEN = Sheets("原紙").Range("B65536").End(xlUp).Row + 1 Sheets("原紙").Range("A7").Value = .Cells(3, "D").Value Sheets("原紙").Range("C3").Value = .Cells(3, "C").Value Sheets("原紙").Range("B" & GEN).Value = .Cells(i, "H").Value Sheets("原紙").Range("I" & GEN).Value = .Cells(i, "I").Value Sheets("原紙").Range("F" & GEN).Value = .Cells(i, "K").Value Sheets("原紙").Range("H" & GEN).Value = .Cells(i, "L").Value Sheets("原紙").Range("J" & GEN).Value = .Cells(i, "M").Value '原紙をコピーする Sheets("原紙").Copy BEFORE:=Sheets(1) 'シートの名前を市場コードにする Sheets(1).Name = SheetName Next End With Exit Sub On Error GoTo 0 Sheets("原紙").Select Range("C3:E3,A7,B16:B35,F16:F35,H16:J35").Select Range("H35").Activate Selection.ClearContents Sheets("入力").Select Sheets("入力").Range("D3,G3:J12,L3:M12").Value = "" Sheets("入力").Range("D3").Select Range("B3").Formula = "=IF(D3="""","""",VLOOKUP(D3,'\\Seika-sv01\支店共有\マーケティング用\[担当者リスト.xls]リスト形式'!$B:$D,3,FALSE))" MsgBox "入力が完了しました" End If End Sub 上記のようにマクロを組みましたがエラーが出てしまいます。

  • エクセルマクロ コピー時の記述(位置検出含む)

    Dim Lstrow As Integer '変数の型を宣言 Lstrow = Cells(Rows.Count, 22).End(xlUp).Row '英語不合格者の表の最終行までの行数を数える Range(Cells(3, 22), Cells(Lstrow, 27)).Copy _   '上の表の「見出し」を除いた部分を選択し、コピーし、 Destination:=Range("aj300").End(xlUp).Offset(1)  '別の表の下に接続して貼り付ける という、記述をしました。(これまでこちらで教えていただいたことを組み合わせました。) 最後の貼り付けの番地指定のところで質問なのですが、"aj"列を300行から上がって検出するという記述ではなく、Lstrow = Cells(Rows.Count, 22).End(xlUp).Rowのような方法で、表の長さにかかわらず使用できる汎用性のある記述を教えてください。 よろしくお願いいたします。

  • excel vbaでリストの範囲設定

    よろしくおねがいします。 Sub 科目自動入力() Sheets("出納帳テンプレート").Select Application.ScreenUpdating = False 'ww列最終行取得 Dim vv As Long ' Sheets("科目シート").Select vv = Sheets("科目シート").Range("v" & Rows.Count).End(xlUp).Row Sheets("出納帳テンプレート").Select 'B列最終行取得 Dim aa As Long '式をフィルダウン aa = Range("B" & Rows.Count).End(xlUp).Row Range("H6").AutoFill Destination:=Range("H6:" & "H" & aa + 100), Type:=xlFillDefault '開始行設定 Dim a As Integer a = 6 kList = Worksheets("科目シート").Range("U2:V127") 'D列「月」欄が空白になるまで繰り返す '一覧に空白が出るか、一致する項目があるまで繰り返す Do Until Cells(a, 4).Value = "" For i = 1 To UBound(kList) If kList(i, 1) = "" Then Exit For '空白だったら抜ける If Cells(a, 7) <> "" Then Exit For 'すでに科目が入力されていれば抜ける If Cells(a, 4).Value Like "*" & kList(i, 1) & "*" Then Cells(a, 7).Value = kList(i, 2) Exit For End If Next i a = a + 1 Loop End sub このようなマクロを組んでいてうまく動作しております。 科目シートにリストがあり 現在はリストをkList = Worksheets("科目シート").Range("U2:V127") と範囲決め打ちしています。 これを範囲可変にしてみようと考えてみたのですが、 kList = Worksheets("科目シート").Range(Cells(2, "U"), Cells(vv, "V")) としても実行時エラー 1004と出てうまくいきません。 ちなみに開始セルは「U2」で変わりません。 終点セルを変数vvで表現したいです。 どうかよろしくお願いします。

専門家に質問してみよう