1

次の形式でレポートのリストをマージする必要があります

  • 列 1 は数値です
  • 列 2 は文字列です
  • 最大行は動的です

一致する文字列の列 1 の数値を合計するような方法で (重複を削除します)

現在、csvファイルをこれとマージしています

Dim files() As String
files = AllFiles(GetFolder) 'returns array of files in folder
Dim i As Long
For i = 0 To UBound(files)
    Windows("Monthly KB Page Access Report Generator.xls").Activate
    ActiveCell.Value = files(i)
    wrkbookvar2 = Dir(files(i))
    ActiveCell.Offset(1, 0).Activate
    Workbooks.Open Filename:=GetFolder & "\" & files(i)
    Set dataset_workbook = ActiveWorkbook
    Range(ActiveCell.SpecialCells(xlLastCell), Cells(1)).Copy
    Windows("Monthly KB Page Access Report Generator.xls").Activate
    Cells(ActiveCell.SpecialCells(xlLastCell).Row, 1).Select
    ActiveSheet.Paste
    dataset_workbook.Close
Next

これは 2 つの課題とマージされます

  1. 各レポートの最初のセルは、レポートのファイル名で上書きされます
  2. 各ファイルを開いた後、クリップボードに大きなデータが含まれていることをユーザーに知らせるプロンプトが表示されます。これを回避したい

次のコードは、データと合計値をマージするために機能する可能性があると思いますが、レポートのファイル名が表示されているために現在タイプが一致していないため、確信が持てません

' Sort
Windows("filename.xls").Activate
Columns("A:B").Sort Key1:=Range("B1"), Order1:=xlAscending

' merge
LastRow = ActiveSheet.UsedRange.Rows.Count
Set r = ActiveSheet.UsedRange.Resize(1)
With Application.WorksheetFunction
     For iRow = 2 To LastRow
        If Cells(iRow, 2) = Cells(iRow + 1, 2) Then
            Cells(iRow, 1) = Cells(iRow, 1) + Cells(iRow + 1, 1)
            Rows(iRow + 1).Delete
        End If
     Next iRow
End With

これを解決するのを手伝ってくれる人は誰でも、私はVBAがひどいです。

更新:番号1は削除することで解決されました

Windows("Monthly KB Page Access Report Generator.xls").Activate
ActiveCell.Value = files(i)
wrkbookvar2 = Dir(files(i))
ActiveCell.Offset(1, 0).Activate

それらは、私がまったく気付かなかった古いコピーの一部でした。

値の 2 つ以上のインスタンスを考慮して「Merge」を調整する必要があることを除いて、すべてが機能しています。現在は 2 つだけがマージされます。

4

1 に答える 1

2

1)上書きの問題を回避するためにThisWorkbook.Activate前に追加します。マクロが実行されているブックを常に参照します。ActiveCell.Value = files(i)ThisWorkbook

2)クリップボード プロンプトの問題に対処するためにApplication.CutCopyMode = Falsebeforeを追加します。dataset_workbook.Close

于 2012-11-13T17:59:44.687 に答える