› Excel e gli applicativi Microsoft Office › Estrazione in altro foglio dei dieci valori più alti
-
AutoreArticoli
-
Buongiorno a tutti,
avrei bisogno di estrarre i 10 valori più alti (compresi i duplicati) delle colonne C , I , O , U del file in allegato.
La particolarità della richiesta è che avrei bisogno di farlo su un foglio diverso e soprattutto che accanto al valore venisse riportato anche il testo corrispondente (colonne A , G , M , S).
Qualcuno riesce ad aiutarmi???
Spero di essere stato chiaro nella descrizione del problema.
Allegati:
You must be logged in to view attached files.Ciao, ho modificato il titolo del messaggio perché scritto in maiuscolo (che equivale a gridare). Ho anche sintetizzato meglio la questione.
Per quanto riguarda la soluzione al tuo problema, hai bisogno che sia risolto con le Formule o va bene anche in VBA?
Innanzitutto chiedo scusa per il carattere del titolo, non era mia intenzione "gridare".
Diciamo che entrambe le soluzioni potrebbero andare bene, preferirei una via tramite formule visto che ho già delle macro che girano e non volevo affidarmi solo al vba.
Diciamo che entrambe le soluzioni potrebbero andare bene
Ciao, io non posseggo la versione 365 quindi non posso provare la proposta di gianfranco55 (ma non ho dubbi sul fatto che funzioni al 100%).
Se vuoi un'alternativa con una macro prova questa...
Crea un nuovo foglio e lo rinomini "Estrai", poi in un Modulo Standard inserisci questo codice:
Option Explicit Sub estrai_e_ordina() Dim arr() As Variant Dim tempArr(1) As Variant Dim rng As Range Dim ur As Long, i As Long, j As Long, k As Byte Dim c As Byte Dim uc As Integer Dim wsEstrai As Worksheet Set wsEstrai = ThisWorkbook.Worksheets("Estrai") For c = 1 To 19 Step 6 ur = Foglio2.Cells(Rows.Count, c).End(xlUp).Row Set rng = Range(Foglio2.Cells(7, 1), Foglio2.Cells(ur, 3)) ReDim arr(0 To rng.Rows.Count - 1, 1) For i = 1 To rng.Rows.Count arr((i - 1), 0) = Foglio2.Cells(i + 6, c).Value arr((i - 1), 1) = Foglio2.Cells(i + 6, c + 2).Value Next i For i = LBound(arr, 1) To UBound(arr, 1) For j = i + 1 To UBound(arr, 1) If arr(i, 1) < arr(j, 1) Then tempArr(0) = arr(i, 0) tempArr(1) = arr(i, 1) arr(i, 0) = arr(j, 0) arr(i, 1) = arr(j, 1) arr(j, 0) = tempArr(0) arr(j, 1) = tempArr(1) End If Next j Next i With wsEstrai uc = .Cells(3, Columns.Count).End(xlToLeft).Column If uc = 1 Then uc = -1 .Cells(1, uc + 2).Value = "Settimana " & k + 1 .Cells(2, uc + 2).Value = "Prodotto" .Cells(2, uc + 3).Value = "Quantità" For i = 1 To 10 .Cells(i + 2, uc + 2).Value = arr(i - 1, 0) .Cells(i + 2, uc + 3).Value = arr(i - 1, 1) Next i k = k + 1 End With Next c wsEstrai.Columns.AutoFit wsEstrai.Activate Set wsEstrai = Nothing MsgBox "Fatto!", vbInformation End Sub
Ciao.
ciao
vecchio trentino
LET(F...........è come la vecchia formula che creavi per non ripetere la formula
STACK.VERT(..........traduciamolo in metti uno sotto l'altro
SCEGLI.COL(LIB.SERVIZIO!A7:W1000;1;3);
SCEGLI.COL(LIB.SERVIZIO!A7:W1000;7;9);
SCEGLI.COL(LIB.SERVIZIO!A7:W1000;13;15);
SCEGLI.COL(LIB.SERVIZIO!A7:W1000;19;21)
scelgo le colonne che mi interessa mettere una sotto l'altra
sono in coppia
metti una sotto l'altra le colonne
1-3
7-9
13-15
19-21
fatto questo elimino gli zeri che si creano per le celle vuote (ho messo 1000 righe) usando FILTRO
FILTRO(F;SCEGLI.COL(F;1)
le metto in ordine decrescente con
DATI.ORDINA(......colonna da filtrare 2 (i numeri) e -1 per il decrescente
fatto questo utilizzo INCLUDI(..............10)
che mi estrae le prima 10 righe
risultato
Caspita una bomba
Ma la differenza tra STACK.VERT e A.COL (=TOCOL) ?
ciao
soluzione per excel 365 (matriciale, si espande da sola) per colonne A e C di LIB.SERVIZIO
=LET(l;LIB.SERVIZIO!C7:C100;STACK.ORIZ(LET(c;SE(l>=GRANDE(l;10);l);GRANDE(c;RIF.RIGA(INDIRETTO("A1:A"&CONTA.NUMERI(c)))));INDICE(LIB.SERVIZIO!A7:A100;A.COL(UNICI(SE(LET(c;SE(l>=GRANDE(l;10);l);GRANDE(c;RIF.RIGA(INDIRETTO("A1:A"&CONTA.NUMERI(c)))))=A.RIGA(l);SEQUENZA(;90);A));3))))
-
AutoreArticoli