Excel VBA質問箱 IV

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

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


12396 / 76734 ←次へ | 前へ→

【69860】Re:複数のExcelの情報を一つのExcelに集約
回答  UO3  - 11/9/6(火) 13:11 -

引用なし
パスワード
   ▼かん さん:

こんにちは

なぜかレスがつきませんね。

例としてアップされたものは、あくまで例ですよね。
このままなら、単に、BookX,Y,ZのC列をBookAにコピペすればいいことになりますから
ロジックというほどのものじゃないわけですよね。

なので、あくまで、BookX,Y,Z の A列に紐つけ番号があって、それは必ずしも連番じゃなく
また、まとまってもいない。で、BookA の その紐付け番号該当行のC列に値を転記。

また、必ずしも、行数は100行とか、そのなかで最初の33行がどうこうというわけでは
ないんですよね。

と、勝手に推測して。BookA,X,Y,Z が全て開かれているという前提で。

Sub Sample()
  Dim dic As Object
  Dim v As Variant
  Dim i As Long
  
  Set dic = CreateObject("Scripting.Dictionary")
  
  Call SetDic(dic, Workbooks("BookX.xls").Sheets("Sheet1")) 'シート名は実際のものを
  Call SetDic(dic, Workbooks("BookY.xls").Sheets("Sheet1")) 'シート名は実際のものを
  Call SetDic(dic, Workbooks("BookZ.xls").Sheets("Sheet1")) 'シート名は実際のものを
  
  With Workbooks("BookA.xls").Worksheets("Sheet1")     'シート名は実際のものを
    v = .Range("A1", .Range("A" & .Rows.Count).End(xlUp)).Resize(, 3).Value
    For i = 1 To UBound(v, 1)
      v(i, 3) = dic(v(i, 1))
    Next
    .Range("C1").Resize(UBound(v, 1)).Value = WorksheetFunction.Index(v, 0, 3)
  End With
  
  Set dic = Nothing
  
End Sub

Private Sub SetDic(dic As Object, sh As Worksheet)
  Dim c As Range
  
  With sh
    For Each c In .Range("A1", .Range("A" & .Rows.Count).End(xlUp))
      dic(c.Value) = c.Offset(, 2).Value
    Next
  End With
  
End Sub

5 hits

【69803】複数のExcelの情報を一つのExcelに集約 かん 11/8/31(水) 1:09 質問
【69860】Re:複数のExcelの情報を一つのExcelに集約 UO3 11/9/6(火) 13:11 回答

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