Condividi tramite

Formula per ripetere stringhe

Anonimo
2012-10-26T14:20:52+00:00

Ciao a tutti.

sulla colonna A ho delle stringhe di testo e sulla colonna B il numero di volte che si ripetono.

Il mio obiettivo è quello di poter ripetere le singole stringhe presenti su A su un'altra colonna (ad esempio su C a partire da C2)  in maniera sequenziale per un numero di volte pari al loro valore adiacente (colonna B).

Per la soluzione preferirei una formula in quanto mi è più facile da gestire.

Grazie a tutti,

A.

https://skydrive.live.com/redir.aspx?cid=dd405b0d5a6097c5&resid=DD405B0D5A6097C5!127&parid=root

file: Ripeti_stringhe

Microsoft 365 e Office | Excel | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

Risposta accettata dall'autore della domanda

Anonimo
2012-10-26T17:06:57+00:00

Ciao,  ti ringrazio del gentile riscontro.

Excel 2007 aiuta la formula ad essere piu' presentabile.

=SE.ERRORE(INDICE($A$2:$A$6;CONFRONTA(MIN(SE($D$2:$D$6>=RIF.RIGA(A1);$D$2:$D$6));$D$2:$D$6));"")

Sempre -purtroppo- da confermare con control+maiusc+invio.

Condivido un piccolo file dove ho provato la formula.

https://skydrive.live.com/?ppud=4#!/edit.aspx?cid=52DA7FA4E38E756D&resid=52DA7FA4E38E756D!142&app=Excel

Saluti

La risposta è stata utile?

0 commenti Nessun commento

5 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2012-10-26T16:54:44+00:00

    Ciao Canapone,

    ho visto la tua proposta di soluzione lunedi' vedo e faccio sapere.

    grazie,

    A.

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2012-10-26T16:52:21+00:00

    Mauro,

    grazie per la soluzione con vb ma per questa volta mi serviva una formula.

    Forse tu non ci crederai ma molti dei miei colleghi (che adesso se la ridono) quando vedono un file con l'estensione .xlsm non si sognerebbero mai di aprirlo... figurati se uno gli dice: "codice da copiare ed incollare in un modulo standard"; di moduli loro conoscono solo quelli lunari!!!

    ancora grazie per la soluzione con vb,

    A.

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2012-10-26T15:33:50+00:00

    Ciao,

    per ottenere l'elenco con una formula potresti scrivere in D2

    =SOMMA($B$2:B2)

    tirando giù la somma progressiva del numero delle posizioni da ripetere

    Nel tuo esempio ottieni in D2:D6

    1-8-11-32-52

    In C2 (uso Excel 2003)

    =SE(VAL.ERRORE(INDICE($A$2:$A$6;CONFRONTA(MIN(SE($D$2:$D$6>=RIF.RIGA(A1);$D$2:$D$6));$D$2:$D$6)));"";INDICE($A$2:$A$6;CONFRONTA(MIN(SE($D$2:$D$6>=RIF.RIGA(A1);$D$2:$D$6));$D$2:$D$6)))

    da confermare con control+maiusc+invio e tirare giù per ottenere l'elenco.

    Giusto per condividere qualche idea.

    Saluti

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2012-10-26T14:39:17+00:00

    Ciao a tutti.

    sulla colonna A ho delle stringhe di testo e sulla colonna B il numero di volte che si ripetetono.

    Il mio obiettivo è quello di poter ripetere le singole stringhe presenti su A su un'altra colonna (ad esempio su C a partire da C2)  in maniera sequenziale per un numero di volte pari al loro valore adiacente (colonna B).

    Per la soluzione preferirei una formula in quanto mi è più facile da gestire.

    Grazie a tutti,

    A.

     

    https://skydrive.live.com/redir.aspx?cid=dd405b0d5a6097c5&resid=DD405B0D5A6097C5!127&parid=root

    file: Ripeti_stringhe

     

     

    Con vb è una sciocchezza.

    Public Sub m()

        Dim lRigheA As Long

        Dim lRigheB As Long

        Dim lRiga As Long

        Dim c As Range

        Dim rng As Range

        Dim lng As Long

        Dim lVolte As Long

        With ActiveSheet

            lRigheA = .Range("A" & .Rows.Count).End(xlUp).Row

            lRigheB = .Range("D" & .Rows.Count).End(xlUp).Row

            .Range("D2:D" & lRigheB).ClearContents

            lRiga = 2

            Set rng = .Range("A2:A" & lRigheA)

            For Each c In rng

                lVolte = c.Offset(0, 1).Value

                For lng = 1 To lVolte

                   .Cells(lRiga, 4).Value = c.Value

                   lRiga = lRiga + 1

                Next

            Next

        End With

        Set rng = Nothing

        Set c = Nothing

    End Sub

    Da copia incollare in un modulo standard. Corregge anche l'errore che c'è nell'esempio che hai fatto... ;-), per quello metto il risultato in D, in modo che tu possa controllare. Se lo vuoi in C, Sostituisci D con C nella macro e modifica qui:

    .Cells(lRiga, 4).Value = c.Value

    così

    .Cells(lRiga, 3).Value = c.Value

    La risposta è stata utile?

    0 commenti Nessun commento