【发布时间】:2016-10-16 04:43:16
【问题描述】:
我正在尝试在 Excel 2010 中创建一个宏,它将存储在子文件夹中的未知数量的以分号分隔的 csv 文件中的单列数值数据导入到主工作簿中的连续列中。宏应从打开的主工作簿运行。
起始单元格是已知的,但列范围的大小可以变化。
每个文件名都不同。
如果文件名是“文件名 - 60.00mm.csv”,
我希望使用“60.00”作为列标题并将其格式化为数字。这需要取自 csv 工作簿的名称,因为它不是工作表名称的一部分。我已经做到了。
主工作簿的 A 列标题为“扫描编号”,行填充有数字 1、2、3 等,但最大数据范围需要多少行。我还没有弄清楚如何做到这一点。
在最大数据范围的最后一个填充行下方的一行,我希望计算上面所有数据的平均值,不包括标题行。 A 列中这一行的标题应为“平均”。我已经研究了如何计算平均值,但不知道如何将其输出到最大数据范围的最后一个填充行下方的行。它当前位于数据集正下方的单元格中。
我已经设法创建了一个宏,它将查找并循环遍历所有 csv 文件,并选择和复制相关数据范围,但是我在不使用“激活”和“选择”的情况下将其粘贴到主工作簿中时遇到了问题”。它还会跳过 A 列并粘贴到 B 列。
另外,如果不按顺序打开和关闭每个 csv 文件,我就无法使用它。
任何人都可以协助改进此代码以及提供缺失部分的最有效方法吗?
当前代码: 选项显式 子导入()
Dim New_Path As String
Dim CSV_WB As Workbook
Dim Data As Variant
Dim CSV_files As String
Dim lastrow_CSV As Long
Dim lastrow As Long
Dim lastcol As Long
Dim CSV_Sht_Name As String
Dim CSV_Wbk_Title As String
Dim averageRange As Variant
New_Path = ThisWorkbook.Path & "Sub folder"
CSV_files = Dir(New_Path & "*.csv")
Do While Len(CSV_files) > 0
Workbooks.OpenText _
Filename:=New_Path & CSV_files, _
DataType:=xlDelimited, _
Semicolon:=True, _
Local:=True
'Copy data.
Set CSV_WB = Workbooks(CSV_files)
CSV_Sht_Name = ActiveSheet.Name
CSV_Wbk_Title = Val(Left(Right(ActiveWorkbook.Name, 11), 5))
lastrow_CSV = CSV_WB.Worksheets(CSV_Sht_Name).Range("C" & Rows.Count).End(xlUp).Row
Data = CSV_WB.Worksheets(CSV_Sht_Name).Range("C14:C" & lastrow_CSV).Copy
'Paste Data
Windows("Master Workbook").Activate
lastcol = Cells(2, Columns.Count).End(xlToLeft).Column
Cells(1, lastcol).Offset(, 1).Value = CSV_Wbk_Title
Cells(1, lastcol).Offset(1, 1).Select
ActiveSheet.Paste
'Add average.
lastrow = Cells(Rows.Count, lastcol + 1).End(xlUp).Row
averageRange = Range(Cells(2, lastcol + 1), Cells(lastrow, lastcol + 1))
With Cells(lastrow + 1, lastcol + 1)
.Value = Application.WorksheetFunction.Average(averageRange)
.Font.Bold = True
End With
CSV_WB.Close
CSV_files = Dir
Loop
End Sub
【问题讨论】:
标签: excel csv macros excel-2010 vba