bugfix> excel > 投稿

複数のワークブックの時間を参照して選択し、現在のワークブックのすべてのデータを取得して、ワークブックをマージしようとしました。選択したワークブックのすべてのデータが1シートで必要ですが、私のコードは現在のワークブックの異なるシートで提供します。Sheets.Copy after:= mainWorkbook.Sheets(mainWorkbook.Worksheets.Count)       この行のように、構文は後または前のいずれかを選択できますが、電流は与えません。 plsは私を助けます

Dim files, i As Integer
Dim dailogbox As FileDialog
Dim mainWorkbook, sourceWorkbook As Workbook
Dim sheets As Worksheet
Set mainWorkbook = Application.ActiveWorkbook
Set dailogbox = Application.FileDialog(msoFileDialogFilePicker)
dailogbox.AllowMultiSelect = True
files = dailogbox.Show
For i = 1 To dailogbox.SelectedItems.Count
    Workbooks.Open dailogbox.SelectedItems(i)
    Set sourceWorkbook = ActiveWorkbook
    For Each sheets In sourceWorkbook.Worksheets
        sheets.Copy after:=mainWorkbook.Sheets(mainWorkbook.Worksheets.Count)
    Next tempWorkSheet
    sourceWorkbook.Close
Next i

回答 3 件
  • あなたが発見したように、Sheets.Copy シート全体をコピーまたは移動します。データを別のシートにマージしません。コピーするシートのセルをコピーする必要がありますが、

    dim dest as Range
    For i = 1 To dailogbox.SelectedItems.Count
        Workbooks.Open dailogbox.SelectedItems(i)
        Set sourceWorkbook = Workbooks.Open(dailogbox.SelectedItems(i))
        For Each aSheet In sourceWorkbook.Worksheets '
            set dest = mainWorkbook.Sheets(mainWorkbook.Worksheets.Count)        
            aSheet.Cells.Copy dest.Cells
        Next sheets   ' NOT "tempWorkSheet"
        sourceWorkbook.Close
    Next i
    
    

    また、「シート」は予約語です。変数として使用することはできません。 「aSheet」に変更しました。

    編集:テキストをコピーした後にフォーマットをコピーするには、 aSheet.Cells.Copy dest.Cells の後にこれを追加します :

    dest.PasteSpecial Paste:=xlPasteFormats
    
    

  • これにより、ファイルダイアログが開き、複数のファイルを選択できます。その後、ワークブックの各シートを順に切り替え、A2からデータの右下隅にデータをコピーし、このコードをホストするワークブックに貼り付けます。

    以下を修正または修正する必要があるもの:
    1)このコードをホストする本のシート名
    2)Colスパン(A-Z現在)
    3)インポートブックに複数のシートがある場合、選択したすべてのワークブックからすべてのシートを取得するため、インポートするシートの基準を設定する必要があります。
    4)これは、列Aに空白がないことを前提としています(最後の行(コピーする範囲)を決定するため)、データが欠落しないように空白を含む可能性が最も低い列を選択する必要があります。

    Option Explicit
    Sub Consolidation()
    Dim CurrentBook As Workbook
    Dim WS As Worksheet
    Set WS = ThisWorkbook.Sheets("SHEETNAME?")
    Dim IndvFiles As FileDialog
    Dim FileIdx As Long
    Dim i As Integer, x As Integer
    Set IndvFiles = Application.FileDialog(msoFileDialogOpen)
    With IndvFiles
        .AllowMultiSelect = True
        .Title = "Multi-select target data files:"
        .ButtonName = ""
        .Filters.Clear
        .Filters.Add ".xlsx files", "*.xlsx"
        .Show
    End With
    Application.DisplayAlerts = False
    Application.ScreenUpdating = False
    For FileIdx = 1 To IndvFiles.SelectedItems.Count
        Set CurrentBook = Workbooks.Open(IndvFiles.SelectedItems(FileIdx))
        For Each Sheet In CurrentBook.Sheets
            Dim LRow1 As Long
            LRow1 = WS.Range("A" & WS.Rows.Count).End(xlUp).Row
            Dim LRow2 As Long
            LRow2 = CurrentBook.ActiveSheet.Range("A" & CurrentBook.ActiveSheet.Rows.Count).End(xlUp).Row
            Dim ImportRange As Range
            Set ImportRange = CurrentBook.ActiveSheet.Range("A2:Z" & LRow2)
            ImportRange.Copy
            WS.Range("A" & LRow1 + 1).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
        Next
        CurrentBook.Close False
    Next FileIdx
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
    End Sub
    
    

  • たぶん、あなたはこの後です(コメントの説明):

    Option Explicit
    Sub CopySheets()
        Dim files As Variant, i As Long
        Dim dailogbox As FileDialog
        Dim mySheet As Worksheet, targetSheet As Worksheet
        Set targetSheet = ActiveSheet ' set the sheet you want to collect selecte workbooks worksheets data into
        Set dailogbox = Application.FileDialog(msoFileDialogFilePicker)
        dailogbox.AllowMultiSelect = True
        files = dailogbox.Show
        For i = 1 To dailogbox.SelectedItems.Count
            With Workbooks.Open(dailogbox.SelectedItems(i)) ' open and reference current workbook
                For Each mySheet In .Worksheets ' loop through current workbook worksheets
                    mySheet.UsedRange.Copy targetSheet.Cells(targetSheet.Rows.Count, 1).End(xlUp).Offset(1) ' copy current worksheet "used" range and paste them into target sheet from its column A first empty cell after last not empty one
                Next
                .Close False ' cloe current workbook, discarding changes
            End With
        Next
    End Sub
    
    

あなたの答え