[[20250415133806]] 『セルの値を取得して実行させるには』(はみご) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) |

| 全文検索 | 過去ログ ]

 

『セルの値を取得して実行させるには』(はみご)

お世話になります。

「転記」シートに入力されている、K2にはコピー先のシート名が「R0704」。
M1にはコピー元(開くファイル)で2種類あり、M2、M3に(ファイルの場所の)パスが入力されております。

下記のコードでセルの値を取得して実行させたいですが、どのように変更したらよいのかわかりません。

sourceFile1…M2の値
sourceFile2…M3の値
sourceSheet1 …K2の値

よろしくお願いいたします。

Sub CopyRangeFromFiles()

    Dim sourceFile1 As String
    Dim sourceFile2 As String
    Dim destFile As String

    Dim sourceSheet1 As String
    Dim sourceSheet2 As String
    Dim destSheet As String

    Dim sourceRange1 As String
    Dim sourceRange2 As String
    Dim sourceRange3 As String
    Dim sourceRange4 As String
    Dim sourceRange5 As String

    Dim destRange0 As String
    Dim destRange1 As String
    Dim destRange2 As String
    Dim destRange3 As String
    Dim destRange4 As String
    Dim destRange5 As String

    Dim wbSource1 As Workbook
    Dim wbSource2 As Workbook
    Dim wbDest As Workbook

    ' ファイルパスとシート名、セル範囲を設定
    sourceFile1 = "C:\Users\Owner\Dropbox\(株)○○\オーダー数量\オーダー R07(2025)\太平洋・R07 .xlsx"        
    sourceFile2 = "C:\Users\Owner\Dropbox\(株)○○\オーダー数量\オーダー R07(2025)\日本海商事・R07.xlsx"
    destFile = "C:\Users\Owner\Desktop\転記用作業ファイル.xlsm"

    sourceSheet1 = "R0704"
    destSheet = "転記"

    sourceRange1 = "D4:D34"     'とうもろこし
    sourceRange2 = "K4:K34"     'ピーマン
    sourceRange3 = "O4:O34"     'キャベツ
    sourceRange4 = "C4:C34"     'レタス
    sourceRange5 = "R4:R34"     'ナス

    destRange0 = "B4:F34"
    destRange1 = "B4"
    destRange2 = "C4"
    destRange3 = "D4"
    destRange4 = "E4"
    destRange5 = "F4"

    ' ソースファイル1を開く
    Set wbSource1 = Workbooks.Open(sourceFile1)
    ' ソースファイル2を開く
    Set wbSource2 = Workbooks.Open(sourceFile2)
    ' 転記先ファイルを開く
    Set wbDest = Workbooks.Open(destFile)

    ' 転記先のデータを消す
    wbDest.Sheets(destSheet).Range(destRange0).ClearContents

    ' ソースファイル1から転記
    wbSource1.Sheets(sourceSheet1).Range(sourceRange1).Copy
    wbDest.Sheets(destSheet).Range(destRange1).PasteSpecial Paste:=xlPasteValues

    ' ソースファイル2から転記
    wbSource1.Sheets(sourceSheet1).Range(sourceRange2).Copy
    wbDest.Sheets(destSheet).Range(destRange2).PasteSpecial Paste:=xlPasteValues

    ' ソースファイル3から転記
    wbSource2.Sheets(sourceSheet1).Range(sourceRange3).Copy
    wbDest.Sheets(destSheet).Range(destRange3).PasteSpecial Paste:=xlPasteValues

    ' ソースファイル4から転記
    wbSource2.Sheets(sourceSheet1).Range(sourceRange4).Copy
    wbDest.Sheets(destSheet).Range(destRange4).PasteSpecial Paste:=xlPasteValues

    ' ソースファイル5から転記
    wbSource2.Sheets(sourceSheet1).Range(sourceRange5).Copy
    wbDest.Sheets(destSheet).Range(destRange5).PasteSpecial Paste:=xlPasteValues

    ' コピーの点滅枠を解除
    Application.CutCopyMode = False

    wbDest.Sheets(destSheet).Range("B4").Select

    ' ファイルを保存して閉じる
    wbDest.Save
    wbSource1.Close SaveChanges:=False
    wbSource2.Close SaveChanges:=False
    'wbDest.Close SaveChanges:=True

    ' メモリを解放
    Set wbSource1 = Nothing
    Set wbSource2 = Nothing
    Set wbDest = Nothing

    MsgBox "転記が完了しました!"
End Sub

< 使用 Excel:Microsoft365、使用 OS:Windows11 >


 >sourceFile1…M2の値
 sourceFile1 = Worksheets("転記").Range("M2").Value
 とかに変更したらどうでしょう。転記シートのM2ですよね。
 同様にほかの変数も設定できると思います。

 そういう話でなければ、具体的に困っていることを書いてください。

 # プロシージャ名からすると、AIか何かが作ったコードですか?
 # それなら、引き続きそちらに質問したほうがよいと思いますよ。
(xyz) 2025/04/15(火) 19:09:11

xyzさん ありがとうございます。

最初から作り直してみました。
指定したシート名(J6)の値が参照してくれません。

 下記のコードで止まります。
