| 
 | |||||||
| 
 | 
|  | 
|  | 
|  | Strumenti | 
|  18-07-2006, 10:54 | #1 | 
| Senior Member Iscritto dal: Oct 2005 Città: Modena 
					Messaggi: 1160
				 | 
				
				[VBA]nidificazione di if in una macro per struttura complessa
			 
		Salve gente, ho un problema. Devo creare una macro in exel che in base al contenuto di una colonna mi inserisca un certo contenuto in un altra colonna. Il contenuto della prima colonna ha 21 possibili valori testuali, per ognuno di questi la macro deve riempire nella seconda colonna un valore testuale corrispondente al valore testuale della prima colonna, es.: in colonna A ce scritto "Italia", nella colonna B deve inserire "Francia" e cosi via per 21 possibili contenuti diversi in colonna A. Il problema è che il contenuto della colonna A, cioe quello che la macro deve prendere e confrontare parte dalla riga 2 e finisce appena la macro incontra la prima riga vuota (sono circa 10000 righe da confrontare). Un altro ostacolo sarebbe quello di una condizione composta tra A e B con un "and" per poi riempire C. Se qualcuno mi potrebbe dare una mano con il codice visual basic facendomi vedere un esempio di una condizione gli sarei veramente molto grato, grazie a tutti in anticipo   
				__________________ Thermaltake Armor Silver#Q6600 @3.3 Ghz - 1.31V#Asus P5Q3 Deluxe wifi-ap @n#2x2 Gb Patriot 1600 Mhz#Palit GTX 570 Sonic edition#WD Caviar blue 500 Gb#Tagan u25 500W#Noctua Nh-d14#Logitech G15 - SPI 34" - | 
|   |   | 
|  18-07-2006, 14:56 | #2 | 
| Senior Member Iscritto dal: Oct 2005 Città: Modena 
					Messaggi: 1160
				 | 
		up plz    
				__________________ Thermaltake Armor Silver#Q6600 @3.3 Ghz - 1.31V#Asus P5Q3 Deluxe wifi-ap @n#2x2 Gb Patriot 1600 Mhz#Palit GTX 570 Sonic edition#WD Caviar blue 500 Gb#Tagan u25 500W#Noctua Nh-d14#Logitech G15 - SPI 34" - | 
|   |   | 
|  18-07-2006, 16:39 | #3 | |
| Member Iscritto dal: May 2006 
					Messaggi: 71
				 | Quote: 
 Non sono sicuro di aver capito una cosa: la lista dei 21 valori e' fissa ? Se si', tu hai una tabella del tipo: 1 Italia Francia 2 AAA2 BBB2 3 ...... ....... per cui vuoi che la macro, in corrispondenza della presenza di ListaA(x) in colonna 1, metta ListaB(x) in colonna 2 ? Ho capito bene? Allora dovresti: dimensionare le 2 matrici ListaA() e ListaB(), riempirle con le stringhe appropriate, poi eseguire qualcosa del genere: Codice: Sub CommandButton1_Click()
   Dim r As Long, s As String, i As Integer
   r = 2
   Do
      s = Cells(r, 1)
      If s = "" Then Exit Do  ' riga vuota = fine
      For i = 1 To 21
         If StrComp(s, ListaA(i), vbTextCompare) = 0 Then
            Cells(r, 2) = ListaB(i)
            Exit For
         End If
      Next
      r = r + 1
   Loop
End SubUltima modifica di icecube_HU : 18-07-2006 alle 16:42. | |
|   |   | 
|  18-07-2006, 23:06 | #4 | 
| Senior Member Iscritto dal: Oct 2005 Città: Modena 
					Messaggi: 1160
				 | 
		quella dei 21 valori era un esempio cmq i dati che dovrebbero andare in B e che quindi il programma inserisce confrontando A glieli devo dare io perche sono in una tabella corretta    
				__________________ Thermaltake Armor Silver#Q6600 @3.3 Ghz - 1.31V#Asus P5Q3 Deluxe wifi-ap @n#2x2 Gb Patriot 1600 Mhz#Palit GTX 570 Sonic edition#WD Caviar blue 500 Gb#Tagan u25 500W#Noctua Nh-d14#Logitech G15 - SPI 34" - | 
|   |   | 
|  19-07-2006, 09:30 | #5 | |
| Senior Member Iscritto dal: Oct 2005 Città: Modena 
					Messaggi: 1160
				 | 
		sapete dirmi perche questo codice mi da sempre in colonna (i, 21) il valore "United Kingdom" pur avendo delle celle in colonna (i, 8) contenenti "Carraro" ?    Quote: 
 
				__________________ Thermaltake Armor Silver#Q6600 @3.3 Ghz - 1.31V#Asus P5Q3 Deluxe wifi-ap @n#2x2 Gb Patriot 1600 Mhz#Palit GTX 570 Sonic edition#WD Caviar blue 500 Gb#Tagan u25 500W#Noctua Nh-d14#Logitech G15 - SPI 34" - | |
