Sub 插值()
Dim a
Dim cout%, i%, k%, r&, c% '注意申明变量r要为长整型
Dim myfile As String, Arr(100) As String, Arr0(100) As String
a = Array(1, 2, 3, 4, 5, 6, 7, 8, 13, 15, 25, 26) '用数组指定列号
'a = Array(1, 2, 4, 6) '测试用的
c = 29 'j是相对原始数据的位置(一定要大于列序号的最大值),j相关的两个地方:"=CODE(RC[-3])" ///R[-1]C[-4],RC[-4])
k = 12 'k是数组a的维度
Application.Calculation = xlAutomatic ' 计算选项设置为自动
fPath = "E:\30-zlzk\(20191115-20200107)52m试验车工地数据-长沙万润\异常查看与检测\data_all\target\csv\" '文件路径
'遍历文件夹,提取文件名称
myfile = Dir(fPath & "*.csv") '注意数据文件的格式
cout = cout + 1
Arr0(cout) = myfile
Name fPath & myfile As fPath & 1 & ".csv"
Arr(cout) = cout & ".csv"
Do While myfile <> ""
myfile = Dir
If myfile = "" Then
Exit Do
End If
cout = cout + 1
Arr0(cout) = myfile '将最初文件名称存在数组
Name fPath & myfile As fPath & cout & ".csv" '修改文件名
Arr(cout) = cout & ".csv" '把修改的文件名存在另一个数组
Loop
Debug.Print "总共表格数:" & cout
Debug.Print cout & ".csv"
For m = 1 To cout
Workbooks.Open Filename:=fPath & Arr(m) '循环打开Excel文件
Debug.Print "打开的" & m & "个表格,名称为" & Arr(m)
application.screenupdating = false
For i = 0 To k - 1 'i 第一个是指定列数据
r = Workbooks(Arr(m)).Sheets(1).Cells(Rows.Count, a(i)).End(xlUp).Row - 1 '提取第一列最大的列号,考虑函数Resize(),要-1?
with Workbooks(Arr(m)).Sheets(1)
.Cells(2, c).Resize(r, 1).FormulaR1C1 = "=CODE(RC[-28])" ' 在对应的列输入code公式,这个地方要注意公式引用的位置 C中的值应该为 - j
'插值
.Cells(2, c + 1).Resize(r, 1) = "=IF(RC[-1]=32,R[-1]C[-29],RC[-29])"
'复制数据
.Cells(2, c + 1).Resize(r, 1).Copy
.Cells(2, c + 1).PasteSpecial Paste:=xlPasteValues '在原列进行选择性黏贴
.Cells(2, a(i)).Resize(r, 1).Value = Workbooks(Arr(m)).Sheets(1).Cells(2, c + 1).Resize(r, 1).Value '把插值后的数据复制到原列
'删除过程数据
.Columns(c).ClearContents
.Columns(c + 1).ClearContents
.Columns(c + 2).ClearContents
.Columns(1).Select
'插值
.Cells(2, c + 1).Resize(r, 1) = "=IF(RC[-1]=32,R[-1]C[-29],RC[-29])"
'复制数据
.Cells(2, c + 1).Resize(r, 1).Copy
.Cells(2, c + 1).PasteSpecial Paste:=xlPasteValues '在原列进行选择性黏贴
.Cells(2, a(i)).Resize(r, 1).Value = Workbooks(Arr(m)).Sheets(1).Cells(2, c + 1).Resize(r, 1).Value '把插值后的数据复制到原列
'删除过程数据
.Columns(c).ClearContents
.Columns(c + 1).ClearContents
.Columns(c + 2).ClearContents
.Columns(1).Select
Next
application.screenupdating = ture
Application.DisplayAlerts = False
ActiveWorkbook.Save
ActiveWorkbook.Close savechanges = True '关闭打开的文件
' Application.Quit 退出excel
Debug.Print "完成操作"
Next
For i = 1 To cout
Name fPath & i & ".csv" As fPath & Arr0(i)
Next
Debug.Print "所有数据全部完成"
End Sub