• ベストアンサー

Excel VBA のコピーについて

Range(Cells(7, 42), Cells(61, 79)).Select Selection.Cut Destination:=Range("B7") このような形で値をコピーしたいのですが、 その際、コピーされる方のRange("B7")の書式を そのまま生かしたい場合はどのような設定をすればよろしいのでしょうか? windows2000でexcel2000になります。 よろしくお願い致します。

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんにちは。 こんな風に配列変数を使えばよいと思います。 Sub CutValues() Dim myValue As Variant With Range(Cells(7, 42), Cells(61, 79))  myValue = .Value  .ClearContents Range("B7").Resize(.Rows.Count, .Columns.Count) = myValue End With End Sub PasteSpecial を使うなら、空打ち(領域にValueデータがないこと)を予想しなくてはならないので、エラートラップが必要ではないでしょうか? With Range(Cells(7, 42), Cells(61, 79))   .Copy On Error Resume Next  Range("B7").PasteSpecial Paste:=xlValues  .ClearContents '貼り付け前には出来ません。 End With ただし、こちらは、コピー領域と、ペースト領域で重なる場合は、コピー領域が削除されてしまうので、ペースト領域の一部が欠ける可能性がありますね。

riseshinejp
質問者

お礼

ありがとうございます。 やっとできました。 変数を使うなどぜんぜん頭になかったので とても参考になりました。

その他の回答 (2)

  • o_chi_chi
  • ベストアンサー率45% (131/287)
回答No.2

#1です。 --- Range(Cells(7, 42), Cells(61, 79)).Copy Range("B7").Select Selection.PasteSpecial Paste:=xlValues --- もしくは --- Range(Cells(7, 42), Cells(61, 79)).Copy Range("B7").PasteSpecial Paste:=xlValues --- にしてみて下さい。

riseshinejp
質問者

お礼

ありがとうございます。 おかげさまでやっとできました。

  • o_chi_chi
  • ベストアンサー率45% (131/287)
回答No.1

質問のマクロだと切り取り→貼り付けになっています。 コピーにすれば質問のとおり値のみの貼り付けができます。 --- Selection.PasteSpecial Paste:=xlValues

riseshinejp
質問者

補足

ありがとうございます。 ご指摘のとおり以下のように修正してみたのですが、 なぜかSelection.PasteSpecial Paste:=xlValuesのところでエラーになってしまいます。 なにか間違ってますでしょうか?

