Una famiglia di software per fogli di calcolo Microsoft con strumenti per l'analisi, la creazione di grafici e la comunicazione dei dati.
Premetto che non so assolutamente nulla di VBA, questa potrebbe essere la volta buona per imparare qualcosa.
Ringrazio molto Norman, chiedo scusa se forse non mi sono spiegato bene:
il campo Email era solo un esempio, non necessariamente contiene una email.
L'unico campo che c'è sempre, finisce sempre con il carattere ")" e dovrebbe essere sempre nella quarta riga è il campo indirizzo.
Mentre il campo che ho chiamato Email, quando presente si trova in seconda riga, ma non è discriminabile dal carattere "@".
Ciao Filippo,
Devo chiedere scusa - ho letto la tua domanda troppo frettolosamente!
Prova a sostituire il codice precedente con la seguente versione:
Alt-F11 per aprire l'editor di VBA
Alt-IMper inserire un nuovo modulo di codice
Nel nuovo modulo vuoto, incolla il seguente codice:
'==========>>
Option Explicit
'---------->>
Public Sub Tester()
Dim WB As Workbook
Dim SH As Worksheet
Dim srcRng As Range, destRng As Range
Dim arrIn As Variant, arrOut() As Variant
Dim i As Long, j As Long, k As Long
Dim iCtr As Long
Dim LRow As Long
Dim aStr As String
Const sAddressIdentifier As String = ")"
Const sDestinazione As String = "D2" '<<===== Modifica
Set WB = ThisWorkbook
Set SH = WB.Sheets("Foglio1") '<<===== Modifica
With SH
LRow = .Cells(.Rows.count, "A").End(xlUp).Row
Set srcRng = .Range("A2:A" & LRow)
Set destRng = .Range(sDestinazione)
End With
arrIn = srcRng.Value
ReDim arrOut(1 To UBound(arrIn, 1) * 2)
For i = 1 To UBound(arrIn, 1)
If i + 3 > UBound(arrIn, 1) Then
aStr = vbNullString
Else
aStr = Right(arrIn(i + 3, 1), 1)
End If
If aStr = sAddressIdentifier Then
'\ Tutto va bene e il mondo e' bello!
j = j + 1
k = k + 4
arrOut(j) = arrIn(k - 3, 1)
arrOut(j + 1) = arrIn(k - 2, 1)
arrOut(j + 2) = arrIn(k - 1, 1)
arrOut(j + 3) = arrIn(k, 1)
i = i + 3
Else
'\ Manca la email!
j = j + 1
k = k + 3
arrOut(j) = arrIn(k - 2, 1)
arrOut(j + 1) = vbNullString
arrOut(j + 2) = arrIn(k - 1, 1)
arrOut(j + 3) = arrIn(k, 1)
i = i + 2
End If
j = j + 3
Next i
ReDim Preserve arrOut(1 To j)
destRng.Resize(j).Value = Application.Transpose(arrOut)
End Sub
'<<==========
Alt-Q per chiudere l'editor di VBA e tornare a Excel.
Alt-F8 per aprire la finestrina macro
Seleziona Tester | Esegui
Se, oltre agli indirizzi email, fosse possibile che ci fossero altri campi mancanti, sarebbe necessario fornire alcuni mezzi per identificare almeno uno di questi campi. A questo proposito, noto che il carattere @ non può essere utilizzato per identificare i dati e-mail, ma forse la lunghezza del campo telefono potrebbe essere utilizzato o la presenza di solo caratteri numerici e (diciamo) il carattere -.
===
Regards,
Norman