我正在尝试循环遍历文件夹中的所有文件,对于这些文件,我想运行一个公式来填充 20x2 单元格(例如 N1:O20),并且我想保留找到的值并将下一个值附加到上一次迭代的底部。
这是我正在使用的代码,A1:K36004 是.dat 文件显示其信息的地方。
Do While Len(strFile) > 0 '在此处添加 clearcontents 将在下一次迭代中清除公式值
With ws.QueryTables.Add(Connection:="TEXT;" & strFile, Destination:=ws.Range("A1"))
.TextFileParseType = xlDelimited
.TextFileCommaDelimiter = True
.Refresh
End With
'End Extraction
' Filter_Minute Macro
我需要将这些值保存在位置中,并在下一次迭代中移至下一个空行
Range("N5").Select
Range("N5").Formula = "=INDEX($A$5:$A$36004,(ROW(N5)-5)*1200+1,1)"
Selection.AutoFill Destination:=Range("N5:N34"), Type:=xlFillDefault
Range("N5:N34").Select
Range("N5:N34").Select
Range("O5").Select
Range("O5").Formula = "=MAX(INDEX($J$3:$J$36004,(ROW(H3)-3)*1200+1,1):INDEX($J$3:$J$36004,(ROW(H4)-3)*1200,1))"
Selection.AutoFill Destination:=Range("O5:O34"), Type:=xlFillDefault
Range("O5:O34").Select
Range("O5:O34").Select
strFile = Dir
环形
这张图片显示了下一次迭代中发生的情况,其中整个先前的计数被移动。
谢谢你的时间。
答案1
我不完全明白你在问什么(毫无疑问),但在机械地跟踪固定目标范围(N1:O20)的简单情况下:
- x 是范围内的第一行 (1)
- 行数 (numRows) 是一个常数 (20)
- VBA 公式中的目标范围是形式为“Nx:Ox+numRows-1”的字符串值 (theRange)
- 在循环开始之前分配第一个 x 值
- 每次迭代:theRange = “N” & str(x) & “:O” & str(x+numRows-1); {引用范围为
range.(theRange)
无引号}; x = x + numRows; 循环结束
第一次通过:theRange="N1:O20"。第二次通过:theRange="N21:O40"
使用有意义的变量名。
因此,基本上,您要跟踪您感兴趣的信息的“框架端点”,然后移动框架。如果您的框架大小可变,您将需要更多逻辑来确定如何指定端点。在您的示例文本中,起始行将是 1,在您的图片中,起始行将是 5。
对同一循环中所需的任何其他变量范围使用类似的方案。