Donc, fondamentalement, je traite une feuille de données, jusqu'à environ 200 000 rangées. Les données sont quelque peu formatées comme indiquées ci-dessous (fausses données). J'essaie d'analyser chaque cycle pour vous assurer que certaines gammes de température et de pression ont été touchées pour chaque cycle (par exemple, la température est comprise entre 120 et 18 pour tout cycle donné).
var = ThisWorkbook.Sheets("Data").Range("A2")
For i = 2 To lastRow
If ThisWorkbook.Sheets("Data").Cells(i, 1) = var Then
'various if statements go here
Else
var = var + 1
End If
next i
3 Réponses :
Vous devriez être capable de faire quelque chose comme ceci (en supposant que Cola est trié par cycle code> et n'a pas de cellules vides)
Cela semble fonctionner comme prévu jusqu'à présent. Je continuerai à tester et à vous faire savoir si je trouve des problèmes. Merci!
Voici une fonction que vous pouvez ajuster si nécessaire. Il prend la plage de données comme une entrée, trouve tous les cycles où les valeurs tombent en dehors de la plage et renvoient une collection de «numéros de titre» de mauvais cycle. Ceux-ci pourraient être mis dans une autre plage, imprimés dans une boîte de message ou traité d'une autre manière.
Public Function findBadCycles(rngRangeToCheck As Range) As Collection
Dim dblMinTemp As Double
Dim dblMaxTemp As Double
Dim dblMinPress As Double
Dim dblMaxPress As Double
dblMinTemp = 120
dblMaxTemp = 130
dblMinPress = 320
dblMaxPress = 340
Dim colBadCycles As Collection
Set colBadCycles = New Collection
Dim i As Long
For i = 2 To rngRangeToCheck.Rows
If rngRangeToCheck.Cells(i, 2) < dblMinTemp Or rngRangeToCheck.Cells(i, 2) > dblMaxTemp Then
colBadCycles.Add rngRangeToCheck.Cells(i, 1).Value
elseif (rngRangeToCheck.Cells(i, 3) < dblMinPress) Or (rngRangeToCheck.Cells(i, 3) > dblMaxPress):
colBadCycles.Add rngRangeToCheck.Cells(i, 1).Value
End If
Next i
Set findBadCycles = colBadCycles
End Function
OOH, il s'agit de certaines fonctionnalités qui seraient vraiment nécessaires. Je verrai si je peux en quelque sorte ajouter ceci sur la réponse de Tim.
@ Cybernétique.nomad Bonne prise, merci. Jeté cela ensemble rapidement, il pourrait donc y avoir d'autres problèmes aussi ...
Utilisation d'un (code> variante variante code> Une approche sera beaucoup plus rapide pour 200 000 lignes
une simple boucle sur la matrice, identifiant la première et dernière ligne de chaque cycle, puis une boucle sur ce cycle pour traiter Les données feront. P>
somtation comme celui-ci p>
J'ai inclus un exemple de la manière dont vous pourriez traiter les données: renvoyer le déviation type MIN, MAX, AVG et Population de TEMP et Appuyez sur, placé dans la ligne à côté de la première entrée de chaque cycle
(Comme vous ne dites pas ce que votre traitement réel est, traitez-le comme un modèle et une mise à jour en fonction de vos besoins) p>
sur mon matériel, fonctionne dans 1.7S sur un ensemble aléatoire de données, 200 000 lignes < / p>
Vos données sont-elles triées par
cycle code>?Comme Tim Demanda ... Si les données sont triées par cycle, vous pourriez avoir des variables pour garder min / max de température / pression, ou quels que soient vos besoins. Ensuite, dès qu'un nouveau cycle est atteint, faites toute la sortie que vous souhaitez et réinitialisez les variables.
Oui. Les données sont en réalité des données de série chronologique, chaque cycle étant quelque chose comme 5 secondes. Mais à cause de certaines choses étranges avec quand le cycle commence (13h00:10 vs 13h00h00), nous obtenons les cycles inégaux.
Avec 200 000 lignes, vous voudrez utiliser une approche de variante de réseau. Toute solution qui boucle à travers la gamme sera très lente.
@chrisneilsen Je pensais que pour que les boucles soient lentes (prenant actuellement environ 10 secondes pour une rangée de 100 000, pas très bien, pas horrible). Avez-vous des conseils sur où commencer avec des tableaux de variante dans ce contexte?