Excel VBA合并csv和sum值

时间:2012-11-13 17:17:17

标签: vba excel-vba merge excel

我需要以下列格式合并报告列表

  • 第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. 覆盖
  3. 打开每个文件后,它会提示用户说剪贴板中有大量数据,我想避免这种情况
  4. 我认为以下代码可能会合并我的数据和总和值,但我无法确定,因为我目前的类型不匹配,因为报告文件名显示

    ' 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个实例的帐户,现在它只会合并2。

1 个答案:

答案 0 :(得分:2)

1)在ThisWorkbook.Activate之前添加ActiveCell.Value = files(i)以避免覆盖问题。 ThisWorkbook始终引用宏运行的工作簿。

2)在Application.CutCopyMode = False之前添加dataset_workbook.Close以处理剪贴板提示问题。