Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    [VBA/Excel] Testo in colonne con separatore

    Ciao a tutti...

    il mio problema consiste nel fatto che dovrei rendere automatica tramite un codice VBA l'operazione di testo in colonne utilizzando come separatore la lettera R, questo però deve essere fatto solo se il primo carattere della stringa è un numero e non una lettera....

    per farlo in excel normalmente ovviamente non ci sono problemi ma rendere il tutto automatico tramite un pulsante un pò di più

    Per spiegarmi meglio la mia colonna tipo contiene circa 3000 stringhe alfanumeriche una sotto l'altra ed è fatta più o meno così :
    103932
    TFE110K91
    119544APM1
    3221520R1
    ...................

    Come prima cosa quindi dovrei fargli riconoscere quelle in cui il primo carattere è un numero(quindi "non selezionando" quella che inizia per T)....

    Come seconda cosa sulle rimanenti 3 dovrei fare l'operazione di "testo in colonne" usando come separatore la lettera R...

    Come risultato vorrei avere :
    103932
    TFE110K91
    119544APM1
    3221520
    ...................


    Spero di essermi spiegato nel migliore dei modi

  2. #2
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Ti sei spiegato male, dato che nel tuo esempio non vi è alcuna differenza tra i dure risultati.

    In ogni caso, per questo genere di problemi la ocsa più semplice è crearsi una macro che faccia il più possibile quello che serve a te.
    Poi parti dalla macro e vai a modificare il codice per personalizzartelo.

  3. #3
    veramente se guardi bene l'ultima stringa il finale R1 non c'è più...

    se fossi in grado creare una macro non vi avrei chiesto aiuto

  4. #4
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Originariamente inviato da bestmiki
    se fossi in grado creare una macro non vi avrei chiesto aiuto
    Basta avviare la registrazione della macro.
    Non devi creare niente.

  5. #5
    Ipotizzando Excel 2007, prova a partire da una macro del genere:

    codice:
    Sub eliminaR() 'Processa le celle di una colonna ed elimina i caratteri successivi alla stringa "separatore" nei dati a valore iniziale numerico
    Dim cell As Object, i As Integer, testo() As String, cella_destinazione As String, separatore As String, cella_iniziale As String
    
    'Variabili da personalizzare
    cella_destinazione = "B1" 'La prima cella della colonna in cui verranno riportati i risultati del processo
    separatore = "R" 'Carattere di separazione
    
    
    response = MsgBox("E' necessario aver attivato la prima cella della colonna da processare." & vbNewLine & "Premere SI per continuare, NO per uscire dalla macro.", vbYesNo)
    If response = vbNo Then Exit Sub
    
    Application.ScreenUpdating = False
    i = 0
    cella_iniziale = ActiveCell.Address
    Range(ActiveCell.Address, Range(ActiveCell.End(xlDown).Address)).Select
    For Each cell In Selection
        ReDim Preserve testo(i)
        testo(i) = ActiveCell.Value
        i = i + 1
        ActiveCell.Offset(1, 0).Activate
    Next
    Range(cella_destinazione).Activate
    
    For i = 0 To UBound(testo)
        If IsNumeric(Left(testo(i), 1)) = True And InStr(1, testo(i), separatore) > 1 Then
            ActiveCell.Value = Left(testo(i), InStr(1, testo(i), separatore) - 1)
        Else
            ActiveCell.Value = testo(i)
        End If
    ActiveCell.Offset(1, 0).Activate
    Next
    
    Range(cella_iniziale).Activate
    Application.ScreenUpdating = True
    End Sub

  6. #6
    grazie mille per l'aiuto, era proprio quello che cercavo

    nel frattempo comunque ho provato con il registra macro che mi era stato consigliato ed ero arrivato a questo codice che comunque funzionava...

    codice:
    'elimino il suffisso R 
    Columns("B:B").Select 
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove 
    Range("B1").Select 
    ActiveCell.FormulaR1C1 = "Suffisso R perso" 
    r = 2 
    Do Until Cells(r, 1) = ""  
    primocarattere = Left(Cells(r, 1), 1)   
    If IsNumeric(primocarattere) Then   
    Cells(r, 1).Select   Selection.TextToColumns Destination:=Cells(r, 1), DataType:=xlDelimited, _   TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _   Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar _   :="R", FieldInfo:=Array(1, 1), TrailingMinusNumbers:=True   
    End If  
    r = r + 1 
    Loop

    Si vede chiaramente purtroppo la differenza tra la il tuo codice ed il mio, molto più "artigianale" non avendo studiato le basi

  7. #7
    anche il mio è artigianale, ho imparato un po' facendo delle prove.
    Di sicuro dà più soddisfazione avere un codice fatto da sè che funziona che uno che non si capisce fatto da altri... buon divertimento!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.