|   |   | 
|  19-07-2006, 10:23 | #6 | |
| Senior Member Iscritto dal: Oct 2005 Città: Modena 
					Messaggi: 1160
				 | 
		nenache con questo codice funziona, se ci sono delle celle vuote addirittura le lascia vuote senza modificarle !    Quote: 
 
				__________________ Thermaltake Armor Silver#Q6600 @3.3 Ghz - 1.31V#Asus P5Q3 Deluxe wifi-ap @n#2x2 Gb Patriot 1600 Mhz#Palit GTX 570 Sonic edition#WD Caviar blue 500 Gb#Tagan u25 500W#Noctua Nh-d14#Logitech G15 - SPI 34" - | |
|   |   | 
|  19-07-2006, 10:51 | #7 | |
| Member Iscritto dal: May 2006 
					Messaggi: 71
				 | Quote: 
 L'unica cosa che mi viene da pensare (a meno di eventuali banali sviste sul n. di colonna) e': sei sicuro che nei dati del foglio Excel siano presenti ESATTAMENTE quelle stringhe che cerchi nel codice ? Non ci possono essere differenze di minuscole/maiuscole, eventuali spazi prima o dopo le lettere...? Potresti provare a modificare il codice con: Select Case Lcase(Trim(Cells(i, 8).Value)) 'toglie gli spazi prima/dopo e converte a minuscolo .... Case "basildon" ' i confronti devi farli quindi tutti con le str. minuscole... Ciao. | |
|   |   | 
|  19-07-2006, 13:19 | #8 | 
| Senior Member Iscritto dal: Oct 2005 Città: Modena 
					Messaggi: 1160
				 | 
		la prima lettera deve rimanere maiuscola, per il controllo ortografico l'ho fatto piu di una volta, è tutto a posto    
				__________________ Thermaltake Armor Silver#Q6600 @3.3 Ghz - 1.31V#Asus P5Q3 Deluxe wifi-ap @n#2x2 Gb Patriot 1600 Mhz#Palit GTX 570 Sonic edition#WD Caviar blue 500 Gb#Tagan u25 500W#Noctua Nh-d14#Logitech G15 - SPI 34" - | 
|   |   | 
|  20-07-2006, 09:49 | #9 | |
| Senior Member Iscritto dal: Oct 2005 Città: Modena 
					Messaggi: 1160
				 | 
		quel problema li l'ho risolto, ora ne ho un'altro che è piu semplice per voi, ma non per me da risolvere, vi mostro il codice  Quote: 
   
				__________________ Thermaltake Armor Silver#Q6600 @3.3 Ghz - 1.31V#Asus P5Q3 Deluxe wifi-ap @n#2x2 Gb Patriot 1600 Mhz#Palit GTX 570 Sonic edition#WD Caviar blue 500 Gb#Tagan u25 500W#Noctua Nh-d14#Logitech G15 - SPI 34" - | |
|   |   | 
|  20-07-2006, 11:13 | #10 | 
| Senior Member Iscritto dal: Apr 2000 Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29 
					Messaggi: 53971
				 | 
		Non l'ho mai fatto, ma dovrebbe funzionare Sheets(1)
		 | 
|   |   | 
|  20-07-2006, 12:22 | #11 | 
| Senior Member Iscritto dal: Oct 2005 Città: Modena 
					Messaggi: 1160
				 | 
		ho provato e purtroppo non funziona    
				__________________ Thermaltake Armor Silver#Q6600 @3.3 Ghz - 1.31V#Asus P5Q3 Deluxe wifi-ap @n#2x2 Gb Patriot 1600 Mhz#Palit GTX 570 Sonic edition#WD Caviar blue 500 Gb#Tagan u25 500W#Noctua Nh-d14#Logitech G15 - SPI 34" - | 
|   |   | 
|  20-07-2006, 12:50 | #12 | 
| Senior Member Iscritto dal: Apr 2000 Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29 
					Messaggi: 53971
				 | |
|   |   | 
|  21-07-2006, 09:39 | #13 | |
| Senior Member Iscritto dal: Oct 2005 Città: Modena 
					Messaggi: 1160
				 | 
		purtroppo non si po fare, cmq avrei un'altro piccolo problemino che non capisco   il compilatore mi da un errore di "Tipo non corrispondente" in questo pezzo di codice   Quote: 
   
				__________________ Thermaltake Armor Silver#Q6600 @3.3 Ghz - 1.31V#Asus P5Q3 Deluxe wifi-ap @n#2x2 Gb Patriot 1600 Mhz#Palit GTX 570 Sonic edition#WD Caviar blue 500 Gb#Tagan u25 500W#Noctua Nh-d14#Logitech G15 - SPI 34" - | |
|   |   | 
|   | 
| Strumenti | |
| 
 | 
 | 
Tutti gli orari sono GMT +1. Ora sono le: 06:30.









 
		 
		 
		 
		








 
  
 



 
                        
                        










