› Sviluppare funzionalita su Microsoft Office con VBA › Copiare dati e ordinarli con macro (funziona in parte)
Stai vedendo 12 articoli - dal 1 a 12 (di 12 totali)
-
AutoreArticoli
-
Buonasera a tutti, sono nuovo ed è la prima volta che scrivo.Avrei bisogno se possibile di aiuto per risolvere un problema con una macro.Premetto che sono un principiante e non conosco bene le macro ma navigando su internet ne ho trovata una che ho sistemato alla meglio per soddisfare le mie esigenze.Quello che mi serve è una macro che copia dal "foglio1" i dati li riporti sul "foglio2" e raggruppa gli articoli e somma i relativi valori.Quindi colonna A = ArticoloColonna B = valoreSotto le rispettive colonne deve raggruppare gli stessi articoli e in corrispondenza dell'articolo fare la somma di quelli ugualiIl problema che non riesco a risolvere e che pur riuscendo a raggruppare gli articoli le somme dei loro valori si sballano.Allego il file di esempio che sicuramente è molto piu chiaro della mia spiegazione 🙂Grazie mille a tutti in anticipo per l'aiuto.
Allegati:
You must be logged in to view attached files.Ciao Pabloin questo Forum si è un po' più tolleranti di altri circa il crossposting.Ma non è corretto postare la stessa domanda a distanza di 10 minuti in altro/i Forum. Un po' di rispetto verso chi spende il "SUO" tempo per un "TUO" problema non guasterebbe.Ciao,MarioBuongiorno a tuttiinnanzitutto chiedo scusa se ho commesso un atto di "crossposting" , ne ho appena scoperto il significato.Non ho mai usato un forum per chiedere aiuto quindi non sono molto pratico di certe cose.Cercavo solo di risolvere un problema.Buonaseraragazzi cortesemente qualcuno me la da una mano a risolvere il problema ?Grazie milleMa perchè usare una macro e non un tabella pivot che lo fa in automatico?Ciao Luca73non vorrei utilizzare una tabella Pivot in quanto il primo foglio viene aggiornato continuamente , in questo modo dovrei rifare la tabella ogni volta, con la macro invece mi copia i dati nel secondo foglio , me li ordina e mi fa le somme.Patel , questo è il link dell'altro forum []Grazie ragazziCiao Pablosto vedendo che nella tua macro "Crea_elenco2" ci sono molte incongruenze che non capisco, vedi lineee codice evidenziate
Sub crea_Elenco2() Dim c As Range Dim W As Worksheet Dim Area As Range Dim dato As String Dim i As Integer Dim Trovato As Boolean Set W = Sheets("Foglio2") W.Select UR1 = W.Range("F" & Rows.Count).End(xlUp).Row W.Range("F30:H30" & UR1).Clear Set Area = W.Range("F5:F" & UR1) For Each c In Area dato = c.Value i = 40 Trovato = False While W.Cells(i, 6).Value <> "" And Not Trovato If W.Cells(i, 6).Value = dato Then Trovato = True End If i = i + 1 Wend If Not Trovato Then W.Cells(i, 6).Value = dato End If Next W.Select W.Range("F30:H30" & UR1).Select Selection.Sort Key1:=Range("F5"), Order1:=xlAscending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _ DataOption1:=xlSortTextAsNumbers W.Range("F5").Select For RRF = 1 To W.Range("F" & Rows.Count).End(xlUp).Row NT = W.Range("F" & RRF).Value For RR1 = 1 To UR1 If NT = W.Range("F" & RR1).Value Then W.Range("H" & RRF).Value = W.Range("H" & RRF).Value + W.Range("H" & RR1).Value Next RR1 Next RRF With Worksheets("foglio2").Range("F30:H35") .Font.Size = 12 .Font.Bold = True Range("F30:H35").NumberFormat = "#,##0.00" .Cells(intRow, intCol).Borders.LineStyle = X1Double With Range("F30:H35").Borders .LineStyle = xlContinuous .Weight = 2 End With End With End Sub
Qual è il punto di avere gusti diversi, se non mostrare che i cervelli lavorano diversamente, che pensiamo diversamente?( Alan Turing)
Cio che dici non è vero.Se la tua tabella la definisci con le righe fino a fine foglio poi bastano tra righe di codice per farla aggiornare.Ti allegao un foglio di esempio.Cambia i numeri o aggiungi righe in Dati e poi vai a vedere la tabella e vedrai che sia aggiorna in automatico.Il codice nel folgio della tabbella èPrivate Sub Worksheet_Activate() Dim PVLT As PivotItem ActiveSheet.PivotTables("TP_Luca").PivotCache.Refresh ActiveSheet.PivotTables("TP_Luca").Update With ActiveSheet.PivotTables("TP_Luca").PivotFields("nome ") On Error Resume Next For Each PVLT In .PivotItems PVLT.Visible = True Next End With On Error GoTo 0 With ActiveSheet.PivotTables("TP_Luca").PivotFields("nome ") .PivotItems("(blank)").Visible = False End With End Sub
Allegati:
You must be logged in to view attached files.Ciao Albatros54quello che la macro dovrebbe fare è il raggruppare i codici uguali (ripetuti diverse volte) e sommare i loro valori.I codici che hai evidenziato fanno riferimento al numero di riga in cui devono essere riportati i dati raggruppati ( in realtà mi piacerebbe che la macro scrivesse trovando da sola la prima riga vuota e non che stabilisca io in partenza il numero della riga dove andare a scrivere, nel codice io ho impostato il raggruppamento dalla riga 30 in poi)Come detto è una macro che ho trovato e che ho cercato di adattare alle mie esigenzeIl problema che mi basterebbe risolvere per il momento è che non deve modificare le somme ogni qual volta viene premuto il bottone raggruppa come invece adesso fa, ma lo faccia solo la prima volta e basta.Spero di essermi spiegato e scusate se magari sono poco chiaro 🙂Grazie anche a LUCa73 per il consiglio, ma con la macro la cosa è piu veloce e carina 🙂dato che la soluzione di LUCA73(che saluto)non ti garba, prova la macro che ti posto
Option Explicit Sub crea_Elenco2() Dim c As Range Dim W As Worksheet Dim Area As Range Dim dato As String Dim i As Integer, ur1 As Integer, lng As Integer Dim valore As Integer, valore1 As Integer, intRow As Integer Dim col As Collection Dim v As Variant Dim X1Double As Integer, intCol As Integer On Error Resume Next Set W = Sheets("Foglio2") W.Select ur1 = W.Range("F" & Rows.Count).End(xlUp).Row W.Range("F30:H" & ur1).Clear Set Area = W.Range("F5:F" & ur1) Set col = New Collection For lng = 5 To ur1 col.Add CStr(W.Range("f" & lng).Value), _ CStr(W.Range("f" & lng).Value) Next i = 30 For Each v In col valore1 = 0 valore = 0 For Each c In Area If v = c Then valore = c.Offset(0, 2) valore1 = valore + valore1 End If Next W.Cells(i, 6) = v W.Cells(i, 7) = valore1 i = i + 1 Next With Worksheets("foglio2").Range("F30:H35") .Font.Size = 12 .Font.Bold = True Range("F30:H35").NumberFormat = "#,##0.00" .Cells(intRow, intCol).Borders.LineStyle = X1Double With Range("F30:H35").Borders .LineStyle = xlContinuous .Weight = 2 End With End With End Sub
Qual è il punto di avere gusti diversi, se non mostrare che i cervelli lavorano diversamente, che pensiamo diversamente?( Alan Turing)
Grazie mille Albatros è perfetta 🙂Finalmente funziona.Quello che vorrei capire come dicevo, è se possibile che i dati vengano scritti a partire ad esempio dalla 2° o 3° riga libera al di sotto dei dati copiati dal foglio 1.Questo perché in realtà le righe che riporta dal primo foglio potrebbero variare di volta in volta.Grazie mille di nuovo 🙂 -
AutoreArticoli
Stai vedendo 12 articoli - dal 1 a 12 (di 12 totali)