Funzione concatena personalizzata
Hai un problema con Excel? 
Funzione concatena personalizzata
di Bisettina (utente non iscritto) data: 30/09/2015 17:21:14
Salve a tutti,
Sono ancora alle prime armi con Excel e VBA.
Dovrei concatenare una serie di celle, ma vorrei escludere un determinato valore dalla funzione. Ad esempio, ho una serie di parole e di numeri. Dovrei concatenarli tutti tranne tutti i valori 7. Se non seleziono la cella con il 7 è un problema, perchè può succedere che in quella cella capiti poi una parola. Mi serve proprio di escludere il valore. Per farlo devo ricorrere alla creazione di una nuova funzione in VBa? Se si, qualcuno può aiutarmi con la sintassi corretta?
Grazie mille, chiedo scusa per l'ignoranza
di Cucù data: 30/09/2015 17:44:41
Prova questa Funzione
Cucù
Option Explicit
Function Bisettina(Rng As Range) As Variant
Dim C As Range
Application.Volatile
For Each C In Rng
If C.Value <> 7 Then
Bisettina = Bisettina & C.Value
End If
Next C
End Function |
di Mister_x (utente non iscritto) data: 30/09/2015 17:51:15
ciao
quindi stando ai tuoi dati il valore 7 non deve eseere riportato ????
non serve nessun VBA o artifizio basta includere la funzione Concatena in Sostrituisci
ess i tuoi dati da A1 to A7
a1
2
3
a17
17
45
pippo
se usiamo =CONCATENA(A1;A2;A3;A4;A5;A6;A7) abbiamo questo valore ( a123a171745pippo )
se includiamo concatena in sostituisci
=SOSTITUISCI(CONCATENA(A1;A2;A3;A4;A5;A6;A7);"7";"") escludiamo i valori 7 ( a123a1145pippo )
se e' questo che vuoi la formula e' questa, altrimenti posta un file con cosa vuoi fare e cosa ottenere
ciao
di alfrimpa data: 30/09/2015 17:52:39
Ciao Bisettina ed un saluto a Cucù e che è stato più veloce di me
Ti propongo anche la mia anche se è pressoché uguale a quella di Cucù (la mia inserisce una virgola tra i vari valori
Alfredo
Function MioConcatena(rng As Range)
Dim cel As Range
Dim stringa As String
For Each cel In rng
If cel.Value <> 7 Then
stringa = stringa & ", " & cel.Value
End If
Next cel
MioConcatena = Mid(stringa, 2, 100)
End Function
|
di mb data: 30/09/2015 19:02:14
buonasera a tutti
interessanti le soluzioni proposte chiedo però 2 chiarimenti
a Cucu e alfredo nelle vostre funzioni se viene inserito ad esempio mar7io il risultato finale è il seguente
1, 2, 3, mar7io, 5, 6, 8, 9, 10, pippo
a Misterx invece chiedo se è semplificabile questa stringa
=SOSTITUISCI(CONCATENA(A2&","&A3&A4&","&A5);"7";"")
perchè come si può notare ho dovuto aggiungere n° volte la stringa &","& per poter fare una concatenazione comprensiva del simbolo virgola
Grazie per l'attenzione
di alfrimpa data: 30/09/2015 19:18:12
Ciao mb
Io, come credo Cucù, ho risposto "alla cieca" non conoscendo la struttura dei dati.
Se Bisettina ci fornirà un esempio le funzioni potranno essere "affinate"
Alfredo
di Mister_x (utente non iscritto) data: 30/09/2015 19:38:43
ciao mb
apportando una piccola modifica alla funzione proposta di Alfredo si puo' risolvere questo inconveniente di inserire una virgola o uno spazio tra un valore di una cella e l'altra
aspettando sempre una risposta da parte di Bisettina ti posto la funzione modificata che esclude a priori il numero 7
ciao
Function MioConcatena(rng As Range)
Dim cel As Range
Dim stringa As String
Dim i As Long
Dim val_s As Variant, ValS As Variant
For Each cel In rng
val_s = ""
For i = 1 To Len(cel)
ValS = Mid(cel, i, 1)
If ValS <> "7" Then val_s = val_s & ValS
Next i
stringa = stringa & ", " & val_s
Next cel
MioConcatena = Mid(stringa, 2, 100)
End Function
|
di alfrimpa data: 30/09/2015 19:59:04
Ciao Mister_x
Ho provato la tua function ma, a parte che vi sono un paio di doppie virgole, se in una cella c'è scritto gamma7 nel concatenamento viene riportato gamma ed il valore non viene escluso.
Alfredo
di Mister_x (utente non iscritto) data: 30/09/2015 20:23:13
ciao alfredo
per le virgole in eccedenza e' abbastanza mettere un If di controllo
da cosi'
stringa = stringa & ", " & val_s
a cosi'
If val_s <> "" Then stringa = stringa & ", " & val_s
se escludere tutto, da come ho capito nel post, bisogna solo escludere la lettera 7,
comunque in questo caso apettiamo una delucidazione da parte di Bisettina per questo problema di inserimento al concatena
ciao
di alfrimpa data: 30/09/2015 20:44:26
Ho provato a modificare la mia routine come sotto ma la funzione restituisce #VALORE
Perchè? Dove sbaglio?
Alfredo
Function MioConcatena(rng As Range)
Dim cel As Range
Dim stringa As String
For Each cel In rng
If IsError(Application.WorksheetFunction.Find("7", cel.Value)) Then
stringa = stringa & ", " & cel.Value
End If
Next cel
MioConcatena = Mid(stringa, 2, 100)
End Function |
di Mister_x (utente non iscritto) data: 30/09/2015 23:40:29
ciao Alfredo
usiamo la funzione di excel TROVA() dove vuole (cosa cercare;la stringa, la partenza)
ciao
Function MioConcatena(rng As Range)
Dim cel As Range
Dim stringa As String
For Each cel In rng
If IsError(Application.Find("7", cel.Value, 1)) Then
stringa = stringa & ", " & cel.Value
End If
Next cel
MioConcatena = Mid(stringa, 2, 100)
End Function
|
di alfrimpa data: 01/10/2015 07:03:40
Ciao Mister_x e grazie
Lato foglio se scrivo TROVA("7";A1) funziona per cui pensavo che la posizione di partenza per default fosse 1 e non l'ho messa.
Io non ho modo di provare ma la funzione così modificata opera correttamente almeno per quel che ne sappiamo?
Alfredo
di Bisettina (utente non iscritto) data: 01/10/2015 15:34:37
Grazie mille a tutti, le vostre proposte mi sono servite parecchio. Alla fine bastava usare insieme concatena e sostituisci, come mi ha suggerito Mister_x! però per fare più veloce, l'uso della funzione è più immediato, ora devo solo capire (e studiare) come modificare la sintassi che mi avete scritto per adattarla ai miei dati!!!così se vorrò potrò usarla. Sono proprio una principiante
Grazie mille ancora
di Mister_x (utente non iscritto) data: 01/10/2015 18:09:50
ciao
tanto per passare il tempo ho applicato una modifica alla funzione di alfredo
dove a questa bisogna passare 3 parametri
MioConcatena(cosa eliminare ; lo stac che voglio inserire fra una parola e un'altra ; il Range ) ritorna una Stringa
Utilizzo
=MioConcatena("7";" ";A1:A3)
lo stac puo' essere anche una stringa "" purche' si metta il Valore "", Pure quello da eliminare "" necessita di Nullo nel caso si adopera come Concatena()
a ---------- a b-B2 c
b7-B2
c
PS . Bisettina questa la puoi studiare nel suo funzionamento
ciao
Option Explicit
Function MioConcatena(NoVal As String, Stac As String, rng As Range) As String
Application.Volatile
Dim cel As Range
Dim stringa As String
Dim i As Long
Dim val_s As Variant, ValS As Variant
For Each cel In rng
val_s = ""
For i = 1 To Len(cel)
ValS = Mid(cel, i, 1)
If ValS <> NoVal Then val_s = val_s & ValS
Next i
If val_s <> "" Then stringa = stringa & Stac & val_s
Next cel
If Len(Stac) = 0 Then Stac = " "
MioConcatena = Trim(Mid(stringa, Len(Stac), 1000))
End Function
|
di mb data: 02/10/2015 09:49:26
buongiorno misterx
complimenti per il suggerimento che ho scaricato e provveduto ad inserire nei miei manuali di autoformazione
c'è solo un piccolo problema se ad esempio voglio inserire una , tra un numero e l'altro esce questo inconveniente sulla prima cifra, sicuramente ho sbagliato qualcosa io
=MioConcatena3(7;",";A1:A9)
risultato
,1,2,3,mario,5,6,8,9
Grazie per l'attenzione e scusi il disturbo
di Mister_x (utente non iscritto) data: 02/10/2015 10:13:45
ciao Mb
piccola modifica alla Funzione
ciao
Function MioConcatena(NoVal As String, Stac As String, rng As Range) As String
Application.Volatile
Dim cel As Range
Dim stringa As String
Dim i As Long, St As Long ''Qui
Dim val_s As Variant, ValS As Variant
For Each cel In rng
val_s = ""
For i = 1 To Len(cel)
ValS = Mid(cel, i, 1)
If ValS <> NoVal Then val_s = val_s & ValS
Next i
If val_s <> "" Then stringa = stringa & Stac & val_s
Next cel
St = Len(Stac) + 1 ''Qui
MioConcatena = Trim(Mid(stringa, St, 1000)) ''Qui
End Function
|
di mb data: 02/10/2015 10:32:55
Grazie grazie
alla prossima
di Bisettina (utente non iscritto) data: 03/10/2015 11:34:18
Grazie mille Mister x!!!!!!!
Vuoi Approfondire?