Generare combinazioni da stringa di testo
Generare combinazioni da stringa di testo
Buongiorno a tutti,
so che sarà quasi impossibile ma essendo poco pratico sull'argomento vi chiedo:
ho bisogno di generare da una lista di prodotti le relative combinazioni a scelta multipla (esempio colore, finitura, accessori); le celle provengono da un .csv, per cui i valori sono separati da virgola
allego file di esempio
c'è minimamente una speranza di poterlo fare con qualche formula recondita?
Grazie in anticipo!
so che sarà quasi impossibile ma essendo poco pratico sull'argomento vi chiedo:
ho bisogno di generare da una lista di prodotti le relative combinazioni a scelta multipla (esempio colore, finitura, accessori); le celle provengono da un .csv, per cui i valori sono separati da virgola
allego file di esempio
c'è minimamente una speranza di poterlo fare con qualche formula recondita?
Grazie in anticipo!
- Allegati
-
- Provemmu.ods
- (11.14 KiB) Scaricato 105 volte
OpenOffice 4.1 su Windows 10
Re: Generare combinazioni da stringa di testo
sarebbe utile capire da cosa parti e a cosa vuoi arrivare con un esempio compilato a mano
-------------------
Libre Office 7.5.3.2 su Windows 11
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Libre Office 7.5.3.2 su Windows 11
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Re: Generare combinazioni da stringa di testo
nel file che ho allegato parto dalla riga evidenziata in giallo, vorrei generare nelle celle sottostanti tutte le combinazioni possibili considerando le variabili (Kelvin, Driver, Finitura, ecc.) ho compilato a mano la successione giusto come esempio..
OpenOffice 4.1 su Windows 10
Re: Generare combinazioni da stringa di testo
Scritta MOOOLTO velocemente (quindi MOOOOOLTO migliorabile) puoi usare una macro del genere:
Codice: Seleziona tutto
Sub Main
codice = 1
riga = 5
Kelvin2 = ThisComponent.Sheets.GetByName("Foglio3").GetCellRangeByName("C4").string
Do While Kelvin2 <> ""
If InStr(Kelvin2, ",") Then
Kelvin = Left(Kelvin2, InStr(Kelvin2, ",")-1)
Kelvin2 = Right(Kelvin2, Len(Kelvin2)-Len(Kelvin)- 2)
Else
Kelvin = Kelvin2
Kelvin2 = ""
End If
Gradi2 = ThisComponent.Sheets.GetByName("Foglio3").GetCellRangeByName("D4").string
Do While Gradi2 <> ""
If InStr(Gradi2, ",") Then
Gradi = Left(Gradi2, InStr(Gradi2, ",")-1)
Gradi2 = Right(Gradi2, Len(Gradi2)-Len(Gradi)- 2)
Else
Gradi = Gradi2
Gradi2 = ""
End If
Finitura2 = ThisComponent.Sheets.GetByName("Foglio3").GetCellRangeByName("E4").string
Do While Finitura2 <> ""
If InStr(Finitura2, ",") Then
Finitura = Left(Finitura2, InStr(Finitura2, ",")-1)
ThisComponent.Sheets(2).GetCellRangeByName("A" & riga).string = "variazione"
ThisComponent.Sheets(2).GetCellRangeByName("B" & riga).string = "30123012-" & Format(codice, "00")
ThisComponent.Sheets(2).GetCellRangeByName("C" & riga).string = Kelvin
ThisComponent.Sheets(2).GetCellRangeByName("D" & riga).string = Gradi
ThisComponent.Sheets(2).GetCellRangeByName("E" & riga).string = Finitura
ThisComponent.Sheets(2).GetCellRangeByName("F" & riga).string = "ON-OFF"
Finitura2 = Right(Finitura2, Len(Finitura2)-Len(Finitura)- 2)
Else
ThisComponent.Sheets(2).GetCellRangeByName("A" & riga).string = "variazione"
ThisComponent.Sheets(2).GetCellRangeByName("B" & riga).string = "30123012-" & Format(codice, "00")
ThisComponent.Sheets(2).GetCellRangeByName("C" & riga).string = Kelvin
ThisComponent.Sheets(2).GetCellRangeByName("D" & riga).string = Gradi
ThisComponent.Sheets(2).GetCellRangeByName("E" & riga).string = Finitura2
ThisComponent.Sheets(2).GetCellRangeByName("F" & riga).string = "ON-OFF"
Finitura2 = ""
End If
riga = riga + 1
codice = codice + 1
Loop
Loop
Loop
End Sub
Apache OpenOffice 4.1.5 su Windows 10
Se hai risolto il problema, ricordati di aggiungere [RISOLTO]: viewtopic.php?f=9&t=5661
Se hai risolto il problema, ricordati di aggiungere [RISOLTO]: viewtopic.php?f=9&t=5661
Re: Generare combinazioni da stringa di testo
FUNZIONA!!! Grazie mille Eramad!
Ora dovrei applicare il tutto a un foglio con più codici (allego esempio con 3 codici), dovrei applicare la macro a ogni riga spostando giù gli altri prodotti in pratica..
Devo intervenire sul GetCellRangeByName? Come è meglio procedere?
Ora dovrei applicare il tutto a un foglio con più codici (allego esempio con 3 codici), dovrei applicare la macro a ogni riga spostando giù gli altri prodotti in pratica..
Devo intervenire sul GetCellRangeByName? Come è meglio procedere?
- Allegati
-
- Provemmu.ods
- (9.97 KiB) Scaricato 86 volte
OpenOffice 4.1 su Windows 10
Re: Generare combinazioni da stringa di testo
La via più semplice (e forse più veloce) è quella di copiarla e incollarla altre 2 volte sotto in modo che si ripeta 3 volte in tutto.
Nelle 2 aggiuntive ovviamente andrà modificata la cella dove prende i dati e ovviamente andrà modificata la variabile riga che non dovrà più iniziare dalla 5 ma dalla prima libera.
Altrimenti dovresti inserire una nuova variabile che indichi in che riga deve prendere i dati e inserire un nuovo ciclo che racchiuda tutto e che si ripeta per 3 volte, andando a modificare la nuova variabile per fare in modo che ad ogni ciclo prenda i dati dalla riga successiva alla precedente.
Quindi, per darti un suggerimento, supponiamo che insierisci una variabile
la riga di codice
diventerebbe
Ovviamente a fine del nuovo ciclo la nuovavariabile deve aumentare di 1 e si deve ripetere finchè è minore di 7 (quindi fino a quando è uguale a 6)
Se riesci a capire come scrivere il nuovo ciclo che racchiuda tutti quelli della macro che ti ho scritto nel vecchio post, puoi usare questo metodo.
Altrimenti ricopia la vecchia macro 3 volte e modifica i riferimenti di Kelvin2, Gradi2 e Finitura2
Nelle 2 aggiuntive ovviamente andrà modificata la cella dove prende i dati e ovviamente andrà modificata la variabile riga che non dovrà più iniziare dalla 5 ma dalla prima libera.
Altrimenti dovresti inserire una nuova variabile che indichi in che riga deve prendere i dati e inserire un nuovo ciclo che racchiuda tutto e che si ripeta per 3 volte, andando a modificare la nuova variabile per fare in modo che ad ogni ciclo prenda i dati dalla riga successiva alla precedente.
Quindi, per darti un suggerimento, supponiamo che insierisci una variabile
Codice: Seleziona tutto
nuovavariabile = 4
Codice: Seleziona tutto
Kelvin2 = ThisComponent.Sheets.GetByName("Foglio3").GetCellRangeByName("C4").string
Codice: Seleziona tutto
Kelvin2 = ThisComponent.Sheets.GetByName("Foglio3").GetCellRangeByName("C" & nuovavariabile).string
Se riesci a capire come scrivere il nuovo ciclo che racchiuda tutti quelli della macro che ti ho scritto nel vecchio post, puoi usare questo metodo.
Altrimenti ricopia la vecchia macro 3 volte e modifica i riferimenti di Kelvin2, Gradi2 e Finitura2
Apache OpenOffice 4.1.5 su Windows 10
Se hai risolto il problema, ricordati di aggiungere [RISOLTO]: viewtopic.php?f=9&t=5661
Se hai risolto il problema, ricordati di aggiungere [RISOLTO]: viewtopic.php?f=9&t=5661
Re: Generare combinazioni da stringa di testo
Opterei per la soluzione con variabile visto che in futuro avrò decine di codici da processare, però non capisco in che punto devo aumentare la nuovavariabile, ci ho provato ma senza risultato (perdonami ma sono proprio alle prime armi)
ecco come ho modificato la macro
ecco come ho modificato la macro
Codice: Seleziona tutto
Sub Multirighe
codice = 1
riga = 5
nuova = 4
Kelvin2 = ThisComponent.Sheets.GetByName("Foglio3").GetCellRangeByName("C" & nuova).string
Do
Do While Kelvin2 <> ""
If InStr(Kelvin2, ",") Then
Kelvin = Left(Kelvin2, InStr(Kelvin2, ",")-1)
Kelvin2 = Right(Kelvin2, Len(Kelvin2)-Len(Kelvin)- 2)
Else
Kelvin = Kelvin2
Kelvin2 = ""
End If
Gradi2 = ThisComponent.Sheets.GetByName("Foglio3").GetCellRangeByName("D" & nuova).string
Do While Gradi2 <> ""
If InStr(Gradi2, ",") Then
Gradi = Left(Gradi2, InStr(Gradi2, ",")-1)
Gradi2 = Right(Gradi2, Len(Gradi2)-Len(Gradi)- 2)
Else
Gradi = Gradi2
Gradi2 = ""
End If
Finitura2 = ThisComponent.Sheets.GetByName("Foglio3").GetCellRangeByName("E" & nuova).string
Do While Finitura2 <> ""
If InStr(Finitura2, ",") Then
Finitura = Left(Finitura2, InStr(Finitura2, ",")-1)
ThisComponent.Sheets(2).GetCellRangeByName("A" & riga).string = "variazione"
ThisComponent.Sheets(2).GetCellRangeByName("B" & riga).string = "30123012-" & Format(codice, "00")
ThisComponent.Sheets(2).GetCellRangeByName("C" & riga).string = Kelvin
ThisComponent.Sheets(2).GetCellRangeByName("D" & riga).string = Gradi
ThisComponent.Sheets(2).GetCellRangeByName("E" & riga).string = Finitura
ThisComponent.Sheets(2).GetCellRangeByName("F" & riga).string = "ON-OFF"
Finitura2 = Right(Finitura2, Len(Finitura2)-Len(Finitura)- 2)
Else
ThisComponent.Sheets(2).GetCellRangeByName("A" & riga).string = "variazione"
ThisComponent.Sheets(2).GetCellRangeByName("B" & riga).string = "30123012-" & Format(codice, "00")
ThisComponent.Sheets(2).GetCellRangeByName("C" & riga).string = Kelvin
ThisComponent.Sheets(2).GetCellRangeByName("D" & riga).string = Gradi
ThisComponent.Sheets(2).GetCellRangeByName("E" & riga).string = Finitura2
ThisComponent.Sheets(2).GetCellRangeByName("F" & riga).string = "ON-OFF"
Finitura2 = ""
End If
riga = riga + 1
codice = codice + 1
Loop
Loop
Loop
nuova = nuova + 1
Loop until nuova = 6
OpenOffice 4.1 su Windows 10
Re: Generare combinazioni da stringa di testo
La macro così va bene...ma non benissimo
Correggi:
riga deve essere = 7 visto che la prima riga è la 7. Se lasci 5, ti sovrascrive le righe 5 e 6.
va messo dopo il Do altrimenti non cambia mai durante i cicli
se usi l'= allora devi mettere che si ripeta fino a quando nuova=7
quì a questo punto devi cambiare la parte che io avevo messo come testo fisso ("30123012-"). Sostituiscilo con la stringa della cella "B"&nuova
solito discorso di prima. Devi cambiare la stringa fissa con la stringa della cella "F"&nuova
Il resto dovrebbe funzionare alla grande.
Il modo migliore per vedere se va bene è capire cosa fa, provarla, valutare il risultato e se non va bene, capire quale passaggio sia sbagliato e correggerlo.
Ad esempio...se avessi provato la tua macro senza correzioni, ti saresti subito accorto che il codice per esempio non cambiava. Quindi saresti andato a leggere con attenzione la macro cercando la riga di codice che scrive nella colonna B e avresti visto che c'è un testo fisso invece di un qualcosa che possa variare nei cicli.
Vedrai che è un mondo appassionante e mi sembra che ti sia applicato molto bene per essere all'inizio.
Correggi:
Codice: Seleziona tutto
riga = 5
Codice: Seleziona tutto
Kelvin2 = ThisComponent.Sheets.GetByName("Foglio3").GetCellRangeByName("C" & nuova).string
Codice: Seleziona tutto
Loop until nuova = 6
Codice: Seleziona tutto
ThisComponent.Sheets(2).GetCellRangeByName("B" & riga).string = "30123012-" & Format(codice, "00")
Codice: Seleziona tutto
ThisComponent.Sheets(2).GetCellRangeByName("F" & riga).string = "ON-OFF"
Il resto dovrebbe funzionare alla grande.
Il modo migliore per vedere se va bene è capire cosa fa, provarla, valutare il risultato e se non va bene, capire quale passaggio sia sbagliato e correggerlo.
Ad esempio...se avessi provato la tua macro senza correzioni, ti saresti subito accorto che il codice per esempio non cambiava. Quindi saresti andato a leggere con attenzione la macro cercando la riga di codice che scrive nella colonna B e avresti visto che c'è un testo fisso invece di un qualcosa che possa variare nei cicli.
Vedrai che è un mondo appassionante e mi sembra che ti sia applicato molto bene per essere all'inizio.
Apache OpenOffice 4.1.5 su Windows 10
Se hai risolto il problema, ricordati di aggiungere [RISOLTO]: viewtopic.php?f=9&t=5661
Se hai risolto il problema, ricordati di aggiungere [RISOLTO]: viewtopic.php?f=9&t=5661
Re: Generare combinazioni da stringa di testo
Perfetto, ci proverò!!
Grazie mille per la disponibilità!
Grazie mille per la disponibilità!
OpenOffice 4.1 su Windows 10