関連するQ&A

  • VBA EXCEL セルのコピーについて

    Range(Cells(PRow + SERVICE_ROW, 2), Cells(SRow, 40)).Select Selection.Copy Destination:=Range(Cells(PRow, 2), Cells(A, 40)) このような形で変数を使いセルの値のコピーし、貼り付けたいと思っています。 貼り付ける場所にも変数を使いたいのですが、 Aの部分が可変で値を設定できません。 Range("B2")みたいな意味でRange(Cells(Prow,2))みたいな感じでスタートだけ設定して貼り付けることはできないのでしょうか?

  • エクセルマクロで行を変えて千回カット&ぺースト

    下記のコードでB,C,D・・・と行を1,000回変えて同じ作業をしたいのですが、どのようにしたらよいか分かりません。 どなたかお詳しい方アドバイスをお願いします。 Range("A18:A32").Select Selection.Cut Destination:=Range("B3:B17") ←B,C,D・・と変えてカットしたい。 Rows("18:32").Select Selection.Delete Shift:=xlUp Range("A18:A32").Select Selection.Cut Destination:=Range("C3:C17") Rows("18:32").Select Selection.Delete Shift:=xlUp Range("A18:A32").Select Selection.Cut Destination:=Range("D3:D17") Range("D3:D17").Select End Sub

  • 【VBA】コピー&複数個所のペースト繰り返し

    下記のように、1つの値をコピーし、別シートの複数個所(同じ列の違う行)へ順次ペーストしたいのですが、貼付けデータやペースト箇所が増えた場合でも対応できるようなVBAを教えてください。 よろしくおねがいいたします。 ========================================================= Sub コピペ() '←1人目をコピー Worksheets("“コピー元シート”").Range("B7").Select Selection.Copy '←貼付け Worksheets(“貼付シート”).Range("B9", "B37", "B65", "B93", "B121", "B149", "B177").Select Selection.PasteSpecial Paste:=xlPasteFormulas '←2人目をコピー Worksheets("“コピー元シート”").Range("B8").Select Selection.Copy '←貼付け Worksheets(“貼付シート”).Range("B11", "B39", "B67", "B95", "B123", "B151", "B179").Select Selection.PasteSpecial Paste:=xlPasteFormulas '←3個の値をコピー Worksheets("“コピー元シート”").Range("B9").Select Selection.Copy '←貼付け Worksheets(“貼付シート”).Range("B13", "B41", "B69", "B97", "B125", "B153", "B181").Select Selection.PasteSpecial Paste:=xlPasteFormulas '←4個の値をコピー Worksheets("“コピー元シート”").Range("B10").Select Selection.Copy '←貼付け Worksheets(“貼付シート”).Range("B15", "B43", "B71", "B99", "B127", "B155", "B183").Select Selection.PasteSpecial Paste:=xlPasteFormulas '←5個の値をコピー Worksheets("“コピー元シート”").Range("B11").Select Selection.Copy '←貼付け Worksheets(“貼付シート”).Range("B17", "B45", "B73", "B101", "B129", "B157", "B185").Select Selection.PasteSpecial Paste:=xlPasteFormulas End Sub

  • エクセル2000のVBAのcutメゾット

    エクセル2000でセルを他のセルの文字から検索し検索されたセルを特定の場所にコピーし貼り付けるのを空欄になるまで繰り返すVBAを作りました。 Dim a As Range Dim b As Long b = 1 Do Until Cells(2 + b, 5).Value = "" Cells(2 + b, 5).Select Set a = Range("B:B").Find(what:=Cells(2 + b, 5).Value) a.Select Selection.Copy Cells(2 + b, 8).PasteSpecial xlAll Cells(2 + b, 5).Select b = b + 1 Loop なんですが、これだとちゃんと起動するのに「copy」を「cut」に変更したら、「pastespecial」でデバックが発生し止まってしまいます。 どちらかというと、コピーより切り取りして貼り付けたい(んで、残ったセルを検索しメッセージボックスで表示出せたい)のですが、このVBAだとcutメゾットは使えないのでしょうか? また使えるのならば「pastespecial」でなければ、何を使って貼り付ければよいのでしょうか?

  • エクセルVBA での繰り返し処理について

    エクセルVBA での繰り返し処理について 以下の作業を20回繰り返そうとしています(別シートから持ってきた値を「行列を入れ替えて」貼り付け)    Sheets("初期設定").Select Range("A6:C6").Select Selection.Copy Sheets(TS).Select Range("B4").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=True   「初期設定」シートの方は1行ずつ並んでいるので、「2回目」の「2行目」は   「 Range("A7:C7").Select」になり、   「TS」シートの20行後に貼り付けたいので、「2回目」の「5行目」は   「Range("B24").Select」 になります   これを、for ~ next を使い、以下のようにしてみましたが、上手くいきません。    For j = 6 To 26 For k = 4 To 384 Step 20 Sheets("初期設定").Select Range(Cells(j, 1), Cells(j, 3)).Select Selection.Copy Sheets(TS).Select Cells(k, 2).Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=True Next k Next j  1分程度ループし続けた後、「初期設定」シートの最終行だけが貼り付けられてしまいました。 どこをどのように直せばいいのかお教えください。 よろしくお願いいたします。

  • エクセルVBAの保存

    毎月異なった新しいエクセルファイルに同じような加工を施すため、VBAを書きました。対象はActivesheetとしています。 で、質問は、この新しいエクセルファイルの標準モジュールにいちいちこのVBAをコピーペーストせずに実行する方法です。 きっと何かあるとは思うのですが・・・・。 VBAは次のような簡単なものです。 Sub 加工1() Dim e As Integer, s As String, n As String e = Range("A4").End(xlDown).Row s = Replace(Mid(Range("A2"), 8, 5), "年", "") & "-" n = Replace(Mid(Range("A2"), 19, 5), "年", "") & "-" Range("A1:C2").MergeCells = False Columns("B:B").Select Selection.Insert Shift:=xlToRight Columns("A:A").Select Selection.Insert Shift:=xlToRight Columns("C:C").Select Selection.NumberFormatLocal = "G/標準" Range("B3").Select Selection.AutoFill Destination:=Range("B3:C3"), Type:=xlFillDefault Range("B3").Select ActiveCell.FormulaR1C1 = "商品番号1" Range("C4").Select ActiveCell.FormulaR1C1 = "=LEFT(RC[-1],10)" Range("C4").Select Selection.AutoFill Destination:=Range("C4:C" & e), Type:=xlFillDefault Range("A3").Select ActiveCell.FormulaR1C1 = "抽出年月日" Range("A4").Select ActiveCell.FormulaR1C1 = s & n & 1 Range("A4").Select Selection.AutoFill Destination:=Range("A4:A" & e), Type:=xlFillDefault Rows("3:3").Select Selection.Insert Shift:=xlDown Range("B1:E1").MergeCells = True Range("B2:E2").MergeCells = True ActiveSheet.Name = "提出用" End Sub

  • エクセルVBAでのオートフィル

    Range("A1").Select Selection.AutoFill Destination:=Range("A1:A11"), Type:=xlFillCopy Range("A1:A11").Select 上記のスクリプトで、 Rangeのところを 隣あった列の最下段まで と、言うような指定はどうすればいいのでしょうか? B列の最後の行と隣り合ったセルまで、 A1のセルをコピーしたい場合です。

  • エクセルVBAのコピーがうまく出来ません

    セルD3:D101に楽天SPのRSS数式の数値が表示されてきます。 3分おきにマクロを実行させ右側の列に順次データを追加していきたいのですが以下のマクロでは3分後にはセルE3:E101へ数式を含む全てがコピーされてしまい値だけをコピーできません。たぶん構文のCopy Cells(3, c + 1)を変更しなくてはいけないと思い試行錯誤したのですが分かりません。 どなたか教えてください。 Private Sub Macro1() Dim nextTime As Date Dim c As Date Dim d As Date Range("D3:D101").Select Selection.Copy c = Range("iv3").End(xlToLeft).Column d = Range("D65536").End(xlUp).Row Range(Cells(3, "D"), Cells(d, "D")).Copy Cells(3, c + 1) Columns("D:D").Select Application.CutCopyMode = False nextTime = Now() + TimeValue("00:03:00") Application.OnTime nextTime, "Macro1

  • VBAが突然使えなくなったのは何故でしょうか?

    Windows8.1で、Office2010を利用しています。 エクセルのVBAを使って以下のようなコピーを行っているのですが ある日、突然、『貼り付ける位置を指定してください。』という メッセージが画面下に出るようになり、コピーできなくなりました。 i=10:w=64 Range(Cells(i, 1), Cells(i, 8)).Select Selection.Copy Range(Cells(w, 1), Cells(w, 8)).Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _      SkipBlanks:=False, Transpose:=False 何が問題なのでしょうか? ちなみに、WindowsUpdateの関連で、VBAがエラーになったことがあるので Excel8.0フォルダの中に入っているmsforms.exdファイルを一旦削除してから 再起動し、再度、上記のコピー作業を試みましたが メッセージが出てしまい、コピーはできませんでした。 よろしくご指導願います。

  • ExcelのVBAです。

    先日お答えいただいたVBAなんですが、 Sub Macro1() Sheets("Sheet1").Select Range("A1").Select Range(Selection, Selection.End(xlDown)).Select Selection.Copy Sheets("Sheet3").Select Range("A1").Select ActiveSheet.Paste Selection.End(xlDown).Select Application.CutCopyMode = False Do Selection.Insert Shift:=xlDown Selection.End(xlUp).Select Loop Until ActiveCell.Address = "$A$1" End Sub というのを使用させて頂いてます。 これを、コピー先のものを上書きせずに、コピーされたものがあれば表示させるといった風に出来ないでしょうか? 例  A    A 1 a 1 2 b → 2あ 3 c 3 右から左に一行間隔で別シートに表示させたいのですが、  A  1 a 2 あ 3 b 4 5 b という結果にしたいのです。 拙い文章で申し訳ないのですが、教えて頂きたいです。