Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 18

Discussione: [Excel 2007+vba]

  1. #1

    [Excel 2007+vba] Gestione Stringe

    ciao a tutti
    avrei bisogno di una mano devo fare una macro che faccia questo:
    quanto trova nel campo A1 = "CPUREC" deve sostituirla con W112

    CPUREC CPUNAME(W112)
    RIGA2
    RIGA3
    CPUREC CPUNAME(A110)
    RIGA2
    RIGA3

    RISULTATO:
    W112 CPUNAME(W112)
    W112 RIGA2
    W112 RIGA3
    A110 CPUNAME(A110)
    A110 RIGA2
    A110 RIGA3

    mi potete dare qualche consiglio?
    grazie molte a tutti.
    Andrea

  2. #2
    Questo dovrebbe fare quello che ti serve

    codice:
    Private Sub CommandButton1_Click()
       For Each Casella In Range("a1", Range("a1").End(xlDown))
          Posizione_Parentesi_1 = InStr(1, Casella.Value, "(")
          If Posizione_Parentesi_1 > 0 Then
             Posizione_Parentesi_2 = InStr(1, Casella.Value, ")")
             Lunghezza = Posizione_Parentesi_2 - Posizione_Parentesi_1 - 1
             Stringa_New = Mid(Casella.Value, Posizione_Parentesi_1 + 1, Lunghezza)
             Casella.Value = Replace(Casella.Value, "CPUREC", Stringa_New)
          Else
             Casella.Value = Stringa_New & " " & Casella.Value
          End If
       Next
    End Sub
    Ciao
    La democrazia rappresentativa ha fatto il suo tempo, è ora di passare alla democrazia diretta.
    www.beppegrillo.it

  3. #3
    Utente di HTML.it L'avatar di nelsonblu
    Registrato dal
    Feb 2007
    Messaggi
    2,234
    Se non vuoi scomodare il vba puoi usare in una nuova colonna questa formula che estrae il contenuto tra parentesi e ci sostituisce cipurec

    =SOSTITUISCI(A1;"CIPUREC";STRINGA.ESTRAI(A1;17;4); 1)

  4. #4
    Originariamente inviato da nelsonblu
    Se non vuoi scomodare il vba puoi usare in una nuova colonna questa formula che estrae il contenuto tra parentesi e ci sostituisce cipurec

    =SOSTITUISCI(A1;"CIPUREC";STRINGA.ESTRAI(A1;17;4); 1)
    eh, eh, ci son cascato anch'io all'inizio infatti avevo pensato a questo ma poi ho guardato bene i dati da cui parte e quelli a cui vuole arrivare e ho capito che la sua esigenza è un po' più complessa.
    La democrazia rappresentativa ha fatto il suo tempo, è ora di passare alla democrazia diretta.
    www.beppegrillo.it

  5. #5
    Utente di HTML.it L'avatar di nelsonblu
    Registrato dal
    Feb 2007
    Messaggi
    2,234
    azz.. è vero!!

    gli altri record hanno pure W112!!

    beh allora visto che ci sei, per puro studio a sto punto, anch'io io avevo pensato alle parentesi per generalizzare
    ma per qualche strana ragione come m.. ehm ehm.. che questa

    =STRINGA.ESTRAI(A1;TROVA("(";A1)+1;TROVA(")";A1)-1)

    fa +1 dopo la parentesi ma non -1 prima della parentesi???

  6. #6
    Nelson, riprenditi!
    Ti ho visto fare cose che noi umani ... e mi caschi sul terzo argomento della stringa.estrai?
    La democrazia rappresentativa ha fatto il suo tempo, è ora di passare alla democrazia diretta.
    www.beppegrillo.it

  7. #7
    Utente di HTML.it L'avatar di nelsonblu
    Registrato dal
    Feb 2007
    Messaggi
    2,234


    =STRINGA.ESTRAI(A1;TROVA("(";A1)+1;TROVA(")";A1)-TROVA("(";A1)-1)

    mi sa che è arrivato il momento di andare a fare na passeggiata!!

  8. #8
    non mi funziona mi scrive #NOME? .. mi sa che non trova la funzione TROVA io uso excel2010

    forse mi sono spiegato male di sicuro
    ma ho bisogno di sostituire tutte le rige con il contenuto di CPUNAME quando trova CPUREC

    ORIGINE
    ---------
    CPUREC CPUNAME(W112)
    campo vuoto RIGA2
    campo vuoto RIGA3
    CPUREC CPUNAME(A110)
    campo vuoto RIGA2
    campo vuoto RIGA3

    RISULTATO COME DEVE ARRIVARE
    --------------------------------
    W112 CPUNAME(W112)
    W112 RIGA2
    W112 RIGA3
    A110 CPUNAME(A110)
    A110 RIGA2
    A110 RIGA3
    ...
    ...
    ...

  9. #9
    Utente di HTML.it L'avatar di nelsonblu
    Registrato dal
    Feb 2007
    Messaggi
    2,234
    ciao chiccone
    hai due possibilità (io uso 2010 e trova c'è)
    o usi la mia chiavica di formula che però fa che deve fare con questo semplice stratagemma:
    in B1 risolvi a mano come dovrebbe essere scrivendoci W112 CPUNAME(W112)
    in B2 ci inserisci
    codice:
    =SE(A2="";STRINGA.ESTRAI(B1;1;TROVA(" ";B1));SOSTITUISCI(A2;"CPUREC";STRINGA.ESTRAI(A2;TROVA("(";A2)+1;TROVA(")";A2)-TROVA("(";A2)-1);1))
    e la trascini

    altrimenti usa il codice di Noncelfaccio+
    che però a me esce dal ciclo each alla seconda ricorrenza di CPUREC
    quindi se anche a te fa cosi o lo aspetti che lo corregga perchè io in vba di excel sono scarso oppure se vai di fretta
    sostituisci il rigo

    codice:
    For Each Casella In Range("a1", Range("a1").End(xlDown))
    con
    codice:
    For Each Casella In Range("a1:a100")
    dove al posto di a100 ci metti la cella ultima della colonna A dove hai dati

  10. #10
    Ciao a entrambi,
    concordo col fatto che il range fisso, tipo a1:a100 sia più pratico, la END l’avevo messa solo per rendere più elegante il codice non obbligando a inserire un range fisso ma effettivamente ha il problema che la scansione del range parte da A1 e si ferma alla prima casella vuota che trova.

    Forse è per questo che a Nelson si ferma al secondo ciclo.

    Ora poi che il problema è stato precisato meglio e vedo che prima delle “righe” c’è una casella vuota diventa ancora più necessario il range fisso.

    Per il resto mi sembra che il codice funzioni, l’ho provato su questi dati:

    http://img23.imageshack.us/img23/4500/primafq.jpg

    e ho ottenuto questo risultato:

    http://img850.imageshack.us/img850/2034/dopof.jpg

    e il codice usato è stato questo:

    codice:
    Private Sub CommandButton1_Click()
       For Each Casella In Range("a1:a13")
          Posizione_Parentesi_1 = InStr(1, Casella.Value, "(")
          If Posizione_Parentesi_1 > 0 Then
             Posizione_Parentesi_2 = InStr(1, Casella.Value, ")")
             Lunghezza = Posizione_Parentesi_2 - Posizione_Parentesi_1 - 1
             Stringa_New = Mid(Casella.Value, Posizione_Parentesi_1 + 1, Lunghezza)
             Casella.Value = Replace(Casella.Value, "CPUREC", Stringa_New)
          Else
             Casella.Value = Stringa_New & " " & Casella.Value
          End If
       Next
    End Sub
    La democrazia rappresentativa ha fatto il suo tempo, è ora di passare alla democrazia diretta.
    www.beppegrillo.it

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 © 2024 vBulletin Solutions, Inc. All rights reserved.