| 
    
     |  | 「VBAド素人さん - 09/5/28(木) 3:48 -」の書き込みで 
 >新規ブックを作成する方法は分かるのですが、上記の抽出結果では
 >8 列までしか記載してませんが、抽出結果は何列になるか分からない為
 >最後の空白の列で終了するようにしたいです。
 
 「列」と「行」の言い方が間違っているのでは無いですか?
 此れによって、コードが違うのですが?
 今回は、上記が違っているとして書きます
 また、「既定のフォーマット」在るシートは、
 「既定のフォーマット」のBookの先頭シートとします
 
 尚、「既定のフォーマット」のシートには、セルの書式設定も予め設定して置いて下さい
 
 Option Explicit
 
 Public Sub Sample_2()
 
 '◆「元リスト」のデータ列数(A列〜D列)
 Const clngColumns As Long = 4
 '出力するファイルの拡張子
 Const cstrExten As String = ".xls"
 
 Dim i As Long
 Dim lngRows As Long
 Dim rngList As Range
 Dim strModel As String
 Dim vntPos As Variant
 Dim vntItem As Variant
 Dim vntList As Variant
 Dim vntBookName As Variant
 Dim dicIndex As Object
 Dim strProm As String
 
 '◆「元リスト」の先頭セル位置を基準とする(先頭列の列見出し「日付」のセル位置)
 Set rngList = Worksheets("Sheet1").Range("A1")
 
 '「既定のフォーマット」のBook名
 strModel = ThisWorkbook.Path & "\" & "既定のフォーマット.xls"
 If Dir(strModel) = "" Then
 strProm = "既定のフォーマットのBookが有りません"
 GoTo Wayout
 End If
 
 '「既定のフォーマット」書き込み位置
 '日付、ID、メント、 結果の順で
 vntPos = Array("B1", "B2", "C3", "D4")
 '上記に対応する「元リスト」の列位置(A列を基準とする列Offset)
 vntItem = Array(0, 1, 2, 3)
 
 '「元リスト」の表に就いて
 With rngList
 '行数の取得
 lngRows = .Offset(Rows.Count - .Row).End(xlUp).Row - .Row
 If lngRows <= 0 Then
 strProm = "データが有りません"
 GoTo Wayout
 End If
 End With
 
 'Dictionaryオブジェクトを取得
 Set dicIndex = CreateObject("Scripting.Dictionary")
 
 '画面更新を停止
 Application.ScreenUpdating = False
 
 'Key列に就いて繰り返し
 For i = 1 To lngRows
 'データ列数の取得
 With rngList
 '「元リスト」1行分データを配列に取得
 vntList = .Offset(i).Resize(, clngColumns)
 'B列?の値取得(日付はA列ですが?)
 '      vntBookName = vntList(1, 2)
 'A列の日付値取得
 vntBookName = Format(vntList(1, 1), "yyyymmdd")
 End With
 With dicIndex
 '出力Book名の取得
 .Item(vntBookName) = .Item(vntBookName) + 1
 'Book名の作成
 vntBookName = ThisWorkbook.Path & "\" & vntBookName & "-" _
 & .Item(vntBookName) & cstrExten
 '「既定のフォーマット」BookのCopy
 FileCopy strModel, vntBookName
 End With
 '1Book分の転記
 DataTransfer vntPos, vntItem, vntList, vntBookName
 Next i
 
 strProm = "処理が完了しました"
 
 Wayout:
 
 '画面更新を再開
 Application.ScreenUpdating = True
 
 Set dicIndex = Nothing
 Set rngList = Nothing
 
 MsgBox strProm, vbInformation
 
 End Sub
 
 Private Sub DataTransfer(vntPos As Variant, _
 vntItem As Variant, _
 vntList As Variant, _
 vntBookName As Variant)
 
 '  1Book分の転記
 
 Dim i As Long
 Dim rngResult As Range
 
 '転記するBookをOpenし、先頭シートのA1を基準セルとします
 Set rngResult = Workbooks.Open(Filename:=vntBookName) _
 .Worksheets(1).Range("A1")
 
 With rngResult
 'データを転記
 For i = 0 To UBound(vntPos)
 .Range(vntPos(i)).Value = vntList(1, vntItem(i) + 1)
 Next i
 '転記するBookの変更を保存します
 .Parent.Parent.Close SaveChanges:=True
 End With
 
 Set rngResult = Nothing
 
 End Sub
 
 
 |  |