• 締切済み

EXCEL VBA コピー貼り付けについて

はじめまして。 エクセルのマクロの記録でマクロ作成してますが、希望通りに張り付け出来ずにいます。 (1)張り付けた場所に関数がコピーされない。 (2)最終行にコピーする方法が解らない。 (3)印刷範囲の張り付けできない 皆様お忙しい中恐縮で申し訳ありませんがご教授お願い致します。 Sub コピー() ' Range("A1:AR68").Select Selection.Copy  Range("A69").PasteSpecial xlPasteAll 「最終行へ変更したい」 ActiveSheet.Paste 「関数も含めて貼り付けたい」  ・「印刷範囲をコピーしたい」   End Sub

みんなの回答

回答No.3

>(1)張り付けた場所に関数がコピーされない。  これは   「何も」貼り付けされない   「値で」貼り付けされる  のどちらとも読めるのですがどちらでしょうか?  後者も状況によってはあり得ない話ではないのですが。 >(3)印刷範囲の張り付けできない 一般的な表現としては、印刷範囲は設定するもの(自動的にを含む)で、貼り付けするものではないので、意味を図りかねます。 (それともページ設定ダイアログの印刷範囲欄にセルアドレス文字が貼り付け出来ない(グレーアウトしている)という意味でしょうか?) それと >Range("A69").PasteSpecial xlPasteAll >ActiveSheet.Paste ↑ は同じことをしているように思いますが、何か意味があるのでしょうか?

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

>(1)張り付けた場所に関数がコピーされない。 Pastespecialは 参考 https://www.moug.net/tech/exvba/0050104.html 「形式を選択して貼り付け」に対応するコードだが、 xlPasteAllを指定するとセルの関数もコピーされるはず。 ーー ただしセル範囲について、注意しないとおかしなことになる.場合があるかもしれない。絶対番地指定していて、そのまま貼り付けされ、コピー後にコピー元のデータが変わった場合など。 ==== >(2)最終行にコピーする方法が解らない。 最終行ーー>「最終行の次」の意味として、 例データ A1:B6として 計数 コード 11 a 12 d 13 c 36 13 c Sub test02() Set cl = Range("A1000").End(xlUp) Range("A1:B6").Select Selection.Copy cl.Offset(1, 0).PasteSpecial xlPasteAll ActiveSheet.Paste End Sub ーー 結果 A7:B12 計数 コード 11 a 12 d 13 c 36 13 c >(3)印刷範囲の張り付けできない これはどういうことを言うのかな? A1:B6を範囲指定して印刷したとき、終了後、A7:B12を範囲指定して印刷するが、その印刷範囲を次の印刷範囲の印刷で、指定しなくても?A7:B12に設定してくれということか? 初心者にはむつかしい話だと思うの(今までWEBでも見たことない)で、考えないほうがよかろう。 コピー元をSelectした段階で Sub test03() MsgBox Selection.Rows.Count MsgBox Selection.Columns.Count End Sub のような、Selection.Rows.Countなどのコードで範囲の行数、列数を採り、貼り付け先(左上隅セル)をもとにして、 コピー先での印刷範囲を計算することはできるが、そんなことをのぞんでいるのかな。 Sub test04() Range("A1:B6").Select Selection.Offset(6, 0).Select End Sub 実のところ、質問の意味が取れてない。

回答No.1

