assegnare valore variabili
Hai un problema con Excel? 
assegnare valore variabili
di ritz75 (utente non iscritto) data: 03/05/2016 11:00:15
Ripropongo il tema visto che un mio precedente chiarimento non è andato a buon fine....
La macro sotto riportata scrive "ciao" nella cella definita dalle coordinate di riga/colonn (nell'esempio: 3,4).
La mia esigenza è di rendere variabili le coordinate di riga e colonna, definendole tramite un cerca verticale di un riferimento in una tabella che contiene i valori di riga e di colonna (si veda il file di esempio).
Per capirci, se possibile, vorrei definire riga = cerca.vert.... e alla stessa maniera per la colonna.
In questo modo potrei impostare la cella in cui andrò a scrivere la parola "ciao" in base ad un riferimento definito nella tabella di ricerca; non dovrò pertanto andare a definire di volta in volta le possibili coordinate dove andare in scrittura ma automatizzerò il tutto.
Nel file allegato ho cercato di esemplificare il caso.
Grazie a chi mi potrà dare una mano.
Sub macro_cella()
riga = 3
colonna = 4
With ActiveSheet
.Cells(riga, colonna).Select
ActiveCell.FormulaR1C1 = "ciao"
End With
End Sub |
di alfrimpa data: 03/05/2016 11:25:07
Ciao Ritz
Il file non si riesce a scaricare: c'è una cartella con tanti file.
Riallega solo quello
Alfredo
di Luca73 data: 03/05/2016 11:38:11
A me scarica un file zippato vuoto...
Ciao
Luca
di ritz75 (utente non iscritto) data: 03/05/2016 11:39:29
Ciao Luca
Grazie per l'informazione.
Ho riallegato il .zip come esempio corretto.zip
di alfrimpa data: 03/05/2016 11:39:37
anche a me.
E poi perché hai aperto un'altra discussione quando ne avevi già una in corso alla quale ti ha anche risposto Mister_X?
Alfredo
di Luca73 data: 03/05/2016 11:40:38
Ciao Con l'esempio ora capisco il problema. la soluzione secondo me dipende da quanti dati vuoi analizzare ovvero da quante righe è composta la tabella variabili riga / colonna
Ciao
Luca
di Luca73 data: 03/05/2016 11:57:38
IO farei una cosa del genere.
Ormai l'ho fatta e la posto.
ma concordo con Alfredo che l'approccio non è corretto.
Saluti
Sub macro_cella_Luca()
Dim Riga
Dim Colonna
Dim Selezione
Dim CellaW
Dim Index
Selezione = Range("F8")
For Index = 3 To 7 Step 2
Cells(Index, 4).ClearContents
Next
Riga = 0
Colonna = 0
For Each CellaW In Range("F3:F5")
If CellaW = Selezione Then
Riga = CellaW.Offset(0, 1)
Colonna = CellaW.Offset(0, 2)
End If
Next CellaW
If Riga <> 0 Then
With ActiveSheet
.Cells(Riga, Colonna).FormulaR1C1 = "ciao"
End With
Else
MsgBox "Valore NON VALIDO", vbCritical + vbOKOnly, "ATTENZIONE"
End If
End Sub
|
di ritz75 (utente non iscritto) data: 03/05/2016 12:16:41
ho riproposto l'argomento perchè avevo avuto dei problemi con la pubblicazione... non è mio uso andare contro le regole dei forum... e chiedo scusa se ho infranto involontariamente qualche regola.
Grazie a Luca per l'aiuto. Ora provo e vi so dire
di ritz75 (utente non iscritto) data: 04/05/2016 17:36:09
Mi scuso se ho postato due volte l'argomento ma una mia prima risposta non era stata pubblicata non so per quale motivo (devo aver sbagliato qualcosa). Nel dubbio ho aperto un nuovo post. Mi scuso nuovamente... sapendo come funzionano i forum so che non si deve fare.
Ringrazio luca per la macro. Con la sua macro mi ha dato un ottimo spunto per riuscire a gestire ciò che mi serviva. Per utilità di tutti posto il codice VBA che ho creato (ovviamente i miglioramenti sono ben accetti).
l'unica cosa che non ho capito della macro di Luca è questa parte....
For Index = 3 To 7 Step 2
Cells(Index, 4).ClearContents
Next
qualcuno mi aiuta a capire il significato del passaggio?
Sub macro_cella()
Dim Riga
Dim Colonna
'Dim Selezione
Dim CellaW
'Dim Index
Selezione = "z"
'For Index = 3 To 7 Step 2
' Cells(Index, 4).ClearContents
'Next
'Riga = 0
'Colonna = 0
For Each CellaW In Range(Cells(4, 3), Cells(6, 3))
If CellaW = Selezione Then
Riga = CellaW.Offset(0, 1)
Colonna = CellaW.Offset(0, 2)
End If
Next CellaW
Cells(Riga, Colonna) = "ciao"
End Sub |
di alfrimpa data: 04/05/2016 17:44:52
Ciao
Con quel ciclo viene cancellato il contenuto delle celle D3, D5 e D7.
Alfredo
di Luca73 data: 05/05/2016 08:33:10
Grazie Alfredo.
quel ciclo serve per cancellare i valori altrimenti aggiungerebbe sempre e solo dei ciao senza togliere in precedenti.
Secodo me però per una casistica così limitatata io avrei fatto tutto in excel enza scomodare VBA....
Ciao
Luca
di ritz75 (utente non iscritto) data: 05/05/2016 09:13:38
nell'esempio proposto non ha senso scomodare vba, d'accordo.... ma l'esempio inviato era solo una semplificazione di una casistica molto più complessa.... devo gestire molte più variabili all'interno di una procedura complicata gestibile solo con una programmazione vba
grazie per i contributi!!!
di Cucù data: 05/05/2016 11:36:36
cit "Con quel ciclo viene cancellato il contenuto delle celle D3, D5 e D7."
Un ciclo per cancellare dei range fissi? Perchè?
Range("D3, D5, D7").ClearContents
Un saluto alla comitiva
Cucù
di Luca73 data: 05/05/2016 13:28:32
Ciao Cucu
semplicemente perchè dato l'esempio postato ho ritenuto che tale elenco potesse diventare più lungo....
come poi ha confermato ritz75 successivamente.
Rimane sempre e comunque inteso che ogni aiuto o correzione sono sempre benvenuti e infatti non avrei mai scritto il range come lo hai fatto tuin quanto non sapevo dell'uso della virgola in quel contesto.
pertanto Grazie e Ciao
Luca
Vuoi Approfondire?