Excel - Trouver la valeur maximale toutes les 10 lignes et marquer la ligne

Problème

J'ai besoin d'aide pour créer une formule dans Excel afin d'identifier les valeurs les plus élevées et les plus basses Toutes les 10 lignes ALORS Identifiez ces deux lignes en plaçant du texte ou un numéro dans une colonne vide dans les lignes avec les valeurs les plus élevées et les plus basses. Par exemple, je souhaite renvoyer le mot conserver dans la colonne A3 pour SEULEMENT le prix de transaction le plus élevé et le plus bas pour chaque incrément de 10 rangées. De cette façon, je peux trier les données par conserver et supprimer les 8 autres lignes de données. De cette façon, je peux préserver la plupart de mes données et réduire considérablement la taille du fichier.

J'utilise Excel 2007 et j'ai 160 000 lignes de données. Le but de la formule est de réduire ces données à 80%

La feuille de calcul ci-dessous donne un exemple simple.

 Trade Time Price C est une colonne vierge pour la formule. ___________A____________B_____________C Rangée 1 19:30:25 Rangée 2 19:30:26 121.80 Garder rangée 3 19:30:29 Rangée 3 19:30:31 121.86 Rangée rangée 5 19 : 39: 35 121, 84 

Toute aide serait grandement appréciée.

Solution

Il y a 3 macros "test", "test1" et "défaire". Test1 est intégré à "test", il suffit donc de ne lancer que la macro "test".

Les trois macros doivent être dans le module. La macro "annuler" annule les résultats de la macro.

Prenez un petit extrait de vos données sur environ 31 lignes et vérifiez la macro. Si les résultats sont corrects, vous pouvez utiliser les macros de votre fichier d'origine.

GARDEZ LE FICHIER ORIGINAL EN TOUTE SÉCURITÉ QU'IL puisse être récupéré.

Macro 1:

 Dim r As Range, r1 As Range, x As Double, y As Double Dim j As Entier, k As Integer Dim r2 As Range, m As Integer Sous test () Feuilles de calcul ("sheet1"). Activez Range ("c1"). = "signal" Définissez r2 = Plage (Plage ("B1"), Plage ("B1"). Fin (xlDown)) j = 1 m = 1 Définissez r = Cellules (j * m + 1, "B") MsgBox r.Address Set r1 = Plage (r, r.Offset (9, 0)) MsgBox r1.Address Si r.Offset (9, 0) = "" Puis quittez Do x = WorksheetFunction.Min (r1) y = WorksheetFunction .Max (r1) x MsgBox MsgBox yk = WorksheetFunction.Match (x, r2, 0) Cellules (k, "c") = "garder" k = WorksheetFunction.Match (y, r2, 0) Cellules (k, "c ") =" garder "m = m + 10 MsgBox m Test de boucle1 End Sub 

Macro 2:

 Sous test1 () Feuilles de travail ("sheet1"). Activez Set r = Range (Range ("A1"), Range ("A1"). End (xlDown) .Offset (0, 3)) r.Fichier AutoFilter: = 3, Critères1: = "garder" r.Cells.SpecialCells (xlCellTypeVisible) .Copies de calcul ("feuille2"). Plage ("A2") ActiveSheet.AutoFilterMode = False End Sub 

Macro 3:

 Sub undo () Worksheets ("sheet1"). Range ("c1"). EntireColumn.Delete Worksheets ("sheet2"). Cells.Clear End Sub 

Remarque

Merci à venkat1926 pour cette astuce sur le forum.

Article Précédent Article Suivant

Les Meilleurs Conseils