Condividi tramite

VBA Excel: funzione split

Anonimo
2017-10-10T10:20:13+00:00

Buongiorno a tutti,

vorrei chiedervi se esiste un modo per inserire contemporaneamente più di 1 operatore di divisione (Delimiter). 

Esempio

devo dividere le due seguenti stringhe

THE SAIL PACIFIC EXPLORER FUND

RAIFFEISENFONDS-KONSERVATIV

dove, per la prima di default non metteri delimitatore, nella seconda invece dovrei inserire "-".

Esiste un modo per inserire i due delimitatori in contemporanea o dovrei ad esempio utilizzare altro codice che mi porti al delimitatore che realmente serve (per ora sto faccio il test su UBound)

Grazie

Dario

Microsoft 365 e Office | Excel | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

Risposta accettata dall'autore della domanda

Anonimo
2017-10-10T11:03:05+00:00

Ciao Dario,

vorrei chiedervi se esiste un modo per inserire contemporaneamente più di 1 operatore di divisione (Delimiter). 

Esempio

devo dividere le due seguenti stringhe

THE SAIL PACIFIC EXPLORER FUND

RAIFFEISENFONDS-KONSERVATIV

dove, per la prima di default non metteri delimitatore, nella seconda invece dovrei inserire "-".

Esiste un modo per inserire i due delimitatori in contemporanea o dovrei ad esempio utilizzare altro codice che mi porti al delimitatore che realmente serve (per ora sto faccio il test su UBound)

Prova qualcosa del genere:

'=========>>

Option Explicit

'--------->>

Public Sub Demo()

    Dim WB As Workbook

    Dim SH As Worksheet

    Dim Rng As Range, rCell As Range

    Dim arrDelimitori As Variant, arrSplit As Variant

    Dim sStr As String

    Dim i As Long

    Const sFoglio As String = "Foglio1"              '<<=== Modifica

    Const sIntervallo As String = "A1:A10"          '<<=== Modifica"

    Const sDelimitori As String = ",-"                   '<<=== Modifica

    Set WB = ThisWorkbook

    Set SH = WB.Sheets(sFoglio)

    Set Rng = SH.Range(sIntervallo)

    arrDelimitori = Split(sDelimitori, ",")

    For Each rCell In Rng.Cells

        With rCell

            sStr = .Value

            For i = LBound(arrDelimitori) To UBound(arrDelimitori)

                sStr = Replace(sStr, arrDelimitori(i), "@")

            Next i

            arrSplit = Split(sStr, "@")

            .Offset(0, 1).Resize(1, UBound(arrSplit) + 1).Value = arrSplit

        End With

    Next rCell

End Sub

'<<=========

Potresti scaricare il mio file di prova Dario20171010.xlsm

===

Regards,

Norman

La risposta è stata utile?

1 persona ha trovato utile questa risposta.
0 commenti Nessun commento

2 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2017-10-10T12:34:37+00:00

    Ciao Dario,

    Grazie Norman!

    Prego!

    Non posso scaricare il file per via di alcune restrizioni, ma la macro funziona e fa quello che cercavo.

    Il file rappresentava solo un demo e non aggiunge nulla alla proposta soluzione,

    Ho solo sostituito le seguenti in questo modo:

    Const sDelimitori As String = "7 7,7_7-7/7@7!7.7(7)"

    arrDelimitori = Split(sDelimitori, "7")

    cosi ho aggiunto tutti i casi che potrei incontrare!

    Bene! Infatti, seguendo il principio del codice, si può aggiungere qualunque numero di diversi delimitori con la semplice modifica della stringa assegnata alla costante  sDelimitori.

    Alla prossima.

    ===

    Regards,

    Norman

    La risposta è stata utile?

    1 persona ha trovato utile questa risposta.
    0 commenti Nessun commento
  2. Anonimo
    2017-10-10T12:13:36+00:00

    Ciao Dario,

    vorrei chiedervi se esiste un modo per inserire contemporaneamente più di 1 operatore di divisione (Delimiter). 

    Esempio

    devo dividere le due seguenti stringhe

    THE SAIL PACIFIC EXPLORER FUND

    RAIFFEISENFONDS-KONSERVATIV

    dove, per la prima di default non metteri delimitatore, nella seconda invece dovrei inserire "-".

    Esiste un modo per inserire i due delimitatori in contemporanea o dovrei ad esempio utilizzare altro codice che mi porti al delimitatore che realmente serve (per ora sto faccio il test su UBound)

    Prova qualcosa del genere:

    '=========>>

    Option Explicit

    '--------->>

    Public Sub Demo()

        Dim WB As Workbook

        Dim SH As Worksheet

        Dim Rng As Range, rCell As Range

        Dim arrDelimitori As Variant, arrSplit As Variant

        Dim sStr As String

        Dim i As Long

        Const sFoglio As String = "Foglio1"              '<<=== Modifica

        Const sIntervallo As String = "A1:A10"          '<<=== Modifica"

        Const sDelimitori As String = ",-"                   '<<=== Modifica

        Set WB = ThisWorkbook

        Set SH = WB.Sheets(sFoglio)

        Set Rng = SH.Range(sIntervallo)

        arrDelimitori = Split(sDelimitori, ",")

        For Each rCell In Rng.Cells

            With rCell

                sStr = .Value

                For i = LBound(arrDelimitori) To UBound(arrDelimitori)

                    sStr = Replace(sStr, arrDelimitori(i), "@")

                Next i

                arrSplit = Split(sStr, "@")

                .Offset(0, 1).Resize(1, UBound(arrSplit) + 1).Value = arrSplit

            End With

        Next rCell

    End Sub

    '<<=========

    Potresti scaricare il mio file di prova Dario20171010.xlsm

    ===

    Regards,

    Norman

    Grazie Norman!

    Non posso scaricare il file per via di alcune restrizioni, ma la macro funziona e fa quello che cercavo.

    Ho solo sostituito le seguenti in questo modo:

    Const sDelimitori As String = "7 7,7_7-7/7@7!7.7(7)"

    arrDelimitori = Split(sDelimitori, "7")

    cosi ho aggiunto tutti i casi che potrei incontrare!

    Grazie mille!

    La risposta è stata utile?

    0 commenti Nessun commento