› Excel e gli applicativi Microsoft Office › Disporre i valori di una cella in più celle
-
AutoreArticoli
-
Ciao a tutti,
ho questa situazione: nella cella A1 sono contenuti i valori 10, 20, 30 e 40.
Come posso far sì che il valore 10 rimanga in A1, il 20 vada ad essere scritto in A2, il 30 in A3 ed il 40 in A4, creando quindi le necessarie nuove righe, senza però far tutto ciò manualmente ?
C’è un modo ?
Grazie mille
Mentre restiamo in attesa che alleghi un file di esempio che rispecchia la reale situazione, prova a dare una lettura alla funzione Split che combinata ad un ciclo For dovrebbe fare ciò che chiedi. Magari nel file che alleghi prova a fare un tentativo come suggerito.
Puoi usare testo in colonne e poi il trasponi dell'incolla speciale oppure registrare una macro che faccia le due cose in sequenza
ciao,se vuoi il risultato nella stessa colonna di partenza (cella A1 in particolare) ci vuole il vba, se invece va bene il risultato anche in colonna B (ad esempio), con i numeri 10,20,30,40 (o altri) in A1
Excel 365, in B1 (si espande da sola)
=DIVIDI.TESTO(A1;;",")
Versione di excel < 365, in B1 e trascini in basso
=ANNULLA.SPAZI(STRINGA.ESTRAI(SOSTITUISCI($A$1;",";RIPETI(" ";50));50*RIF.RIGA(A1)-49;50))
Come già suggerito, se invece vuoi i risultati a partire da A1
Sub DividiN() Dim num, i As Integer num = Split(Range("A1"), ",") For i = 0 To UBound(num) Cells(i + 1, 1) = num(i) Next i End Sub
ciao,se vuoi il risultato nella stessa colonna di partenza (cella A1 in particolare) ci vuole il vba
non lo sapevo
alternativa con i passaggi del post #53299 registrati e macro rivista
Sub a() Application.ScreenUpdating = False Range("A1").Activate Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _ TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _ Semicolon:=False, Comma:=True, Space:=False, Other:=False, FieldInfo _ :=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1)), TrailingMinusNumbers:= _ True Range("A1:D1").Copy Range("E1").PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _ False, Transpose:=True Columns("A:D").Delete Shift:=xlToLeft Application.CutCopyMode = False Range("a1").Activate Application.ScreenUpdating = True End Sub
Mentre restiamo in attesa che alleghi un file di esempio che rispecchia la reale situazione
allego file esempio e preciso che nel mio pacchetto office prof plus 2019 non c'è la funzione DIVIDI (split)
Ci sono alternative ?
Grazie mille
Allegati:
You must be logged in to view attached files.intanto che aspetti l'intervento di Alex, potresti provare la soluzione proposta #53311
ciao
da tirare in basso
=SE.ERRORE(FILTRO.XML("<d>"&SOSTITUISCI($A$1;",";"")&"</d>";"//a["&RIF.RIGA(A1)&"]");"")
ciao
ciao Gianfranco, ti ringrazio per l'aiuto ma non mi funziona
sto provando le vostre soluzioni, ma non so farle funzionare.
Invece che il file esempio, allego il file reale che contiene le stringhe di testo, da dividere una per cella
Allegati:
You must be logged in to view attached files.per far funzionare una soluzione devi adattarla al tuo caso, mettendo la/le celle corrette...
per far funzionare una soluzione devi adattarla al tuo caso, mettendo la/le celle corrette...
si certo, a questo ci ero arrivato, ma nel tuo codice c'è indicata solo una cella (A1), io metto B1 per partire da qui con i risultati, ma non funziona lo stesso.
Sub DividiN() Dim num, i As Integer num = Split(Range("B1"), ",") For i = 0 To UBound(num) Cells(i + 1, 1) = num(i) Next i End Sub
Prova questo codice (il risultato da "B3" in giù):
Option Explicit Sub dividi() Dim dict As Object Dim ur As Long, i As Long, j As Long, k As Long Dim item As Variant ur = Cells(Rows.Count, "A").End(xlUp).Row Set dict = CreateObject("Scripting.Dictionary") For i = 1 To ur If Trim(Range("A" & i).Value) <> "" Then item = Split(Range("A" & i).Value, ",") For j = LBound(item) To UBound(item) dict.Add k, Trim(item(j)) k = k + 1 Next j End If Next i If k > 0 Then Range("B3").Resize(k, 1).Value = Application.Transpose(dict.items) End If End Sub
ciao
ti ci vuole il vba per inserire anche le righe
comunque questa
=SE.ERRORE(FILTRO.XML("<d>"&SOSTITUISCI($A$1;",";"")&"</d>";"//a["&RIF.RIGA(A1)&"]");"")
se hai office prof plus 2019 funziona
solo che tu non hai solo A1 ma una sfilza di righe
tra la richiesta iniziale ed il file allegato dopo c'è ben poco in comune, ovvio che quanto proposto non funzioni.
Se hai excel 365, dove vuoi (si espande da sola)
=DIVIDI.TESTO(TESTO.UNISCI(",";;A3:A908);;",")
Per il file che hai allegato, vba che scrive in colonna B
Sub DividiN() Dim i As Integer, r As Integer, j As Integer r = 3 For i = 3 To Range("A" & Rows.Count).End(xlUp).Row If InStr(Cells(i, 1), ",") = 0 Then Cells(r, 2) = Cells(i, 1): r = r + 1 Else For j = 0 To UBound(Split(Cells(i, 1), ",")) Cells(r, 2) = Split(Cells(i, 1), ",")(j): r = r + 1 Next j End If Next i End Sub
-
AutoreArticoli