【VBA】シートのコピー ~ 値に直す

このQ&Aのポイント
  • VBAのコードについてご教示いただけませんでしょうか。
  • VBA初心者がシートをコピーして値に変換する方法を教えてください。
  • 新規シートにコピーされた数式を値に変換するVBAコードについて教えてください。
回答を見る
  • ベストアンサー

【VBA】シートのコピー ~ 値に直す

大変お世話になります。 VBAのコードについてご教示いただけませんでしょうか。 ■やりたいこと -------------------------------------------------------------------------------- (1) 【原紙】Sheetを、同ブック内の新規シートへコピー (2) 新規シートのシート名を、[セル:B5]の値に変更 (3) 新規シートにコピーされてきた数式を値に変更 ■作成してみたコード -------------------------------------------------------------------------------- Sub SheetCopy1() Worksheets("【原紙】Sheet").Copy Before:=Worksheets("【原紙】Sheet") ActiveSheet.Name = Range("B5").Value Cells.Select Selection.Copy Selection.PasteSpecial Paste:=xlPasteValues Application.CutCopyMode = False End Sub -------------------------------------------------------------------------------- 本日初めてVBAに触れた者が、見よう見まねで『■やりたいこと』を並べたコードのため、やはりエラーになってしまいます。 上記は、どこをどう直せばよろしいでしょうか。 もしくは、そもそも間違っておりますでしょうか。 ご教示いただきたく、何卒よろしくお願いいたします。 ◎もし可能でしたら、併せてご教示ください◎ ---------------------------------------------------------------------------- (1)の動作をさせるために、【原紙】Sheetの任意の場所に”ボタン”を設置するのですが、新規シートにもコピーされるため、そのコピー側のボタンを削除できたら…とも考えていますが、そういう動作も可能でしょうか。

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

  • ベストアンサー
  • kkkkkm
  • ベストアンサー率65% (1615/2454)
回答No.4

ActiveSheet.Shapes.Range("Z:AR").Delete Shapesは図形等のオブジェクトの時に使います。 列でしたら ActiveSheet.Range("Z:AR").Delete もしくは(Columnsは列のことです) ActiveSheet.Columns("Z:AR").Delete 先の回答ですがボタン一個だけでしたら ActiveSheet.Shapes("Button 1").Delete なのですが、複数の場合に ActiveSheet.Shapes.Range(Array("Button 1", "Button 2")).Delete とかになります。マクロの記録でやると一個だけでも多少違いますが先の回答のようになります。滅多にやらないことは自分で書くより記録して多少直すことが多いので、先の回答の削除部分もその要領で取り込んでいます。

pomu_tsumu
質問者

お礼

kkkkkm 様 大変お世話になります。 回答No.6 と併せて拝見しました。 ご教示いただいた通りに実行し、無事に解決することができました。 モジュールについても、全く知らずに実行しておりました。 ご説明で大変よく理解できました。 重ね重ね、ありがとうございました。 今後も何かと質問させていただくかと思いますので、お時間許されましたら是非よろしくお願い申し上げます。

その他の回答 (6)

  • masnoske
  • ベストアンサー率35% (67/190)
回答No.7

■やりたいこと -------------------------------------------------------------------------------- (1) 【原紙】Sheetを、同ブック内の新規シートへコピー (2) 新規シートのシート名を、[セル:B5]の値に変更 (3) 新規シートにコピーされてきた数式を値に変更 これを次のように考えてみてはどうでしょうか。 (1)【原紙】Sheetの前に新規シートを追加 (2) 新規シート名を、【原紙】Sheetの[セル:B5]の値に変更 (3)【原紙】Sheetの全セルを新規シートに値で貼り付け これならば、ボタンはコピーされません。

pomu_tsumu
質問者

お礼

masnoske 様 お世話になります。ご回答、ありがとうございます。 仰る通り、この方法ならボタンはコピーされずに済みますね。 今回はVBAで対応したかったため、他の方にご教示いただいたコードで無事に解決することができました。お騒がせしました。

  • kkkkkm
  • ベストアンサー率65% (1615/2454)
回答No.6