「インデックスが有効範囲にありません」のメッセージが表示されます。

    Set ws1 = wb1.Sheets(sheetName)         'コピー元のファイル1のシートを指定
    Set ws2 = wb2.Sheets(sheetName)         'コピー元のファイル2のシートを指定

ご教授お願い致します。

Sub 転記()

    Dim wb1 As Workbook
    Dim wb2 As Workbook

    Dim ws1 As Worksheet
    Dim ws2 As Worksheet

    Dim filePath1 As String
    Dim filePath2 As String

    Dim sheetName As String

    ' 1=ハイオク 2=ガソリン 3=灯油 4=軽油 5=重油
    Dim sRange1 As String          'コピー元範囲1
    Dim sRange2 As String          'コピー元範囲2
    Dim sRange3 As String          'コピー元範囲3
    Dim sRange4 As String          'コピー元範囲4
    Dim sRange5 As String          'コピー元範囲5

    Dim tRange1 As String            'コピー先セル1
    Dim tRange2 As String            'コピー先セル2
    Dim tRange3 As String            'コピー先セル3
    Dim tRange4 As String            'コピー先セル4
    Dim tRange5 As String            'コピー先セル5

    ' ファイルパスとシート名を取得
    filePath1 = ThisWorkbook.Sheets("転記").Range("L2").Value
    filePath2 = ThisWorkbook.Sheets("転記").Range("L3").Value
    sheetName = ThisWorkbook.Sheets("転記").Range("J6").Value

    ' 別のブックを開く
    Set wb1 = Workbooks.Open(filePath1)     'コピー元のファイル1
    Set wb2 = Workbooks.Open(filePath2)     'コピー元のファイル2
    ' 参照するシートを設定
    Set ws1 = wb1.Sheets(sheetName)         'コピー元のファイル1のシートを指定
    Set ws2 = wb2.Sheets(sheetName)         'コピー元のファイル2のシートを指定

    'コピー元範囲
    sRange1 = "D4:D34"      
    sRange2 = "K4:K34"      
    sRange3 = "O4:O34"      
    sRange4 = "C4:C34"      
    sRange5 = "R4:R34"      

    '転記先セル
    tRange1 = "B4"      
    tRange2 = "C4"      
    tRange3 = "D4"      
    tRange4 = "E4"      
    tRange5 = "F4"      

    'コピー先のデータをクリア
    ThisWorkbook.Worksheets("転記").Range("B4:F34").ClearContents

    ' コピー元から転記する
    ' ソースファイル1から転記シートに転記
    ws1.Range(sRange1).Copy
    ThisWorkbook.Sheets("転記").Range(tRange1).PasteSpecial Paste:=xlPasteValues

    ' ソースファイル2から転記シートに転記
    ws1.Range(sRange2).Copy
    ThisWorkbook.Sheets("転記").Range(tRange2).PasteSpecial Paste:=xlPasteValues

    ' ソースファイル3から転記シートに転記
    ws2.Range(sRange3).Copy
    ThisWorkbook.Sheets("転記").Range(tRange3).PasteSpecial Paste:=xlPasteValues

    ' ソースファイル4から転記シートに転記
    ws2.Range(sRange4).Copy
    ThisWorkbook.Sheets("転記").Range(tRange4).PasteSpecial Paste:=xlPasteValues

    ' ソースファイル5から転記シートに転記
    ws2.Range(sRange5).Copy
    ThisWorkbook.Sheets("転記").Range(tRange5).PasteSpecial Paste:=xlPasteValues

    ' コピー元の点滅枠を解除する
    Application.CutCopyMode = False

    ' 別のブックを閉じる
    wb1.Close SaveChanges:=False
    wb2.Close SaveChanges:=False

   ' メモリを解放
    Set wb1 = Nothing
    Set wb2 = Nothing

    'セルの移動
    ThisWorkbook.Sheets("転記").Range("B4").Select

    MsgBox "転記が完了しました!"

End Sub
(はみご) 2025/04/17(木) 17:19:16


 # コメントつかなかったですかあ

 そのエラーは100%例外なく、実際にないシート名を指定したことが原因で起きるものです。

 変数sheetnameの中身を確認する方法はご存じですか?

 今回だけではなく、VBAを利用する以上、エラーは避けられません。
 これは初心者もベテランもエラーが発生することでは同じです。(発生する箇所が違うかもしれませんが)
 デバッグ(間違いを見つけて修正すること)は誰にも求められる作業でコードを書くことと同程度に重要です。
 結果を他人から聞いて切り抜けることよりも、
 腰を据えて書籍でデバッグ手法の理解にじっくり取り組まれることをお薦めします。

 ネット上であれば、"VBA デバッグのやり方"などで調べればいくつも参考になるものがあります。例えば、
https://www.excelspeedup.com/vbadebug/

(xyz) 2025/04/17(木) 20:01:16


xyzさん、ありがとうございます。

あれから、いろいろ試行錯誤しながらなんとか作成できました。

ありがとうございました。
(はみご) 2025/04/28(月) 10:15:35


 お疲れ様でした。いささかでも参考になったのであればよかったです。
(xyz) 2025/04/28(月) 12:25:27

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.