Sviluppare funzionalita su Microsoft Office con VBA Funzione Split per ottenere un vettore di caratteri

Login Registrati
Stai vedendo 14 articoli - dal 1 a 14 (di 14 totali)
  • Autore
    Articoli
  • #36101 Score: 0 | Risposta

    Luca73
    Partecipante
      58 pts

      Ciao A tutti.

      ho cercato inutilmente nei vecchi archivi ma non ho trovato ciiò che cercavo.

      Mi sembra di ricordare che qualcuno (forse VF) avesse specificato come usare la funzione Split per dividere una o più parole in singoli caratteri Ovvero data La Parola Luca avere 

      Vettore(0) = L 
      Vettore(1) = u
      Vettore(2) = c
      Vettore(3) = a

      Ricordo bene che si poteva fare? Come?

      Colgo l'occasione per Salutare tutti e augurare un buon Natale e un Felice anno nuovo

       

      #36105 Score: 0 | Risposta

      albatros54
      Moderatore
        89 pts

        Ciao,ho cercato nel mio archivio:

        Sub stringaVerticale()
        Call string_to_array("hello world")
        End Sub
        Public Function string_to_array(stringa As String)
         'che trasforma una stringa di testo in un array di caratteri
         '(esempio: "hello" restituisce il vettore composto da "h", "e", "l", "l", "o")
         Dim coll As New Collection
         Dim aumenta As Long, lung As Long, i As Long, uprow As Long
        Dim dato As String, dat As String
        Dim item As Variant
         aumenta = 1
         lung = Len(stringa)
         For i = 1 To lung
         dato = Mid(stringa, aumenta, 1)
         coll.Add dato
         aumenta = aumenta + 1
         Next
         uprow = 1
         For Each item In coll
         Cells(uprow, 6) = item
        dat = dat & Chr(13) & Chr(10) & item
        uprow = uprow + 1
        Next
        MsgBox dat
        End Function
        

         

         


        Qual è il punto di avere gusti diversi, se non mostrare che i cervelli lavorano diversamente, che pensiamo diversamente? ( Alan Turing)
        Sempre il mare, uomo libero, amerai!
        ( Charles Baudelaire )
        #36107 Score: 0 | Risposta

        patel
        Moderatore
          51 pts

          La funzione Split ha bisogno di un separatore tra i vari caratteri per funzionare

          #36108 Score: 0 | Risposta

          Oscar
          Partecipante
            45 pts

            Per fare una cosa semplice si può usare    il Mid

            #36109 Score: 0 | Risposta

            scossa
            Partecipante
              37 pts

              Ciao,

              questa udf restituisce la matrice come da tua richiesta:

              Function StrToArr(ByVal sTesto As String) As Variant
                Dim j As Long, nLen As Long, vRet As Variant
                
                nLen = Len(sTesto)
                ReDim vRet(1 To nLen)
                For j = 1 To nLen
                  vRet(j) = Mid(sTesto, j, 1)
                Next j
                StrToArr = vRet
              End Function
              

              Esempio basico per testarla:

              Sub prova()
                Dim sString As String
                sString = Join(StrToArr("prova"), "-")
                Range("A1:E1") = StrToArr("prova")
                MsgBox sString
              End Sub
              
              #36110 Score: 0 | Risposta

              vecchio frac
              Senior Moderator
                272 pts

                Luca73 ha scritto:

                Mi sembra di ricordare che qualcuno (forse VF) avesse specificato come usare la funzione Split

                Me lo ricordo. Questa era la mia proposta:

                'TRASFORMA UNA STRINGA DI TESTO IN UN ARRAY DI CARATTERI
                Function string_to_array(ByVal value As String) As Variant
                    value = StrConv(value, vbUnicode)
                    string_to_array = Split(Left(value, Len(value) - 1), vbNullChar)
                End Function
                

                Il cui utilizzo è semplice perché restituisce un vettore a base zero:

                ?string_to_array("LUCA")(0)
                L
                

                 

                @patel: giusta osservazione, qui infatti ho utilizzato vbNullChar come separatore.

                #36111 Score: 0 | Risposta

                scossa
                Partecipante
                  37 pts

                  >Me lo ricordo. Questa era la mia proposta ...

                  @VF: non me la ricordavo; ottima soluzione!

                  #36112 Score: 0 | Risposta

                  Luca73
                  Partecipante
                    58 pts

                    Grazie  tutti, 

                    Ricordavo un utilizzo di split... E infatti eccolo. 

                    Ringrazio anche tutti coloro che hanno proposto soluzioni alternative. 

                    Ogni soluzione porta in se qualcosa di valido e qualcosa per imparare. 

                    Buon Natale

                    P. S. 

                    Spero con il nuovo anno di riuscire a partecipare un po'di più. 

                    Ciao

                    #36113 Score: 0 | Risposta

                    vecchio frac
                    Senior Moderator
                      272 pts

                      Mi associo agli auguri di buone feste!

                      Luca73 ha scritto:

                      Ogni soluzione porta in se qualcosa di valido e qualcosa per imparare. 

                      scossa ha scritto:

                      ottima soluzione!

                      Questo complimento da parte di scossa è il mio regalo di Natale di quest'anno!! Grazie!!   

                      #36116 Score: 0 | Risposta

                      albatros54
                      Moderatore
                        89 pts

                        AUGURI A tutto il Forum

                         

                        #36117 Score: 0 | Risposta

                        Marius44
                        Moderatore
                          58 pts

                          Ciao a tutti

                          Mi associo agli auguri di @albatros (ciao) e propongo una elaborazione del suggerimento di @vecchio frac (ciao anche a te).

                          La seguente macro "traspone" in verticale quanto scritto nella cella A1

                          Option Explicit
                          
                          Sub prova2()
                          'traspone in verticale il dato in A1
                          Dim dato As String, i As Long, lung As Integer
                          Dim arrDat(), a As Long
                          dato = StrConv(Cells(1, 1).value, vbUnicode)
                          lung = Len(dato)
                          For i = 1 To lung
                          ReDim Preserve arrDat(0 To i - 1)
                            arrDat(i - 1) = Split(Mid(dato, i, 1), vbNullChar)
                          Next i
                          a = 1
                          For i = 0 To UBound(arrDat) Step 2
                            Cells(a, 4) = arrDat(i)
                            a = a + 1
                          Next i
                          End Sub
                          

                          Sicuramene avete notato il ciclo con Step 2. Questo perchè il vbNullChar aggiunge dopo ogni lettera (ma vale anche coi numeri) un carattere "strano".

                          Come si potrebbe ovviare?

                           

                          Ciao a tutti e BUON NATALE,

                          Mario

                          #36118 Score: 0 | Risposta

                          patel
                          Moderatore
                            51 pts

                            I miei complimenti VF ! non ho capito come funziona la conversione unicode, me la puoi spiegare ?

                            #36119 Score: 0 | Risposta

                            vecchio frac
                            Senior Moderator
                              272 pts

                              Marius44 ha scritto:

                              Come si potrebbe ovviare?

                              E' corretto perché devi saltare il null char. L'array di byte è fatto così, un elemento, null char, un elemento, null char, ecc.
                              Io suggerisco in alternativa Application.Transpose ma è una furbata utilizzando un metodo di Excel 🙂

                              Sub prova3()
                              'traspone in E1... in verticale il dato in A1
                              Dim dato As String
                              Dim arrDat As Variant
                                  dato = StrConv(Cells(1, 1).Value, vbUnicode)
                                  arrDat = Split(Left(dato, Len(dato) - 1), vbNullChar)
                                  Range(Cells(1, "E"), Cells(Len(dato) / 2, "E")) = Application.Transpose(arrDat)
                              End Sub
                              #36120 Score: 0 | Risposta

                              vecchio frac
                              Senior Moderator
                                272 pts

                                patel ha scritto:

                                I miei complimenti VF ! non ho capito come funziona la conversione unicode, me la puoi spiegare ?

                                Il mondo ANSI e il mondo Unicode, sono tanto lontani tra loro che gli stessi ideatori di quegli standard probabilmente non sanno nemmeno cosa hanno combinato 🙂 Poi ci sono anche i codici di paese e i codici di pagina... ricordate il comando DOS "mode con:" ?

                                Chiaramente Unicode ha permesso di aumentare notevolmente il numero di caratteri rappresentabili su una tavola... VB ha cercato di mantenere il passo offrendo un modo per recuperare i valori Unicode con le funzioni di stringa gemelle a quelle classiche (ChrW, AscW, LenB). Naturalmente io non sono così tecnico nè così ferrato da saper spiegare come funziona la conversione Unicode. Che peraltro credo che usiamo pochissimo (a dire il vero mi è capitato recentemente e per fortuna ChrW funziona bene).

                                Temo che devo rinviarti a qualche paziente googlata!

                              Login Registrati
                              Stai vedendo 14 articoli - dal 1 a 14 (di 14 totali)
                              Rispondi a: Funzione Split per ottenere un vettore di caratteri
                              Gli allegati sono permessi solo ad utenti REGISTRATI
                              Le tue informazioni: