iniziali in maiuscolo



  • iniziali in maiuscolo
    di Mauro (utente non iscritto) data: 15/01/2013 14:09:30

    Ciao a tutti, il codice sotto riportato è esatto, ho il bisogno di inserire nella cella [A3] il nome e il cognome con le lettere iniziali in maiuscolo, è possibile, se si come?
    Ringrazio in anticipo
    Mauro

     
    Sub Inordinealfabetico()
        Foglio3.Rows("3:3").Insert Shift:=xlDown
        Foglio1.Activate
        With Foglio3
            .[A3] = [C22]
            .[B3] = [C24]
            .[C3] = [C26]
            .[D3] = [C6]
        End With
        [C22:C26].ClearContents
        Foglio3.Activate
        [A2].CurrentRegion.Sort Key1:=[A1], Header:=xlYes
        Foglio1.Activate
    End Sub


  • iniziali in maiuscolo
    di Mauro (utente non iscritto) data: 15/01/2013 14:11:49

    Ciao a tutti, il codice sotto riportato è esatto, ho il bisogno di inserire nella cella [A3] il nome e il cognome con le lettere iniziali in maiuscolo, è possibile, se si come?
    Ringrazio in anticipo
    Mauro

     
    Sub Inordinealfabetico()
        Foglio3.Rows("3:3").Insert Shift:=xlDown
        Foglio1.Activate
        With Foglio3
            .[A3] = [C22]
            .[B3] = [C24]
            .[C3] = [C26]
            .[D3] = [C6]
        End With
        [C22:C26].ClearContents
        Foglio3.Activate
        [A2].CurrentRegion.Sort Key1:=[A1], Header:=xlYes
        Foglio1.Activate
    End Sub



  • di HarryBosch data: 15/01/2013 15:31:57

    C'è anche un'apposita funzione sul foglio di lavoro che fa proprio questo, ovvero converte tutta la stringa con l'iniziale in maiuscolo (e il resto in minuscolo):
    =MAIUSC.INIZ(A3)

    che tradotta in vba diventa:
    [a3] = WorksheetFunction.Proper([a3])



  • di HarryBosch data: 15/01/2013 15:33:36

    Per essere precisi, la funzione converte la prima lettera di ciascuna parola contenuta nella stringa.


  • iniziali in maiuscolo
    di Mauro (utente non iscritto) data: 15/01/2013 15:58:00

    Perfetto, e se tra una parola e l'altra 1 spazio solo? in vba
    Grazie
    Mauro



  • di HarryBosch data: 15/01/2013 16:01:40

    In che senso? Ogni spazio o più, distanzia le parole, quindi per ciascuna di esse contenuta nella stringa, verrà convertita con l'iniziale in maiuscolo.
    Se nella cella ho scritto haRRy bosCH
    il risultato sarà Harry Bosch


  • iniziali in maiuscolo
    di Mauro (utente non iscritto) data: 15/01/2013 16:08:57

    Può succedere a volte di inserire più spazi tra una parola e l'altra, quindi in questo caso corregge a uno spazio.



  • di HarryBosch data: 15/01/2013 16:41:24

    Se dovessimo togliere gli spazi iniziali e/o finali ci sarebbero delle funzioni già pronte. Ma se gli spazi da togliere sono tra le parole, mi sa che l'unica soluzione è quella di passare tutta la stringa con un ciclo. Magari in partenza usiamo lo split per dividere ogni parola per poi concatenarla con un solo spazio.
     
    [a3] = WorksheetFunction.Proper([a3])
    stringa = Split([a3], " ")
    For i = 0 To UBound(stringa)
    [a3] = Trim([a3] & " " & stringa(i))
    Next
    


  • iniziali in maiuscolo
    di Mauro (utente non iscritto) data: 15/01/2013 16:55:18

    Perfetto Grazie

    Mauro



  • di Vecchio Frac data: 15/01/2013 19:04:32

    Fornisco una mia interpretazione... la prima dovrebbe essere mostruosamente inefficiente in termini di cicli del processore (usa un ciclo Do...Loop) ma ha il vantaggio di non utilizzare alcuna variabile d'appoggio; la seconda è mostruosamente efficiente e rapida ma crea un nuovo oggetto in memoria (ultimamente sto giocando con le potentissime "espressioni regolari"), con quel che comporta.
     
    Option Explicit
    
    Function trim_inner_spaces(s As String) As String
        Do Until InStr(s, "  ") = 0
            s = Replace(s, "  ", " ")
        Loop
        trim_inner_spaces = Trim(s)
    End Function
    
    
    Function trim_inner_spaces_with_regex(s As String) As String
    Dim re As Object
        Set re = CreateObject("vbscript.regexp")
        re.Global = True
        re.Pattern = "s{2,}"
        
        trim_inner_spaces_with_regex = re.Replace(s, " ")
    End Function