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

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

ただいまの
回答率

90.51%

  • VBA

    1808questions

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

  • Excel

    1543questions

    Excelは、マイクロソフト社が開発しているデータ集計や分析を行う表計算ソフトの一つです。文書作成や表計算、資料作成などの多彩な機能を備えており、統合パッケージであるMicrosoft Officeに含まれています。

VBA:Book1.XlsからBook2.Xlsmへの値の取得、貼り付けを繰り返しで行いたい

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 161

vivid

score 2

 前提・実現したいこと

VBAの学習を初めて理解していない点があるのですが。
BookA.xlsから今回作成予定のBookB.xlsmにデータのコピーと貼り付けを行いたいと考えています。
また、繰り返し処理で行いたいと考えています。
BookA.xlsのセル"B10"をBookB.xlsmの"C5"に入れる
BookA.xlsのセル"B11"をBookB.xlsmの"C6"に入れる
BookA.xlsのセル"B12"をBookB.xlsmの"C7"に入れる



BookA.xlsのセル"Bx"の値が空白ならば繰り返し終了

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

'Range'メソッドは失敗しました:'_Worksheet'オブジェクト

 該当のソースコード

Sub Execution()

 Dim wFile As String
 Dim i As Integer

 Dim Sheet1 As Worksheet
 Dim Sheet2 As Worksheet

 '画面の描画オフ
 Application.ScreenUpdating = False

 'パスを取得
 wFile = Range("F2").Value
 'ファイルを開く
 Workbooks.Open wFile

 '設定
 i = 1

 Set Sheet1 = Workbooks("BookA.xlsx").Worksheets("sheet1")
 Set Sheet2 = Workbooks("BookB.xlsm").Worksheets("sheet1")


 Do While Cells(i + 9, "B").Value <> ""
 Sheet2.Range(i + 4, "C").Value = Sheet1.Range(i + 9, "B").Value
 i = i + 1

 Loop


 '描画オン
 Application.ScreenUpdating = True

 'ファイルクローズ
 Excel.Application.CutCopyMode = False
 ActiveWorkbook.Close SaveChanges:=False


End Sub

 試したこと

知識が浅く、具体的な方法を見つけられていません。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+2

外していたらすみません。

Sheet2.Range(i + 4, "C").Value = Sheet1.Range(i + 9, "B").Value
↑ここの指定は、Cellsでないといけません。
Rangeは、Range("B4")でB4セル一つを指定したり、Range(Cells(1.1),Cells(6,5)) のようにA1からE6までの範囲を指定するなどには使用できますが、セル一個を行、列で指定するとこのエラーがでます。

またこのVBAは、BookB.xlsmにおかれていますか?
だとすると、自身を示すのは、ThisWorkbookなので

Set Sheet2 = Workbooks("BookB.xlsm").Worksheets("sheet1")

あたりも曖昧になってしまうと思います。

Workbookの指定と、Range指定を追加して修正すると、こんな風になるかと思います。

Sub Execution()

Dim wFile As String
Dim i As Integer

Dim wkb01 As Workbook
Dim wkb02 As Workbook

Dim Sheet1 As Worksheet
Dim Sheet2 As Worksheet

Dim Range1 As Range
Dim Range2 As Range

'画面の描画オフ
Application.ScreenUpdating = False

'パスを取得
wFile = Range("F2").Value
'ファイルを開く
Set wkb01 = Workbooks.Open(Filename:=wFile, ReadOnly:=True, UpdateLinks:=0)
Set wkb02 = ThisWorkbook

'設定
i = 1

Set Sheet1 = wkb01.Worksheets("sheet1")
Set Sheet2 = wkb02.Worksheets("sheet1")

Do

Set Range1 = Sheet1.Cells(i + 9, 2)

If Range1.Value = "" Then
Exit Do
End If

Set Range2 = Sheet2.Cells(i + 4, 3)

Range2.Value = Range1.Value

i = i + 1

Loop

'描画オン
Application.ScreenUpdating = True

'ファイルクローズ
Excel.Application.CutCopyMode = False
wkb01.Close SaveChanges:=False

End Sub

ActiveWorkbookも、状況により、想定外のシートが操作されるので、明確に「このブックだ!」と指定した方がトラブルが少ないと思われます。

回答には慣れていないので、外していたらすみません。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/07/03 17:33

    ありがとうございます。
    VBAはBookB.xlsmになります。

    また、この手法で解決いたしました。
    ありがとうございました。

    Cellsについての知識が不足していることが確認できたので理解を深めようと思います。

    キャンセル

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

  • ただいまの回答率 90.51%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    VBA A,B,C…列方向へ検索値を移動したい

    お世話になっております。 下記、コードについて教えてください。 Sub 水平変位データ() Dim kensakuA As Range '検索する値 Dim

  • 解決済

    シートのコピー

    vbaにて開いたexcelのシートをマクロ等を実行しているexcelのSheet1にコピーしたいのですが、どのように記述したらよいでしょうか。 Sheet1が既に存在した場合Sh

  • 解決済

    vba  別ブック指定シートに追記

    お世話になります。 excelで実行すると作業結果を別ブックのシート名をYYYYMMDD_Xの連番で保存するようなマクロを組んでいるのですが、その別ブックに保存したシートに対して

  • 解決済

    エクセルマクロでグラフが表示されないです。

    グラフを各シートから値をひっぱてきて重ねて表示したいのですが、 グラフを重ねるどころか真っ白になってしまいます。 いろいろ調べてみたのですが解決できませんでしたのでご教授願

  • 解決済

    【マクロ】出力したグラフを重ねたいです。

    出力したグラフを重ねたいのですがググっても全然でてこないのでわかりませんでした。 なのでどのように組んだらいいのかどなたかご教授お願いしたいです。 よろしくお願い致します。

  • 受付中

    【VBA】複数シートのデータを順番に計算して、結果を別ブックのシートに同じ順番に書き込む

    【VBA】複数シートのデータを順番に計算して、結果を別ブックのシートに元データのシートと同じ順番に書き込む VBAで回帰分析を行うなシステムを作っています。 現在、一つのシートをか

  • 受付中

    VBAで別のブックのシートに記録する

    前提・実現したいこと 複数の月ごとになっているシートにデータが2列同行数記録されています。その2列のデータを用いてある計算をして、別ブックの月ごとのシートに計算結果を次々に記録して

  • 解決済

    別ファイルのセル 操作

    別ファイルのセルの操作ができず、困っています。 ファイルAからファイルBを開き、ファイルBを閉じるときに、ファイルAに値を反映させて、ファイルBを閉じる処理を行いたいと思ってお

同じタグがついた質問を見る

  • VBA

    1808questions

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

  • Excel

    1543questions

    Excelは、マイクロソフト社が開発しているデータ集計や分析を行う表計算ソフトの一つです。文書作成や表計算、資料作成などの多彩な機能を備えており、統合パッケージであるMicrosoft Officeに含まれています。