なお、エラーになった原因はたぶんコードをシートモジュールに記載したためだと思います。標準モジュールに記載するとエラーにはならないと思います。 シートモジュールに記載すると Cells.Select(これだけに関わらずシートの指定のないセルの指定は全て) はコードが記載されているシートにたいして行われるのですが、Selectはアクティブではないシート(この時点でアクティブシートは新規シートです)では実行できずエラーになります。 なので ActiveSheet.Cells.Selectにし、現在アクティブなシートをSelectの対象として指定することでエラーを回避します。 一方、標準モジュールに記載されたコードのシートの指定のないセルの指定は、全てアクティブなシートを対象にします。 これも気を付けないと、シート1で実行したいコード (シートの指定なしセル指定あり)を、シート1以外がアクティブな状態で実行すると、アクティブなシート(たとえばシート2)のデータがぐちゃぐちゃになったりします。

  • mdmp2
  • ベストアンサー率55% (438/787)
回答No.5

NO.2 です。 デバッグで、どの行(コード)でエラーになったか、どのようなメッセージが出たか、教えて下さい。 B5 に入力したシート名を単純なものにして試行してください。

pomu_tsumu
質問者

お礼

mdmp2 様 大変お世話になります。 引き続きのご回答、誠にありがとうございます。 エラーの原因ですが、標準モジュールへ記載すべきところをシートモジュールへ記載してしまっていたことでした。大変お騒がせしました。 ご教示いただきましたデバック、活用しております。 またいろいろと質問させていただくと思いますので、お時間許されましたら是非よろしくお願い申し上げます。

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

コピー元のシート名をSheet1とする例(存在不存在のチェックは略) できるだけシート名をWorksheets(XXX)で、具体的に記述しました。 Sub SheetCopy1() Worksheets("Sheet1").Copy Before:=Worksheets("Sheet1") sn = Worksheets("Sheet1").Range("B5").Value ActiveSheet.Name = sn Worksheets(sn).Cells.Copy Worksheets(sn).Range("A1").PasteSpecial Paste:=xlPasteValues Application.CutCopyMode = False End Sub 参考 シート名の命名ルールに注意。 https://ameblo.jp/test-engineer-kaz/entry-12324800508.html Excel2010のセルシート名につけられる名前の制限

pomu_tsumu
質問者

お礼

imogasi 様 お世話になります。 前日の質問に引き続き、ご回答ありがとうございました。 具体的なシート名の記載も、シート名のルールも、大変勉強になりました。 これから少しずつ、マクロについて勉強してまいります。 また機会がございましたらよろしくお願いいたします。

  • mdmp2
  • ベストアンサー率55% (438/787)
回答No.2

Excel 2019 で試しました。 【原紙】Sheet の前にB5 に記述した名前のシートが作成されました。 コードには問題がないと思います。 B5 に全角で シート1 と記述し、他のセルはすべて空白で試しました。 可能性としては、B5 に入力した名前がシート名として使えないとか、各セルに記述された内容に問題があるとか、 マクロをデバッグモードで実行してみてください。どのコードで引っかかるかわかります。 デバッグモードで実行するには、開発タブのコードグループにある、Visual Basic をクリックしてエディターを開き、 マクロが記述されたモジュールを開き、 マクロの先頭、Sub SheetCopy1() をクリックして、 デバッグタブの「ステップイン」をクリックします。クリックするたびに1行ずつコードが実行されます。 問題がある場所で何らかのメッセージが出ます。

pomu_tsumu
質問者

補足

mdmp2 様 大変お世話になります。この度はご教示いただきまして、ありがとうございます。 動作の確認もしていただき、誠に恐縮です。 『デバッグモード』の実行での確認の件、大変勉強になりました。 ありがとうございました。 ◎以下で追加の質問を入れさせていただいた『ボタン削除』の件ですが、 『ボタン』ではなく『列[Z~AR]』を範囲指定して削除する方法を思考錯誤中です。 ( Range("Z:AR").Delete と追記してデバックモードで確認しましたが、  どこの、どういうエラーかが理解しきれませんでした) もしよろしければで結構ですので、上記につきましてもご教示いただけますと大変ありがたく存じます。 何卒よろしくお願い申し上げます。

  • kkkkkm
  • ベストアンサー率65% (1615/2454)
回答No.1

