Generare combinazioni da stringa di testo

Discussioni sull'applicazione per i fogli di calcolo
Rispondi
Landrea
Messaggi: 5
Iscritto il: martedì 4 giugno 2019, 16:05

Generare combinazioni da stringa di testo

Messaggio da Landrea »

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! :)
Allegati
Provemmu.ods
(11.14 KiB) Scaricato 105 volte
OpenOffice 4.1 su Windows 10
patel
Volontario attivo
Volontario attivo
Messaggi: 4030
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Generare combinazioni da stringa di testo

Messaggio da patel »

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
Landrea
Messaggi: 5
Iscritto il: martedì 4 giugno 2019, 16:05

Re: Generare combinazioni da stringa di testo

Messaggio da Landrea »

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
Avatar utente
Eramad
Volontario
Volontario
Messaggi: 278
Iscritto il: martedì 10 aprile 2018, 14:56
Località: Pistoia

Re: Generare combinazioni da stringa di testo

Messaggio da Eramad »

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
Landrea
Messaggi: 5
Iscritto il: martedì 4 giugno 2019, 16:05

Re: Generare combinazioni da stringa di testo

Messaggio da Landrea »

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?
Allegati
Provemmu.ods
(9.97 KiB) Scaricato 87 volte
OpenOffice 4.1 su Windows 10
Avatar utente
Eramad
Volontario
Volontario
Messaggi: 278
Iscritto il: martedì 10 aprile 2018, 14:56
Località: Pistoia

Re: Generare combinazioni da stringa di testo

Messaggio da Eramad »

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

Codice: Seleziona tutto

nuovavariabile = 4
la riga di codice

Codice: Seleziona tutto

Kelvin2 = ThisComponent.Sheets.GetByName("Foglio3").GetCellRangeByName("C4").string
diventerebbe

Codice: Seleziona tutto

Kelvin2 = ThisComponent.Sheets.GetByName("Foglio3").GetCellRangeByName("C" & nuovavariabile).string
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
Apache OpenOffice 4.1.5 su Windows 10

Se hai risolto il problema, ricordati di aggiungere [RISOLTO]: viewtopic.php?f=9&t=5661
Landrea
Messaggi: 5
Iscritto il: martedì 4 giugno 2019, 16:05

Re: Generare combinazioni da stringa di testo

Messaggio da Landrea »

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

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
Avatar utente
Eramad
Volontario
Volontario
Messaggi: 278
Iscritto il: martedì 10 aprile 2018, 14:56
Località: Pistoia

Re: Generare combinazioni da stringa di testo

Messaggio da Eramad »

La macro così va bene...ma non benissimo ;)

Correggi:

Codice: Seleziona tutto

riga = 5
riga deve essere = 7 visto che la prima riga è la 7. Se lasci 5, ti sovrascrive le righe 5 e 6.

Codice: Seleziona tutto

Kelvin2 = ThisComponent.Sheets.GetByName("Foglio3").GetCellRangeByName("C" & nuova).string
va messo dopo il Do altrimenti non cambia mai durante i cicli

Codice: Seleziona tutto

Loop until nuova = 6
se usi l'= allora devi mettere che si ripeta fino a quando nuova=7

Codice: Seleziona tutto

ThisComponent.Sheets(2).GetCellRangeByName("B" & riga).string = "30123012-" & Format(codice, "00")
quì a questo punto devi cambiare la parte che io avevo messo come testo fisso ("30123012-"). Sostituiscilo con la stringa della cella "B"&nuova

Codice: Seleziona tutto

ThisComponent.Sheets(2).GetCellRangeByName("F" & riga).string = "ON-OFF"
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. :super:
Apache OpenOffice 4.1.5 su Windows 10

Se hai risolto il problema, ricordati di aggiungere [RISOLTO]: viewtopic.php?f=9&t=5661
Landrea
Messaggi: 5
Iscritto il: martedì 4 giugno 2019, 16:05

Re: Generare combinazioni da stringa di testo

Messaggio da Landrea »

Perfetto, ci proverò!! :fist:
Grazie mille per la disponibilità!
OpenOffice 4.1 su Windows 10
Rispondi