VBA Do Until Loop,转移公式范围

VBA Do Until Loop,转移公式范围

我正在尝试循环遍历文件夹中的所有文件,对于这些文件,我想运行一个公式来填充 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

环形

https://i.stack.imgur.com/uo3Wa.png

这张图片显示了下一次迭代中发生的情况,其中整个先前的计数被移动。

谢谢你的时间。

答案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。

对同一循环中所需的任何其他变量范围使用类似的方案。

相关内容