-1

Я пытаюсь выполнить цикл по всем файлам в папке, с этими файлами я хочу запустить формулу, которая заполнит ячейки размером 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 ответ1

0

Я не полностью следую тому, что вы спрашиваете (без вопросов), но в простом случае механического отслеживания фиксированного диапазона назначения (N1:O20):

  • х - первая строка в диапазоне (1)
  • количество строк (numRows) является константой (20)
  • диапазон назначения в формулах VBA - это строковое значение (theRange) в форме "Nx:Ox+ numRows-1"
  • первое значение х назначается до начала цикла
  • для каждой итерации: theRange = "N" & str (x) & ": O" & str (x+ numRows-1); {ссылаться на диапазон как на range.(theRange) без кавычек}; x = x + numRows; конец-петля

Первый раз через: theRange = "N1: O20". Второй раз: theRange = "N21: O40"

Используйте значимые имена переменных.

В общем, вы отслеживаете "конечные точки фрейма" интересующей вас информации, а затем перемещаете фрейм. Если ваш фрейм имеет переменный размер, вам понадобится гораздо больше логики, чтобы понять, как указывать конечные точки. В вашем примере текста, начальная строка будет 1, на вашей картинке, начальная строка будет 5.

Используйте аналогичную схему для любых других диапазонов переменных, которые вам нужны в том же цикле.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .