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

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

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

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

Q&A

解決済

1回答

333閲覧

別ブックに範囲内の数値をコピーしたい

shlly

総合スコア1

VBA

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

0グッド

0クリップ

投稿2022/05/17 16:22

マクロを記録しているブック(book1)のsheet(1)に、
別ブック(book2)のsheet(2)の指定範囲の数値をコピーしたいです。
直前の操作では、book2のsheet(1)がアクティブになっています。(別の操作で使用)
.value=.valueではエラーになってしまいます。(パターン1)
cellsはアクティブシートに対する操作とどこかで見たため、
ブック、シートから記述してもうまくいきません。(パターン2)
アクティブシートを切り替えするとうまくいきました。(パターン3)
rangeの中にcellsを使用しているのは、選択範囲を変更する変数を入れたいためです。
シート切り替えで処理速度を落としているように感じられるため、
可能ならパターン1、2のような.valueでつなぐ形式にしたいと考えており、
ご教示頂けましたら幸いです。

dim book1 as workbook
dim book2 as workbook
dim sh11 as worksheet
dim sh21 as worksheet
dim sh22 as worksheet

set book1=thisworkbook
application.sheetsinnewworkbook=2
set book2=workbooks.add
set sh11=book1.sheet(1)
set sh21=book2.sheet(1)
set sh22=book2.sheet(2)

'パターン1、エラー
book1.sh11.range(cells(1,2),cells(100,9)).value _
=book2.sh22.range(cells(1,2),cells(100,9)).value

'パターン2、エラー
book1.sh11.range(book1.sh11.cells(1,2),book1.sh11.cells(100,9)).value _
=book2.sh22.range(book2.sh22.cells(1,2),book2.sh22.cells(100,9)).value

'パターン3、実行可能
book2.sh22.activate
book2.sh22.range(cells(1,2),cells(100,9)).copy
book1.sh11.activate
book1.sh11.range(cells(1,2),cells(100,9)).pastespecial(xlpastevalues)
application.cutcopymode=false

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

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

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

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

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

guest

回答1

0

ベストアンサー

パターン1~3すべて私のところでは実行できませんでしたが…
とりあえずbook1.sh11とかってのがおかしいと思います。
book1はworkbookですが、そのプロパティやメソッドにsh11なんてものはありません。

一応以下は動作しましたので参考になれば。

VBA

1Public Sub test() 2 3 Dim book1 As Workbook 4 Dim book2 As Workbook 5 Dim sh11 As Worksheet 6 Dim sh21 As Worksheet 7 Dim sh22 As Worksheet 8 9 Set book1 = ThisWorkbook 10 Application.SheetsInNewWorkbook = 2 11 Set book2 = Workbooks.Add 12 Set sh11 = book1.Sheets(1) 13 Set sh21 = book2.Sheets(1) 14 Set sh22 = book2.Sheets(2) 15 16 sh11.Range(sh11.Cells(1, 2), sh11.Cells(100, 9)).Value _ 17 = sh22.Range(sh22.Cells(1, 2), sh22.Cells(100, 9)).Value 18End Sub 19

まぁこれだと。新しいbookつくって、そこから内容をセットしてるので
現在のシートの内容が消えるだけですが。

投稿2022/05/17 16:56

xail2222

総合スコア1497

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

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

shlly

2022/05/18 14:07

ご回答頂きましてありがとうございます。 実際のマクロでは、sh22にquerytables.addでデータを読み込み、それをsh11にコピー、 更にsh11他book1全体で計算させたデータをsh21にコピーするものですが、 ご教示頂いた通りに記述すると狙い通りの出力が得られました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問