以下でいけると思いますよ。ボタンはフォームのボタンで Button 1は「検索と選択」の「オブジェクトの選択と表示」で確認してください。 Sub ボタン1_Click() Worksheets("【原紙】Sheet").Copy Before:=Worksheets("【原紙】Sheet") ActiveSheet.Name = Range("B5").Value ActiveSheet.Cells.Select Selection.Copy Selection.PasteSpecial Paste:=xlPasteValues Application.CutCopyMode = False ActiveSheet.Shapes.Range(Array("Button 1")).Delete End Sub

pomu_tsumu
質問者

補足

kkkkkm 様 大変お世話になります。 こちらでもご教示いただきまして、ありがとうございます。 ボタンの件もありがとうございます。 ちなみにですが… 『ボタン』ではなく、連続する複数列[Z~AR列]を指定して削除することは可能ですか? 値に置換部分以下を ----------------------------------------------------------------- ActiveSheet.Cells.Select Selection.Copy Selection.PasteSpecial Paste:=xlPasteValues Application.CutCopyMode = False ActiveSheet.Shapes.Range("Z:AR").Delete End Sub ----------------------------------------------------------------- へ置換してみましたがうまくいきませんでした…。 もしよろしければ、引き続きのご教示を何卒よろしくお願いいたします。

