[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『初心者のため、お知恵を借りたくてここに来ました。どなたかご教示願えればありがたいです。
転記用ファイル データファイル A B C D A B C D E 1 項目 項目 項目 項目 1 識別番号 項目 項目 項目 項目 2 2 1 3 3 2 4 4 3 4 2 11
』(さおり)
各データファイルの各シートには、同じ識別番号が複数ある? それとも1つだけ?
(ぶらっと)
サンプルを見ると識別番号に複数の同一番号があったり、ないものがありますが 単純に識別番号の小さい順に列挙すればよいのですか?
またデータファイル、シートは複数あるとありますが、転記用ファイルは1つなのでしょうか。 その場合複数のデータをどのように1シートに纏めるか、ルールはないのですか? ファイル間、シート間の優先順位がなければ、全データのA:E列を転記用シートにコピーし、 A列でソート後に、A列を削除した結果と同じようになればよいのでしょうか。 (Mook)
あぁ、そうか! 今、力技のコードを書いてアップしようとしたら Mookさんのコメントが!!
そうですねぇ、そうすればいいわけですね。
(ぶらっと)
Sample1 が最初に書いた力技。Sample2はMookさんのコメントによるコード案。
Sub Sample1()
Dim myPath As String
Dim fName As String
Dim tSh As Worksheet
Dim wb As Workbook
Dim fSh As Worksheet
Dim v(1 To 11) As Object
Dim x As Long
Dim c As Range
Dim dic As Variant
Application.ScreenUpdating = False
For x = 1 To UBound(v)
Set v(x) = CreateObject("Scripting.Dictionary")
Next
myPath = "c:\TEST\" 'フォルダパスは実際のものに
'転記シート名は実際のものに
Set tSh = ThisWorkbook.Sheets("Sheet1")
tSh.Range("A1", tSh.UsedRange).Offset(1).ClearContents
fName = Dir(myPath & "*.xls")
Do While Len(fName) > 0
If fName <> ThisWorkbook.Name Then
Set wb = Workbooks.Open(myPath & fName)
For Each fSh In wb.Worksheets
For Each c In fSh.Range("A2", fSh.Range("A" & fSh.Rows.Count).End(xlUp))
Select Case c.Value
Case 1 To UBound(v)
v(c.Value)(v(c.Value).Count) = c.Offset(, 1).Resize(, 4).Value
End Select
Next
Next
wb.Close False
End If
fName = Dir()
Loop
For Each dic In v
If dic.Count > 0 Then
tSh.Range("A" & tSh.Rows.Count).End(xlUp).Offset(1).Resize(dic.Count, 4).Value = _
WorksheetFunction.Transpose(WorksheetFunction.Transpose(dic.items))
End If
Next
Application.Goto tSh.Range("A1")
Application.ScreenUpdating = True
MsgBox "統合完了"
End Sub
Sub Sample2()
Dim myPath As String
Dim fName As String
Dim tSh As Worksheet
Dim wb As Workbook
Dim fSh As Worksheet
Dim x As Long
Dim c As Range
Dim sv As Variant
Application.ScreenUpdating = False
myPath = "c:\TEST\" 'フォルダパスは実際のものに
'転記シート名は実際のものに
Set tSh = ThisWorkbook.Sheets("Sheet1")
sv = tSh.Range("A1:E1").Value
tSh.Cells.ClearContents
fName = Dir(myPath & "*.xls")
Do While Len(fName) > 0
If fName <> ThisWorkbook.Name Then
Set wb = Workbooks.Open(myPath & fName)
For Each fSh In wb.Worksheets
With fSh.Range("A2", fSh.Range("A" & fSh.Rows.Count).End(xlUp)).Resize(, 5)
tSh.Range("A" & tSh.Rows.Count).End(xlUp).Offset(1).Resize(.Rows.Count, .Columns.Count).Value = .Value
End With
Next
wb.Close False
End If
fName = Dir()
Loop
With tSh
.Range("B1:F1").Value = sv
.Range("A1").CurrentRegion.Sort Key1:=.Columns("A"), Order1:=xlAscending, Header:=xlYes
.Columns("A").Delete
.Select
End With
Application.ScreenUpdating = True
MsgBox "統合完了"
End Sub
(ぶらっと)
ありがとうございます。
早速試させていただきました。
バッチリでした。感動です。
私も勉強して早くコードが書けるように頑張りますので、また、解らないことが
ありましたらよろしくお願いいたします。
また、mook様もご教示いただきましてありがとうございました。
(さおり)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.