プロが教える店舗&オフィスのセキュリティ対策術

VBAの初心者です。
ネットで使えそうなVBAコードを活用しようとしていますが、アドバイス頂きたいです。

■やりたいこと:
C:\Users\tefun\Desktop\Projects\Evaluation
上記フォルダに5つのシートが含まれたソースファイルが22個あります。(3rd_Party_Evaluation_sheet _P1~P22)
各シートの内容は同じで「K1:L1」、「B13:L13」のデータだけ違う内容になっております。

これらを同じフォルダの「Radar_Chart_Index.xlsm」の「3rdParty」というシートに貼り付けていきたいです。
貼り付け対象範囲は、N2:Z111
 1つのソースファイル1シートで1行になりますので
 22ファイル X 5シート = 110行
説明の画像を添付しております。

■知りたいこと:
下記コードは、ソースファイル及びコピ元のシートをいちいちマウスで指定しないとならないようになっていますが、
自動で実行するようにはどのように変更したら良いか知りたいです。
初心者で正直下記コードの内容も100%把握はしておりません。

Sub test1()
Const f1 = "='C:\Users\tefun\Desktop\Projects\Evaluation["
Const f2 = ".xlsm]P3'!"
Dim f As String
Dim i As Long

With Application
.ScreenUpdating = False
.EnableEvents = False
.Calculation = xlCalculationManual
End With
With ActiveSheet
For i = 1 To 110
f = f1 & Format$(i, "00") & f2
.Cells(i + 1, 14).Resize(, 2).Formula = f & "K1"
.Cells(i + 1, 16).Resize(, 11).Formula = f & "B13"
Next
With .Range("N2:O111")
.Copy
.PasteSpecial xlPasteValues
End With
With .Range("P2:Z111")
.Copy
.PasteSpecial xlPasteValues
End With
End With
With Application
.Calculation = xlCalculationAutomatic
.EnableEvents = True
.ScreenUpdating = True
End With
End Sub

「VBA)複数ファイル・シートのデータを一」の質問画像

質問者からの補足コメント

  • 今のコードでは手動だけではなく、コピペはちゃんと出来ていませんでした。
    なぜかデータが順番通りに貼り付けできていません。
    以下のようになるべきですが、添付の画像通りになってしまいます。
    Teff P1 ....
    Teff P2 ....
    Teff P3 ....
    Teff P4 ....
    Teff P5 ....
    Masumi P1 ....
    Masumi P2 ....
    .
    .

    「VBA)複数ファイル・シートのデータを一」の補足画像1
      補足日時:2020/07/07 16:23

A 回答 (1件)

こんにちは、


Radar_Chart_Index.xlsmにVBAを書いて良いのでしょうか?
私の読解力が無いためファイル、シート関係が良く理解していませんが、
With .Range("N2:O111")
.Copy
.PasteSpecial xlPasteValues
End With
などで数式を値に変えているなら、初めから値を抽出すれば良いのではないでしょうか、
ただし、対象ファイルを開く必要がありますが。
> 5シート
これは、5シートしかないと理解してよいのでしょうか?

手直しは必要と考えますが、
Radar_Chart_Index.xlsmの標準モジュールに一例です。

Sub Test()
  Const f1 = "C:\Users\tefun\Desktop\Projects\Evaluation\"
  Const f2 = ".xlsm"
  Dim i As Long, TrRow As Long
  Dim sh As Worksheet, trSh As Worksheet
  With Application
   .ScreenUpdating = False
   .EnableEvents = False
   .Calculation = xlCalculationManual
  End With
  Set sh = Sheets("3rdParty")
  For i = 1 To 22
   With Workbooks.Open(f1 & "3rd_Party_Evaluation_sheet _P" & i & f2)
    For Each trSh In .Worksheets
      TrRow = sh.Cells(Rows.Count, "N").End(xlUp).Row + 1
      sh.Cells(TrRow, "N").Resize(1, 2).Value = trSh.Range("K1:L1").Value
      sh.Cells(TrRow, "P").Resize(1, 11).Value = trSh.Range("B13:L13").Value
    Next trSh
    .Close SaveChanges:=False
   End With
  Next
  With Application
   .Calculation = xlCalculationAutomatic
   .EnableEvents = True
   .ScreenUpdating = True
  End With
End Sub

ファイル名は3rd_Party_Evaluation_sheet _P1~P22 で良いのでしょうか?
対象シート数などに問題がある場合は、シート名などを具体的にして補足してくださいね。
未検証の為、コピーファイルなどでお願いします。
    • good
    • 1
この回答へのお礼

助かりました

すぐ返答できず失礼いたしました。

ご質問に対して、
1.Radar_Chart_Index.xlsmにVBAを書いて良いのでしょうか?
→はい、ご理解のとおりです。

2.これは、5シートしかないと理解してよいのでしょうか?
→言葉が足りずすみません。シートが5つあるとの意味でした。(P1,P2,P3,P4,P5)

3.ファイル名は3rd_Party_Evaluation_sheet _P1~P22 で良いのでしょうか?
→はい、ご理解のとおりです。

トライした結果、一発で上手く行きました!
思わず大声で「うわー!」と言ってしまいました。笑
本当にありがとうございます。
頂いたコードを読みながらいい勉強になりました。
コロナに気をつけて健康にお過ごしください。

~三重県鈴鹿より

お礼日時:2020/07/08 07:05

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!