🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
VBA

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

Q&A

解決済

2回答

2294閲覧

VBA 新規ブックに指定範囲のデータを転記する方法

begginer_class

総合スコア14

VBA

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

0グッド

1クリップ

投稿2021/01/08 01:59

やりたいこと

Book1の2行目のデータを、新規追加したBookに転記したい

試したこと

vba

1Set newWb = Workbooks.Add 2'ファイル作成 3newWb.SaveAs Filename:="C:\sample\test.xlsx" 4'データ書き込み 5ThisWorkbook.Worksheets("Sheet1").Range(Cells(2, 1), Cells(2, 46)) = ActiveWorkbook.Worksheets("Sheet1").Range(Cells(1, 1), Cells(1, 46)) 6

Workbooks.Addで新規追加したブックがアクティブになると思い、転記先の指定はActiveWorkbookとしています。
上記コードでファイル作成まではできています。

症状

「'データ書き込み」の下の行で以下のエラーが出ます。

実行時エラー'1004':
アプリケーション定義またはオブジェクト定義のエラーです。

色々なサイトを見ましたが、書き方で間違っているところが特定できませんでした。

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

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

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

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

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

m.ts10806

2021/01/08 02:10

いきなり書き込むのではなく「選択したデータを取得ができてるか」が先では?
begginer_class

2021/01/08 02:15

ThisWorkbook.Worksheets("Sheet1").Cells(2, 1) や、 ActiveWorkbook.Worksheets("Sheet1").Cells(1, 1) ではMsgboxを使用して取得できているのを確認しました。 範囲ごとMsgboxに出力する方法がわからずRange()では確認できていません。 Range()の中身を確認する方法をご教示くださいませんか?
guest

回答2

0

ベストアンサー

ここを

vba

1ThisWorkbook.Worksheets("Sheet1").Range(Cells(2, 1), Cells(2, 46)) = ActiveWorkbook.Worksheets("Sheet1").Range(Cells(1, 1), Cells(1, 46))

こんな感じで。どこのCellsか指定しないと
アクティブシートのCellsと判断されるので不整合が起きてエラーになります。

vba

1With ThisWorkbook.Worksheets("Sheet1") 2 .Range(.Cells(2, 1), .Cells(2, 46)) = ActiveWorkbook.Worksheets("Sheet1").Range(Cells(1, 1), Cells(1, 46)) 3End With 4

投稿2021/01/08 02:12

radames1000

総合スコア1925

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

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

begginer_class

2021/01/08 02:24

ありがとうございます。With句を使用して.Cellsとすることで転記ができるようになりました。
guest

0

Range の中のCells の使い方が間違っています。
Cellsはアクティブなシートのセルを表すので、
ThisWorkbook.Worksheets("Sheet1").Range(Cells(2, 1), Cells(2, 46))
はマクロを実行しているブックのシート1の中でアクティブなシート(新しいブックのSheet1)の2行1列から2行46列 という意味になります。

これを回避するにはCellsがどこに所属しているか書く必要があります。

Dim NewBook As Workbook '変数は宣言しましょう
Set NewBook = Workbooks.Add()
Dim sh As WorkSheet
Set sh = NewBook.Sheets(1)
Dim Range1 As Range
Set Range1 = Range(sh.Cells(2, 1), sh.Cells(2, 46))
みたいな感じです。

投稿2021/01/08 02:22

vann_2921

総合スコア190

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問