質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

1回答

437閲覧

[VBA初心者] 複数のエクセルブックから、一つの新規シートにまとめる際に、値のみの貼付けができない

ekuseru_kun

総合スコア1

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2022/07/21 13:31

編集2022/07/21 13:42

前提

VBAで、あるフォルダに格納されている複数のブックの特定のシート(同一名・同一構造)からデータを抜き出し、
別のブックのシートに順次貼り付けて、それらを用いて集計を行いたいと考えております。

書式や文字列はうまく貼り付けられているようなのですが、
コピー元のシートで数式を含んでいるセルは、数式だけが貼り付けられて参照エラーとなり、値が貼り付けられていません。

実現したいこと

  •  コピー元のシート数式ではなく、値のみを貼り付けたい

試したこと

VBA

1Sub 複数のシートを一つのブックにまとめる() 2 Dim A 3 'フォルダ内のブック名を取得 4 A = Dir(ThisWorkbook.Path & "\対象シートフォルダ\*") 5 Do While A <> "" 6 'ブックを開く 7 Workbooks.Open ThisWorkbook.Path & "\対象シートフォルダ\" & A 8 With ActiveWorkbook 9 'シートをコピーして取得 10 .Worksheets("対象シート").Copy After:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count) 11 'シート名をブック名に変更 12 ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count).Name = .Name 13 'On Error Resume Next 14 15 .Close False 'ブックを閉じる 16 End With 17 A = Dir() '次のブック名を取得 18 Loop 19End Sub 20

値のみを貼り付けるためには、PasteSpecial Paste:=xlPasteValuesなどを用いれば良さそうということは調べました。
以下のブロックを含め、いくつかパターンを試しました。しかし、私の知識・経験不足で、どのように組み込めばよいかが分かりませんでした。

VBA

1 .Worksheets("対象シート").Copy After:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count).PasteSpecial Paste xlPasteValues

補足情報(バージョンなど)

Windows11, Excel2021

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

otn

2022/07/21 14:16

マクロの記録で、やりたい操作を記録して、どう書けばいいか調べましょう。
guest

回答1

0

ベストアンサー

.Worksheets("対象シート").Copyというのはシートのコピーです。シートのコピーでは値のみ貼り付けはできません。

新規シートを追加(Worksheets.Add)する。
貼り付け元シートのデータをコピーする。
上記の新規シートに値貼り付けをする。
という手順が必要です。

vba

1Sub 複数のシートを一つのブックにまとめる() 2 Dim A As String 3 'フォルダ内のブック名を取得 4 A = Dir(ThisWorkbook.Path & "\対象シートフォルダ\*") 5 Do While A <> "" 6 'ブックを開く 7 With Workbooks.Open(ThisWorkbook.Path & "\対象シートフォルダ\" & A) 8 '新規シートを追加 9 Dim NewWS As Worksheet 10 With ThisWorkbook 11 Set NewWS = .Worksheets.Add(after:=.Worksheets(.Worksheets.Count)) 12 End With 13 14 '対象シートの値をコピーして新規シートに値貼り付け 15 .Worksheets("対象シート").UsedRange.Copy 16 NewWS.Cells(1).PasteSpecial Paste:=xlPasteValues 17 18 'シート名をブック名に変更 19 NewWS.Name = .Name 20 21 .Close False 'ブックを閉じる 22 End With 23 A = Dir() '次のブック名を取得 24 Loop 25End Sub

投稿2022/07/21 17:51

hatena19

総合スコア33715

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ekuseru_kun

2022/07/21 22:57

ありがとうございます!!解決致しました! `NewWS.Cells(1).PasteSpecial Paste:=xlPasteFormats`も加えてみて、書式も反映できるようにしてみました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問