VBA Do Until Loop, spostando l'intervallo della formula


-1

Sto cercando di eseguire un ciclo attraverso tutti i file in una cartella, con questi file voglio eseguire una formula che riempirà 20x2 celle (N1: O20 per esempio) e voglio conservare i valori trovati e aggiungere i valori successivi a il fondo dell'iterazione precedente.

Ecco il mio codice con cui sto lavorando, A1: K36004 è dove i file .dat visualizzano le loro informazioni.

Do While Len (strFile)> 0 'L'aggiunta di clearcontents qui cancella il valore della formula alla successiva iterazione

With ws.QueryTables.Add(Connection:="TEXT;" & strFile, Destination:=ws.Range("A1"))
     .TextFileParseType = xlDelimited
     .TextFileCommaDelimiter = True
     .Refresh
End With
'End Extraction
' Filter_Minute Macro

Ho bisogno che questi valori vengano prodotti per essere salvati in posizione e la successiva iterazione viene spostata nella riga vuota successiva

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

Ciclo continuo

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

Questa immagine mostra cosa succede nelle iterazioni successive con l'intero conteggio precedente spostato.

Grazie per il tuo tempo.

Risposte:


0

Non seguo completamente ciò che stai chiedendo (non c'è dubbio), ma nel semplice caso di tenere traccia meccanicamente di un intervallo di destinazione fisso (N1: O20):

  • x è la prima riga dell'intervallo (1)
  • il numero di righe (numRows) è una costante (20)
  • un intervallo di destinazione nelle formule VBA è un valore di stringa (theRange) del modulo "Nx: Ox + numRows-1"
  • il primo valore x viene assegnato prima dell'inizio del loop
  • per ogni iterazione: theRange = "N" & str (x) & ": O" & str (x + numRows-1); {fa riferimento all'intervallo come range.(theRange)senza virgolette}; x = x + numRows; end-of-loop

La prima volta attraverso: theRange = "N1: O20". Seconda volta: theRange = "N21: O40"

Usa nomi di variabili significativi.

Quindi, in sostanza, tieni traccia dei "punti finali del frame" delle informazioni che ti interessano, quindi sposta il frame. Se il frame ha dimensioni variabili, sarà necessaria molta più logica per capire come specificare gli endpoint. Nel testo di esempio, la riga iniziale sarebbe 1, nella tua immagine, la riga iniziale sarebbe 5.

Utilizzare uno schema simile per tutti gli altri intervalli di variabili necessari nello stesso loop.


Ok grazie, non è stata fatta una domanda ma sei su ciò di cui stavo parlando. Lo proverò.
Lavori di lavoro del
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.