Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


5958 / 13644 ツリー ←次へ | 前へ→

【47719】複数ファイルの特定シートからデータを抽出したい 五十島 徹 07/3/20(火) 19:44 質問[未読]
【47722】Re:複数ファイルの特定シートからデータを... ウッシ 07/3/20(火) 22:27 発言[未読]
【47723】Re:複数ファイルの特定シートからデータを... Kein 07/3/20(火) 22:30 回答[未読]
【47986】Re:複数ファイルの特定シートからデータを... 神林 茂雄 07/3/29(木) 11:49 質問[未読]

【47719】複数ファイルの特定シートからデータを抽...
質問  五十島 徹  - 07/3/20(火) 19:44 -

引用なし
パスワード
   お世話になります。

初心者ですがよろしくお願いいたします。

複数ファイルから、特定のシートのセルの値を抽出したいのですが、
可能でしょうか?

例:
A列にファイルリストがあり、
そのファイルには、すべて”様式3-3(1)”というシートがあります。
そのシートの、Q1セルの値をファイルリストに該当するBに。
W5のセルの値をCに。
X1のセルの値をDに。
E12のセルの値をEに。
R15のセルの値をFに。
2番目のファイルにへ・・・

   A   B C  D E F
1○×.xls
2△×.xls
3▽▽.xls
4・
5・
6・

みたいなことはできるのでしょうか?

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

【47722】Re:複数ファイルの特定シートからデータ...
発言  ウッシ  - 07/3/20(火) 22:27 -

引用なし
パスワード
   こんばんは

シート名「様式3-3(1)」が「Sheet1」とかでしたら「ExecuteExcel4Macro」が使える
と思うのですが、

Sub test()
  Dim motoSheet  As String
  Dim wSh     As Worksheet
  Dim mSh     As Worksheet
  Dim sDataR
  Dim i      As Long
  Dim r      As Range
  Dim rr      As Range
  Dim sFol     As String
  
  motoSheet = "様式3-3(1)"
  Set mSh = ThisWorkbook.Sheets("Sheet1")
  sDataR = Array("Q1", "W5", "X1", "E12", "R15")

  With mSh
    Application.ScreenUpdating = False
    sFol = ThisWorkbook.Path
    Set rr = .Range("A1", .Range("A" & .Rows.Count).End(xlUp))
    
    For Each r In rr
      On Error Resume Next
      Set wSh = Workbooks.Open(sFol & "\" & r.Value).Worksheets(motoSheet)
      On Error GoTo 0
      If Not wSh Is Nothing Then
        For i = LBound(sDataR) To UBound(sDataR)
          r.Offset(, i + 1).Value = wSh.Range(sDataR(i))
        Next i
      End If
      wSh.Parent.Close False
      Set wSh = Nothing
    Next
    Application.ScreenUpdating = True
  End With
  Set mSh = Nothing: Set rr = Nothing
End Sub

【47723】Re:複数ファイルの特定シートからデータ...
回答  Kein  - 07/3/20(火) 22:30 -

引用なし
パスワード
   シート名やセル範囲が決っていれば、リンクで値を引っ張ることが出来ます。
以下のようなコードで試してみて下さい。

Sub MyLink()
  Dim C As Range
  Dim AdAry As Variant
  Dim i As Integer
  Dim MyPh As String, MyFom As String
 
  MyPh = ThisWorkbook.Path & "\" 
  AdAry = Array("$Q$1", "$W$5", "$X$1", "$E$12", "$R$15")
  For Each C In Range("A1", Range("A65536").End(xlUp))
   If Dir(MyPh & C.Value) <> "" Then
     For i = 1 To 5
      MyFom = "='" & MyPh & "[" & _
      C.Value & "]様式3-3(1)'!" & AdAry(i - 1)
      With C.Offset(, i)
        .Formula = MyFom
        .Value = .Value
      End With
     Next i
   End If
  Next
End Sub

【47986】Re:複数ファイルの特定シートからデータ...
質問  神林 茂雄  - 07/3/29(木) 11:49 -

引用なし
パスワード
   kein様

お世話になります。

初級者ですがよろしくお願いいたします。

小生も質問と同じようなことをやりたくて、
検索かけたところこの回答に行き着きました。

keinさんが作成されたコードを早速試してみました。
”シートの選択”というプールダウンが出てきて、
そのシートを選ぶような形になっていました。

1.シートが決まっているため、プールダウンが出てこないような設定にするためにはどうしたらいいのでしょうか?(プールダウンで選ぶのが面倒)

2.抽出したいシートが複数ある場合は、どうしたらいいのでしょうか?

3.また、抽出したいシートが決まっているのに下記のコードは何のためにあるのでしょうか?
→ C.Value & "]様式3-3(1)'!" & AdAry(i - 1)

お手数おかけしますが、
よろしくお願いいたします。

▼Kein さん:
>シート名やセル範囲が決っていれば、リンクで値を引っ張ることが出来ます。
>以下のようなコードで試してみて下さい。
>
>Sub MyLink()
>  Dim C As Range
>  Dim AdAry As Variant
>  Dim i As Integer
>  Dim MyPh As String, MyFom As String
> 
>  MyPh = ThisWorkbook.Path & "\" 
>  AdAry = Array("$Q$1", "$W$5", "$X$1", "$E$12", "$R$15")
>  For Each C In Range("A1", Range("A65536").End(xlUp))
>   If Dir(MyPh & C.Value) <> "" Then
>     For i = 1 To 5
>      MyFom = "='" & MyPh & "[" & _
>      C.Value & "]様式3-3(1)'!" & AdAry(i - 1)
>      With C.Offset(, i)
>        .Formula = MyFom
>        .Value = .Value
>      End With
>     Next i
>   End If
>  Next
>End Sub

5958 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free