Estrarre giorni settimana
Hai un problema con Excel? 
Estrarre giorni settimana
di wizards data: 08/11/2017 09:03:46
Un saluto a tutti.
Non sono molto pratico di VBA e cerco di risolvere un problema relativo ad una colonna di dati.
Con le formule in Excel ci sarei riuscito ma vorrei capire come gestire la stessa situazione con VBA.
Il mio problema è il seguente:
ho un a colonna di dati con range C1:C200
in questo elenco ci possono essere :
dati alfanumerici e/o celle vuote e distribuiti casualmente i nomi dei sette giorni della settimana (scritti senza la i accentata)
Dovrei riconoscere i nomi della settimana e spostarli in colonna A stessa riga, lasciando la corrispondente cella C vuota
Ho cercato varie soluzioni sia nel forum che in rete ma non ho trovato la soluzione corretta.
Sono veramente alle prime armi
un ringraziamento a coloro i quali potranno suggerirmi una possibile soluzione
di Luca73 data: 08/11/2017 09:11:39
Ciao Alcune indicazioni non VBA per darti qualche dritta poi dicci dove trovi le difficoltà.
1) con un ciclo for passi tutte le celle nel range C1:C200 puoi usare
1.a) ciclo For Each...next
1.b) oppure un ciclo for ... next con una variabile indice della riga
1.c) oppure un ciclo do..loop until e ad ogni cella sposti l'attenzione ad una riga più in basso finchà la cella sotto è vuota
1.d) oppure un ciclo do..loop while e ad ogni cella sposti l'attenzione ad una riga più in basso fintanto che la cella in esame è piena
2) Analizzi il testo della cella
3) se il testo è uguale a lunedi o uguale a martedi o ....
4) allora
4.1) il testo della cella corrispondene in riga A (funzione offset) diventa quel testo
4.2) svuoti o cancelli la cella in analisi
Tutto qui
Prova, inviaci il codice e procediamo passo -passo
di wizards data: 08/11/2017 16:54:52
Ciao e grazie per il suggerimento
Ho provato a scrivere qualche riga ma tieni conto che di VBA so veramente poco.
ho completato il ciclo per un giorno e poi se va bene lo ricopio per gli altri.
Ho forti dubbi sul copia ed incolla il valore.
Non ho ancora capito invece come cancellare la cella C dopo lo spostamento in A
grazie per i tuoi consigli
dim r as interger
dim valore as string
For r = 1 To 200
valore = Cells(r, 3).Value ' leggo i valori di ogni cella della colonna C
if valore= "Lunedi" then ' Se il valore coincide con la stringa cercata.....
Cells(r, 3).Select ' seleziono il contenuto della cella
Range(r, 3).Copy ' copio il contenuto della cella
ActiveCell.Offset(r, -2).Value ' seleziono la riga corrispondente della colonna A
Range(r,1).PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False ' copio il valore
'svuoto la cella C con "" (non ho trovato questa indicazione)
if valore= "Martedi" then
Cells(r, 3).Select
if valore= "Mercoledi" then
Cells(r, 3).Select
if valore= "Giovedi" then
Cells(r, 3).Select
if valore= "Venerdi" then
Cells(r, 3).Select
if valore= "Sabato" then
Cells(r, 3).Select
if valore= "Domenica" then
Cells(r, 3).Select
Next |
di Zer0Kelvin data: 08/11/2017 20:44:38
Ciao.
-Puoi usare una sola if unendo le condizioni con l'operatore Or (oppure), vedi 1.
-Offset ti permette di puntare una cella tramite lo scostamento (offset) relativo, vedi 2
la sintassi è
Range.Offset( Riga, Colonna)
Per maggiori informazioni puoi consultare l'help del VBA dall'editor (tasto F1).
In VBA non occorre selezionare un range per assegnargli un valore.
1)
If A = 5 Or A = 6 then...
1)
Range("A1").Offset( 0, 1)
equivale a
Range("B1") |
di wizards data: 08/11/2017 22:29:50
Grazie per il tuo suggerimento
Però non ho capito:
a) se il codice che ho scritto è corretto aldilà delle "scorciatoie"
b) come cancellare la cella Cx una volta acquisito il valore e copiato nella cella Ax ( Forse : Range(r,c).ClearContents ?? )
oltremodo sono impossibilitato a provare il codice in quanto ho il notebook in riparazione ma intanto volevo provare a capire le modalità di scrittura del codice
Con l'operando OR mi sembra di capire che il codice diventerebbe così:
Sub Copia-sposta
dim r as interger
dim valore as string
For r = 1 To 200
valore = Cells(r, 3).Value ' leggo i valori di ogni cella della colonna C
if valore= "Lunedi" or "Martedi" or "Mercoledi" or "Giovedi" or "Venerdi" or "Sabato" or "Domenica" then ' Se il valore coincide con la stringa cercata.....
Cells(r, 3).Select ' seleziono il contenuto della cella
Range(r, 3).Copy ' copio il contenuto della cella
ActiveCell.Offset(r, -2).Value ' seleziono la riga corrispondente della colonna A
Range(r,1).PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False ' copio il valore
Range(r,3).ClearContents 'svuoto la cella C con "" (non ho trovato questa indicazione)
Next
end Sub |
di Zer0Kelvin data: 09/11/2017 00:38:16
Penso che da solo non ne vieni a capo: dunque...
1) nei nomi di routine puoi usare solo lettere, numeri e il segno di sottolineatura
2) quando concateni dei valori logici, devi riportare l'intera condizione
3) in VBA non c'è bisogno di usare Select per agire su una cella
4) per spostare un range si può usare Range.Cut che equivale a fare Taglia/Incolla (vedi help VBA)
Se pensi, in futuro, di avere a che fare con le macro, ti consiglio di investire un pò di tempo nello studio dei rudimenti del VBA.
Per cominciare può andar bene anche solo consultare l'help del VBA che è fatto piuttosto bene.
Sub Copia_sposta()
Dim R As Integer
Dim Valore As String
For R = 1 To 200
Valore = Cells(R, 3)
If Valore = "Lunedi" Or Valore = "Martedi" Or Valore = "Mercoledi" _
Or Valore = "Giovedi" Or Valore = "Venerdi" Or Valore = "Sabato" _
Or Valore = "Domenica" Then ' Se il valore coincide con la stringa cercata.....
Cells(R, 3).Cut Cells(R, 1) ' sposto il contenuto della cella
End If
Next
End Sub |
di wizards data: 09/11/2017 19:44:53
Grazie per la risposta
Guardando l'help del VBA , a dir la verità mi sono confuso ancora di più
Se riesco ad avere un aiuto più concreto sarei grato a tutti
Grazie
ciao
di Zer0Kelvin data: 09/11/2017 20:43:38
Mi rendo conto che all'inizio è dura.
Riguardo all'aiuto più concreto, la macro che ho allegato più sopra è funzionante; a cosa ti riferivi?
di wizards data: 10/11/2017 19:43:58
La macro è perfetta
Mi riferivo agli errori che ho fatto in quanto in un primo momento non capivo bene cosa mi avevi segnalato.
Ho cercato meglio in giro ed ho compreso le tue indicazioni
Per me è dura ma cerco di imparare il più possibile
Ancora grazie per tutti i suggerimenti
Ciao
Vuoi Approfondire?