You are here:Home-Domande su Excel VBA e MACRO-[RISOLTO] Split e copia dati da Celle Foglio1 a Celle Foglio2
[RISOLTO] Split e copia dati da Celle Foglio1 a Celle Foglio22018-06-13T09:24:29+02:00

Home Forum Domande su Excel VBA e MACRO [RISOLTO] Split e copia dati da Celle Foglio1 a Celle Foglio2

Visualizzazione 19 filoni di risposte
  • Autore
    Post
    • Avatarrexottantotto
      Partecipante
        Post totali: 175

        Nel file ho due Fogli:

        Foglio1

        Foglio2

        Nelle Celle A1:A3 del Foglio1 ho inserito alcune stringhe di diversa lunghezza.

        Sullo stesso Foglio1 ho inserito un pulsante Apri Form con il quale apro la UserForm1.

        Quando apro la UserForm1 la ListBox1 che si trova sulla stessa form viene popolata con le stringhe che si trovano nelle Celle A1:A3 del Foglio1.

        Sulla UserForm1 ho inserito anche il pulsante Copia.

        Su questo pulsante ho messo questa sub:

        Private Sub Copia_Click()
        Dim sh1 As Worksheet
        Dim sh2 As Worksheet
        Dim lRiga As Long
        Dim rng As Range

        With ThisWorkbook
        Set sh1 = .Worksheets(“Foglio1”)
        Set sh2 = .Worksheets(“Foglio2”)
        End With

        With sh1
        Set rng = sh1.Range(“A1:A3”).CurrentRegion
        rng.Copy
        End With

        With sh2
        lRiga = .Range(“A” & .Rows.Count).End(xlUp).Row + 1
        .Range(“A” & lRiga).PasteSpecial
        End With

        Set sh1 = Nothing
        Set sh2 = Nothing

        End Sub

        Con questa sub i dati che si trovano nelle Celle A1:A3 del Foglio1 vengono copiati nel Foglio 2 a partire dalla Cella A2.

        Non voglio fare questo, ma copiare le stringhe delle Celle A1:A3 del Foglio1 nella Colonna A del Foglio2 come meglio spiegato nello stesso Foglio2 ottenendo il risultato riportato nel Foglio3.

        Vorrei anche poter selezionare la stringa da copiare perchè non sempre devo copiare tutte e tre le stringe.

        Specifico che le Celle A1:A7 del Foglio2 sono formattate in questo modo:

        Larghezza 81

        Altezza 20

        Carattere Calibri 11

        http://www.filedropper.com/datidafoglio1afoglio2

        • Questo topic è stato modificato 2 anni, 2 mesi fa da sidsid.
        • Questo topic è stato modificato 2 anni, 2 mesi fa da sidsid.
      • Avatarrexottantotto
        Partecipante
          Post totali: 175

          Scusate, ho corretto il file e lo allego nuovamente.

          http://www.filedropper.com/datidafoglio1afoglio2v1_1

        • Avatarrexottantotto
          Partecipante
            Post totali: 175

            Forse sarebbe più aderente a quello che vorrei realizzare modificare il titolo in questo modo:

             

            Split e copia dati da Celle Foglio1 a Celle Foglio2

          • sidsid
            Moderatore
              Post totali: 750

              Ciao
              Volevo capire perchè splittare il testo su 2 righe; senza scomodare vba potresti adattare la riga al testo inserito, quindi usare solo una riga.
              Non va bene?

            • Avatarrexottantotto
              Partecipante
                Post totali: 175

                Lo scopo finale di questo lavoro è trasferire le stringhe che sono nelle celle A1:A3 del Foglio1 alle celle A1:A7 del Foglio2 come spiegato nel Foglio2 ottenendo il risultato come spiegato nel Foglio3.

                Il trasferimento viene fatto cliccando sul pulsante COPIA che ho messo sulla UserForm1.

                Nella UserForm1 ho messo una listbox che viene popolata con le stringhe del Foglio1.

                Specifico che le Celle A1:A7 del Foglio2 sono formattate in questo modo:

                Larghezza 90

                Altezza 20

                Carattere Calibri 11

                La necessità di dividere la stringa sta nel fatto che dalla cella originaria A1 del Foglio1 la stringa la devo mettere nelle due celle A1 e A2 del Foglio2, e così per la stringa che sta nella cella Ae del Foglio1 la devo mettere nelle due celle A6 e A7 del Foglio2.

                Un’ultima cosa.

                Siccome l’inserimento nel Foglio2 non viene fatto per tutte e tre le stringhe che sono nelle celle A1:A3 del Foglio1 c’è un modo per selezionare dalla listbox che sta sulla Userfom1 solo quella o quelle che voglio inserire?

                http://www.filedropper.com/datidafoglio1afoglio2v3

              • sidsid
                Moderatore
                  Post totali: 750

                  Con quale criterio dividi la stringa?

                • Avatarrexottantotto
                  Partecipante
                    Post totali: 175

                    Le stringhe devono essere lunghe max 90.

                    Cioè nel Foglio2 la lunghezza della stringa compresi gli spazi deve essere 90.

                  • sidsid
                    Moderatore
                      Post totali: 750

                      Perchè la seconda frase sta solo nella riga 4 di foglio2, invece che in 2 righe??

                    • Avatarrexottantotto
                      Partecipante
                        Post totali: 175

                        Scusa è un mio errore.

                        La stringa della cella A2 deve andare nelle celle A4 e A5 del Foglio2.

                        http://www.filedropper.com/datidafoglio1afoglio2v4

                      • sidsid
                        Moderatore
                          Post totali: 750

                          Altra info: hai detto che non tutte le righe vanno splittate, ma solo quelle che selezioni nella listbox
                          Ammettendo che decidi di splittare solo la seconda, va inserita sempre partendo da riga 1, oppure nella riga 4?

                        • Avatarrexottantotto
                          Partecipante
                            Post totali: 175

                            Riga 4

                          • sidsid
                            Moderatore
                              Post totali: 750

                              “Le stringhe devono essere lunghe max 90.”

                              Solo per precisare; la larghezza della cella non dipende solo dalla quantità di caratteri nella stringa, ma anche dal font del carattere, dal carattere stesso, dal maiuscolo/minuscolo.
                              Esempio le parole “MALATA” e “MILITI” contengono entrambe 6 lettere ma cambiano le vocali; se le inserisci in 2 celle diverse vedrai che la prima è più larga della seconda perchè la “I” occupa meno spazio rispetto alla “A”

                              Secondo le tue disposizioni:

                              “Specifico che le Celle A1:A7 del Foglio2 sono formattate in questo modo:
                              Larghezza 81
                              Altezza 20
                              Carattere Calibri 11”
                              e usando 90 caratteri, le stringhe escono fuori dalla larghezza della cella; quindi devi fare dei test per scegliere il giusto compromesso.

                            • Avatarrexottantotto
                              Partecipante
                                Post totali: 175

                                OK

                              • sidsid
                                Moderatore
                                  Post totali: 750

                                  Questo il codice da abbinare al pulsante della form
                                  Per modificare i caratteri ammessi nella cella, devi agire sull’istruzione
                                  nCaratteri = 90

                                  Private Sub CommandButton1_Click()
                                  Dim nRiga As Long, j As Long, jj As Long
                                  Dim nCaratteri As Integer
                                  Dim sStringa As String, s1 As String, s2 As String
                                  Dim ws1 As Worksheet, ws2 As Worksheet
                                  Dim v As Variant
                                  
                                  Set ws1 = Sheets("Foglio1") 'nome foglio sorgente
                                  Set ws2 = Sheets("Foglio3") 'nome foglio bersaglio
                                  ws2.Range("A1:A8").ClearContents
                                  
                                  nCaratteri = 90
                                  
                                  nRiga = 1
                                  For j = 0 To Me.ListBox1.ListCount - 1
                                      sStringa = Me.ListBox1.List(j)
                                      If Me.ListBox1.Selected(j) Then
                                          If Len(sStringa) > nCaratteri Then
                                              v = Split(sStringa, " ")
                                              For jj = LBound(v) To UBound(v)
                                                  s1 = s1 & v(jj) & " "
                                                  s2 = s1 & v(jj + 1) & " "
                                                  If Not Len(s2) <= nCaratteri Then
                                                      ws2.Range("A" & nRiga).Value = Mid(s1, 1, Len(s1) - 1)
                                                      ws2.Range("A" & nRiga + 1).Value = Mid(sStringa, Len(s1) + 1, Len(sStringa))
                                                      Exit For
                                                  End If
                                              Next jj
                                          Else
                                              ws2.Range("A" & nRiga).Value = sStringa
                                          End If
                                      End If
                                      nRiga = nRiga + 3
                                      s1 = vbNullString
                                      s2 = vbNullString
                                  Next j
                                  Unload Me
                                  Set ws1 = Nothing
                                  Set ws2 = Nothing
                                  End Sub
                                • Avatarrexottantotto
                                  Partecipante
                                    Post totali: 175

                                    Funziona.

                                    Una domanda:

                                    la larghezza della listbox non contiente sulla stessa riga la stringa della Cella A2 del Foglio1.

                                    E’ possibile in una listbox mettere una stringa di una cella su due righe?

                                  • sidsid
                                    Moderatore
                                      Post totali: 750

                                      Non ho capito nulla di quello che hai detto
                                      Forse ti basta allargare la listbox

                                    • Avatarrexottantotto
                                      Partecipante
                                        Post totali: 175

                                        Ho fatto come mi hai detto:

                                        “Forse ti basta allargare la listbox”

                                        La mia era una curiosità.

                                        Chidevo solo se, data una larghezza della listbox, una stringa più lungha della larghezza poteva andare a capo.

                                         

                                         

                                      • Avatarrexottantotto
                                        Partecipante
                                          Post totali: 175

                                          <pre class=”bbcode_code” style=”height: 36px;”>Questa istruzione si prò usare per la listbox?

                                          WrapText = True

                                        • sidsid
                                          Moderatore
                                            Post totali: 750

                                            Wraptext non è un aproprietà di un controllo all’interno di una form
                                            Lo è di una cella, di un range.
                                            La listbox non ha proprietà per andare a capo, come ad esempio nelle textbox in cui si imposta la proprietà
                                            multiline = true + wordwrap = true
                                            Quindi puoi solo allargare la listbox

                                          • Avatarrexottantotto
                                            Partecipante
                                              Post totali: 175

                                              Farò come mi hai detto.

                                              Allargare la listbox.

                                              Grazie.

                                              RISOLTO

                                               

                                          Visualizzazione 19 filoni di risposte
                                          • Il topic ‘[RISOLTO] Split e copia dati da Celle Foglio1 a Celle Foglio2’ è chiuso a nuove risposte.