質問の内 (1)は、貴コードを実行して関数をコピーできましたので原因究明できませんでした。 (2)については「Cells(1, 1).End(xlDown).Row」を使えばできます。ただし、途中に空白行があるとその上の行を示すことになります。 (3)については基本的に印刷範囲は1つしか指定できないので、元の範囲をクリアし改めて、新しい範囲を指定することになります。 ExcelのVBAについては、インターネットでたくさんの説明が出ていますので、ご自分で探されると勉強になると思います。 「ExcelVBA 最終行の取得」「ExcelVBA 印刷範囲の指定」など普通の言葉で検索できます。 Sub コピー() ' '元データの最終行を求める 最終行 = Cells(1, 1).End(xlDown).Row '元データをコピーし最終行の次の行以下に貼り付ける Range(Cells(1, 1), Cells(最終行, 44)).Copy Cells(最終行 + 1, 1).PasteSpecial xlPasteAll '元データに印刷範囲が設定されている場合はその範囲を確認したうえで新しい印刷範囲を計算し設定する。 If ActiveSheet.PageSetup.PrintArea <> vbNullString Then: '印刷範囲が設定されていれば 範囲 = ActiveSheet.PageSetup.PrintArea: '印刷範囲を取得 新範囲 = "$A$31:$C$60": '新しい印刷範囲を計算する ActiveSheet.PageSetup.PrintArea = "": '元の印刷範囲をクリアする ActiveSheet.PageSetup.PrintArea = 新範囲: '新しい印刷範囲を設定する End If End Sub

関連するQ&A

  • マクロでコピー貼り付けやってみたいのですが。

    マクロの初心者です。Dim で宣言してやりたいと思っています。 既存のExcelの機能で出来ないことはないと思いますが、敢えて、マクロででないか。 やってみたいと思っています。 やりたいこと等について 1 sheet1のE2:J1109の範囲のデータをコピーしての別sheet2のE3:J1110の範囲に貼り付けたい。 2 その時に最終行を取得してコピーをするとしたら、どんなコードが必要なのか 3 最終行の取得のコードの書き方が分からない 4 ネットで下記のような(一部変更)に作ってみたが、これで良いのでしょうか、わからない。 以上のことを答えて頂けませんか。よろしくお願いします。 Sub テスト() Dim range1 As Range Set range1 = Range("E2:J1109") range1.Copy ActiveSheet.Paste Destination:=("sheet1").Range("E2:J1109") ActiveSheet.Paste Destination:=("sheet2").Range("E3:J1110") Application.CutCopyMode = False End Sub

  • シート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行だけコピーできないでしょうか?

  • エクセル VBA 繰り返し コピー貼り付け

    以下を繰り返し作業をOffsetを使用して行いたいのですがどうすればいいでしょうか? Sheets("Sheet1").Select Range("A1:C1").Select のA1:C1以下へA1000:C1000ぐらいあります。 Sheets("Sheet2").Select Range("G1").Select は貼り付けたセル3つの数字の組み合わせで公式に使う計算期間がまちまちですので公式を張り付けたり出来ません。 D1の解を heets("Sheet1").Select Range("D1").Select に貼り付けてA1:C1以下1000までの結果を評価出来るようにしたいのですが! ' Macro1 Macro Sheets("Sheet1").Select Range("A1:C1").Select Selection.Copy Sheets("Sheet2").Select Range("D1").Select ActiveSheet.Paste Range("G1").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet1").Select Range("D1").Select ActiveSheet.Paste Range("A2:C2").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet2").Select Range("D1").Select ActiveSheet.Paste Range("G1").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet1").Select Range("D2").Select ActiveSheet.Paste Range("A3:C3").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet2").Select Range("D1").Select ActiveSheet.Paste Range("G1").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet1").Select Range("D3").Select ActiveSheet.Paste End Sub よろしくおねがいします。

  • エクセルVBAでコピーすると行の高さが低くなる

    いつもお世話になってます。 エクセル2003のVBAで、セルの範囲を指定してコピーすると行の高さが低くなってしまいます。その他の書式は、変化せずうまくコピーできています。以下がプログラムです。 Sub copy_hyou() Worksheets("sheet1").Activate Range("A1:K24").Copy 'セルA1からK24をコピーします。 Range("A25").Select 'A25からペイストします。 ActiveSheet.Paste End Sub どう直せば、行の高さもコピーできるでしょうか? お休み中すみませんがよろしくお願いいたします。

  • コピーと貼付

    既存のデータはA~Y列まで入力されています。 新規のデータはA~W列までとなっています。 既存のX行には日付をいれてあり、新規データのX列に次月の1日(ついたち)を入力したい。 とりあえずは、1行下に日付を入力したマクロを組んだのですが、その後50行前後もコピーし貼付したいのですが、範囲の選択がうまく出来ません。 途中のセルから最終行のセルの範囲選択のマクロを教えてもらえないでしょうか。 ※Y列はダブルクリックコピーで問題ないので大丈夫です。 例   A列・・・・・・    X列      Y列(検索の関数が入っています) 1  ABC・・・・・・   2011/6/1    1    ※既存のデータ 2  DDD・・・・・・   2011/7/1         ※新規データの1列目 3  FFF・・・・・・   (      )                4  GGG・・・・・・   (      ) 5   ・ 6   ・ 7   ・ 8   ・ 50 ZZZ・・・・・・   (       ) 新規の2列目以降に、新規で作成した日付をコピーし貼付したい。 上記までのマクロを参考に送ります。 教えて下さい。 Sub test() Dim MaxRange '最終行番号 MaxRange = Range("X3").End(xlDown).Row '最終行の設定 Range("X3").Select Selection.End(xlDown).Offset(1, 0).Select 'X列の最終行+1行目を選択 ActiveCell.FormulaR1C1 = "=EDATE(R[-1]C,1)" '同セルに関数入力 Range("X" & MaxRange - 1).Copy '書式の変更(変更前の最終行よりコピー・貼付) Range("X3").Select Selection.End(xlDown).Offset(0, 0).Select Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False Range("X3").Select '追加したセルの関数を値に変更 Selection.End(xlDown).Offset(0, 0).Select Selection.Copy Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False 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

  • 図形のコピーとコピー先のセル・行幅の設定について

    ユーザーフォームで「シートの追加」ボタンを押と、新しいシートが挿入されるという設定です。 このとき、フォーマットとなる表や文字は Range("A1", "CA56").Select Selection.Copy Sheets.Add.name = "二枚目のシート" ActiveSheet.Range("A1").Select Selection.PasteSpecial Paste:=xlPasteAll を使い、貼り付けることが出来ました。てっきりxlPasteAllで、図もコピーできると思っていたら、 吹き出しや、楕円等のエクセルのオートシェイプ機能を使って作った図形が一緒にコピーできません。 図形は20個ほどあり、同じ位置にすべて貼り付けたいと思っています。そもそも無理なのでしょか?お力を貸してください。 またコピー先のシートのセルの幅と行の幅がコピー元と変わってしまいます。 細かい設定をすることは可能でしょうか?よろしくお願いします。

  • エクセルVBAの貼付けについて

    エクセルVBAの貼付けについて シートAとBがあって、シートBの1~7列をコピーし、シートAの最終行に貼り付ける方法を教えて下さい。 下記のように書いてみたのですがダメでした。 Sheets("B").Select Rows("1:7").Select Selection.Copy Sheets("A").Select With Range("A1").End(xlDown).Offset(1, 0) .ActiveSheet.Paste End With

  • コピー後に値のみ貼り付け エクセル、VBAの記述について

    マクロ初心者です。 エクセルで選択範囲を指定後コピーし、 自動的に別のシートの末尾に貼り付けられるようにしたのですが、 この内容のまま「貼り付け」を「値のみ貼り付け」に訂正する場合 どのように変更すればいいのか、教えてくださると嬉しいです。 宜しくお願いいたします。 Sub 選択範囲をコピー後、指定シートの末尾に貼り付け Worksheets("sheet1").Activate Range("b11:I17").Copy Workbooks("book2.xls").Worksheets("Sheet1").Activate 行 = Range("B1").CurrentRegion.Rows.Count + 1 ActiveSheet.Paste _ Destination:=Workbooks("book2.xls").Worksheets("Sheet1").Range("B" & 行) End Sub

  • 値の貼り付け

    Range("A1").Copy Range("B2").PasteSpecial Paste:=xlPasteAll, _ Operation:=xlPasteSpecialOperationNone 上記の値の貼り付けを行うプログラムがあったときに これを一行にまとめることは出来ますか? Range("A1").Copy Range("B2").PasteSpecial Paste:=xlPasteAll, _ Operation:=xlPasteSpecialOperationNone このように書くとエラーになってしまいます。 PasteSpecialがある時は一行にならないのでしょうか?

専門家に質問してみよう