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

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

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

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

Q&A

解決済

1回答

367閲覧

ワークブックAの指定領域をワークブックBの指定列の空いているセルの左から順にペーストされていくマクロを作りたい

KKKALLL

総合スコア1

VBA

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

0グッド

0クリップ

投稿2020/06/03 00:52

前提・実現したいこと

ワークブックAのシートAのB5:B7をコピーしワークブックBのシートBのF32列の一番右の埋まっているセルの一つ右隣にペースト(マクロを起動するたびに右隣のセルにペーストされていく様な)するマクロを作りたいです。

発生している問題・エラーメッセージ

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

該当のソースコード

' 処理高速化用:関数開始時に実行する処理セット Function startFunc() With Application .ScreenUpdating = False .EnableEvents = False .Calculation = xlCalculationManual End With End Function ' 処理高速化用:関数終了時に実行する処理セット Function endFunc() With Application .ScreenUpdating = True .EnableEvents = True .Calculation = xlCalculationAutomatic End With End Function ' コピー処理 Function book2bookCopy(srcSheet As String, srcRange As String, _ dstBook As String, dstSheet As String, dstRange As String) ' 処理高速化用:開始処理 Call startFunc With Workbooks.Open("ワークブックB") ' コピー ThisWorkbook.Worksheets(srcSheet).Range(srcRange).Copy .Worksheets(dstSheet).Range(dstRange).PasteSpecial _ xlPasteValuesAndNumberFormats ' コピー中状態を解除 Application.CutCopyMode = False ' 処理高速化用:終了処理 Call endFunc ' 保存して閉じる .Close True End With End Function ' テスト実行用 Function test() Call book2bookCopy("シートA", "B5:B7", "ワークブックB", "シートB", "Range(A1).End(ToRight).Offset(1, 0).") End Function

試したこと

Range(A1).End(ToRight).Offset(1, 0)を単一セル(F32等)に変更すると実行できたのでこの箇所が原因かと思われます。

補足情報(FW/ツールのバージョンなど)

Excel 2016 VBA

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

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

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

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

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

DreamTheater

2020/06/03 01:12

『F32列の一番右の埋まっているセルの一つ右隣~』 F列ってことでしょうか?(F32は単一セルです) F列なら、なぜdstRangeにRange(A1).End(ToRight)...を指定しているのでしょうか? 質問を見直して頂けますか?
guest

回答1

0

ベストアンサー

dstRangeに関数を含むものを文字列で渡したら、実際に使われるのは以下のようになるのでおかしいな、と思わないですかね。

VBA

1' これが 2.Worksheets(dstSheet).Range(dstRange).PasteSpecial _ 3 4' こう展開される 5.Worksheets("シートB").Range("Range(A1).End(ToRight).Offset(1, 0).").PasteSpecial _

関数に渡すのは「どの行か」という情報だけでよいでしょう。
動作確認はしていませんが、次のような感じでよいはずです。
尚、せっかく渡したdstBookを使っていなかったのでOpen時に使うようにしました。
またToRightをxlToRightに、Offsetの引数を(1,0)から(0,1)に修正しています。

VBA

1Function book2bookCopy(srcSheet As String, srcRange As String, _ 2 dstBook As String, dstSheet As String, dstRange As String) 3 ' 処理高速化用:開始処理 4 Call startFunc 5 With Workbooks.Open(dstBook) 6 ' コピー 7 ThisWorkbook.Worksheets(srcSheet).Range(srcRange).Copy 8 .Worksheets(dstSheet).Range(dstRange).End(xlToRight).Offset(0, 1).PasteSpecial _ 9 xlPasteValuesAndNumberFormats 10 ' コピー中状態を解除 11 Application.CutCopyMode = False 12 ' 処理高速化用:終了処理 13 Call endFunc 14 ' 保存して閉じる 15 .Close True 16 End With 17 18End Function 19 20' テスト実行用 21Function test() 22 Call book2bookCopy("シートA", "B5:B7", "ワークブックB", "シートB", "A1") 23End Function

投稿2020/06/03 01:10

ttyp03

総合スコア16998

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

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

KKKALLL

2020/06/03 01:22

確かにそうですね・・・勉強不足でした 修正して頂いたコードで無事動作確認出来ました!ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問