関連するQ&A

  • セルをコピーしてシート名を取得 【VBA】

    こんばんわ。 エクセルのVBAについて、どうしてもわからなくなったので質問させて下さい。 マクロの内容は 1.一番前のシート(名前はSheet1ではありません。)のボタン35をクリック 2.シートをコピーして3番目に置く。 3.値にする。 4.シート名をセルの"DE16"に入っている値にする。 5.ボタンを消す。 以下の内容になりましたが、名前のところでデバックがおこります。 Sub ボタン35_Click() Worksheets(1).Select Worksheets(1).Copy After:=Sheets(3) Cells.Select Selection.Copy Selection.PasteSpecial Paste:=xlPasteValues Worksheets(3).Select Worksheets(3).Name = Range("DE16").Value ActiveSheet.Shapes("Button 11").Select Selection.Delete Application.CutCopyMode = False End Sub どなたかお知恵を貸して下さい。

  • VBA初心者です。値を貼り付け について質問です。

    VBA初心者です。 値を貼り付け について教えてください。 Sub test() With Workbooks("A.xls").Worksheets("sheet1") .Range("A1").Copy Workbooks("Bxls").Worksheets("sheet1").Range("B2") .Range("A2").Copy Workbooks("B.xls").Worksheets("sheet1").Range("B4") End With End Sub コピーする方に計算式が入っているので 値を貼り付け したいのですが、どうすればいいのでしょうか? PasteSpecial Paste:=xlPasteValues を使ったらよいというところまではわかったのですが・・・。 教えてください!よろしくお願いします!

  • VBAでコマンドボタン操作で他のシートにコピーする方法を教えてください。

    エクセルのVBAでコマンドボタン操作でセルの値を他のシートのセルへコピーしたいのですが、やり方がわかりません。 自分なりに作ってみたのですが何が悪いのか教えてください。 Private Sub CommandButton1_Click() ' Range("A1").Select Selection.Copy Sheets("Sheet2").Select Range("A1").Select Selection.End(xlDown).Select ActiveCell.Offset(1, 0).Select ActiveCell.PasteSpecial Paste:=xlPasteValues Application.CutCopyMode = False End Sub Private Sub が怪しいのですが対処もわかりません。 ちなみにsheets2のA1には値がはいっています。 よろしくおねがいします。

  • EXCELで値だけを別シートへコピーVBA

    EXCELの表でテーブルにしてある値だけを 別シートへコピーするVBAの記述が知りたいです 例えば Sheet1の ”テーブル” で作られている A1:D4の表があるとして それを Sheet2のA1へ ”値” だけコピーしたいのですが ちなみに自分の作ったコードですが sub 別シートコピペ() sheet1.range("a1:d4").CurrentRegion.copy sheet2.range("a1") end sub でやったのですが REFのオンパレードで全然コピーできないです どなたか教えていただけませんか? ポイントはテーブルで作られているものの 値だけを シート2へ貼るコードを知りたいです。 よろしくお願いいたします

  • 【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

  • 複数シートをループさせてマクロを簡素化したい

    win7 Excel2007 でマクロ作成中の初心者です。 シート数の変動する複数シートの特定範囲を一枚のシートに右列方向に、値を貼り付けたいです。 自動記録でコード作成しましたが、もっと簡素化して軽くしたいです。 シートに対するループ等の作成ができません。どうかご指導お願いします。 Sub 勤怠最終データ作成() Worksheets(1).Select '1番左のシートを選択 ActiveSheet.Unprotect Range("B29:BM60").Select '複写範囲はすべて同じ Selection.Copy Sheets("総括").Select '値の貼り付けシートはすべて同じ Range("A2").Select '値の貼り付け先 Selection.PasteSpecial Paste:=xlPasteValues ’-------------------------------------- Worksheets(2).Select '2枚目のシートを複写 ActiveSheet.Unprotect Range("B29:BM60").Select Selection.Copy Sheets("総括").Select 最終セルの選択 '値の貼り付け先 Selection.PasteSpecial Paste:=xlPasteValues ’-------------------------------------- Worksheets(3).Select '3枚目のシートを複写 ActiveSheet.Unprotect Range("B29:BM60").Select Selection.Copy Sheets("総括").Select 最終セルの選択 Selection.PasteSpecial Paste:=xlPasteValues ’-------------------------------------- Worksheets(4).Select '4枚目のシートを複写 ActiveSheet.Unprotect Range("B29:BM60").Select Selection.Copy Sheets("総括").Select 最終セルの選択 Selection.PasteSpecial Paste:=xlPasteValues 以下省略 End Sub

  • 【Excel VBA】シートコピー時、マクロコードはコピーしたくない

    ws.copy Before:=Workbooks(File).Sheets(1) Windows(File).Activate Cells.Select Selection.copy Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False 上記コードで、シートのコピー・貼付を行っていますが、 コピー元シートのコードも引き継がれてしまいます。 引き継がれないようにコピーしたいのですが、可能でしょうか? 可不可について、 可能ならばそのやり方(コード)を教えていただけないでしょうか? よろしくお願いします。

  • VBAで値だけコピー

    EXCEL VBAで別ファイルの値をコピーして貼り付けをしているのですが、セルの中の一部のみを貼り付けしたいと思いますが、 どのようにしたらいいのでしょうか? 関数では取り出すことができたのですが、できればVBAの中で処理できればと思っています。 =IFERROR(MID(Z2,FIND("6",Z2),FIND(" has",Z2)-FIND("6",Z2)),"") やりたいこと 1.左から見て6~空白までの値のみを貼り付けしたい 2.エラーの時は空白にしたい Sub SO_Copy() Dim ws As Worksheet Set ws = Worksheets("Sheet1") Dim FilePath, FileName As String 'C8&C9にファイルパス/ファイル名を入力 FilePath = ws.Range("C8").Value & "\" & ws.Range("C9").Value FileName = ws.Range("C9").Value Workbooks.Open FilePath 'Z2~コピーして、"メール送信.xlsm"のD11以降に値だけ貼り付け Range("Z2", Range("Z2").End(xlDown)).Copy Windows("メール送信.xlsm").Activate Range("D11").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Workbooks(FileName).Close End Sub

  • 異なるワークシートに値を貼り付けるマクロ

    数式の入ったワークシートから値のみをコピー&ペーストしたいのですが、うまくいきません。 どこにxlPasteValuesを入れたらいいのでしょうか?よろしくお願いします。 Sub copypaste() Dim bk As Workbook Set bk = Workbooks("‘貼り付け先.xlsm") Workbooks("Book1.xlsm").Worksheets("Sheet1").Range("B2:F6").Copy bk.Worksheets("Sheet1").Range("B2:F6")

  • エクセル2010 マクロで値のみコピー

    こんばんは、エクセル2010を使っています。 マクロでデータを値のみをコピーしたいのですが、うまくいきません。 文は 以下の様なものです。 Sub ボタン1_Click() Worksheets("Sheet4").Range("e1").Copy Worksheets("sheet2").Range("b1").PasteSpecial Paste:=xlValues End Sub マクロの画面を閉じようとした時に、Pasteの部分が選択され  コンパイルエラー 修正候補:ステートメントの最後 と言うダイアログボックスが出てしまいます。 ご存知の方教えて頂けないでしょうか、よろしくお願いします。 ※ ちなみに Worksheets("Sheet4").Range("e1").Copy Worksheets("sheet2").Range("b1")  ならちゃんとコピーされるのですが、コピー元の数式がコピーされるので、値のみをコピーしたいのです。

専門家に質問してみよう