Scuola forum (scuo.la) - Forum di discussione per le scuole

Scuola forum (scuo.la) - Forum di discussione per le scuole (https://www.scuolaforum.org/)
-   Informatica (https://www.scuolaforum.org/informatica/)
-   -   Riempire cella fino a quando raggiungi il valore (https://www.scuolaforum.org/informatica/44-riempire-cella-fino-quando-raggiungi-il-valore.html)

lisa 07-09-2007 02:22 PM

Riempire cella fino a quando raggiungi il valore
 
Salve.
Ho un foglio fatto così:
_________A___________B__________C__________D__________E
7___________________casa______grande______rossa_______verde
13_______10__________?
14_______20__________?
15_______30__________?
16_______40__________?
17_______50__________?

Praticamente nella celle B7, C7, D7, E7 ci sono inserite delle parole, che possono anche essere delle frasi.
Nella colonna A in A13, A14, A15 A16 e A17 ci sono invece dei numeri che rappresentano delle lunghezze.

Ora, dove ci sono i punti di domanda ?, io devo inserire una formula che mi concateni le varie parole o frasi della riga 7 fino al raggiungimento della lunghezza della colonna A (magari aggiungendo uno spazio ogni volta che inserisce il valore di una cella diversa)

Quindi in B13 comparira "casa" perchè sono già 4 caratteri, quindi minore di 10
In B14 invece ci sarà "casa grande rossa" che sono 17 caratteri, quindi minore di 20 e così via.

In B15, B16 e B17 ci sarà "casa grande rossa verde" che sono 23 caratteri quindi minore rispettivamente di 30, 40 e 50.

Non dovrebbe essere difficile, ma io non ci salto fuori!:-(
Grazie a chiunque mi aiuterà
Lisa

ivano 07-09-2007 07:49 PM

Utilizzando due righe d'appoggio puoi fare così:

B8=LUNGHEZZA(B7) e ricopi fino a F8

B9=B8
C9=B9+C8 e ricopi fino a F9

B10=B7
C10=B10& " " &C7 e ricopi fino a F10

C13=SE(VAL.ERRORE(CERCA.ORIZZ(A13;$B$9:$F$10;1));"";SE(CERCA.ORIZZ(A13;$B$9:$F$10;1)=A13;SE(A13-1>$B$9;CERCA.ORIZZ(A13-1;$B$9:$F$10;2);"");CERCA.ORIZZ(A13;$B$9:$F$10;2)))
e ricopi fino a in basso fino a quando vuoi.

sappimi dire
ciao
Ivano

lisa 07-09-2007 07:51 PM

Va, va!
Grazie mille

valerio 07-13-2007 07:53 PM

Se metti le lunghezze in A2, A3, A4, A5 e le parole in C1, D1, E1, F1, puoi utilizzare questa macro (la puoi utilizzare ugualmente ma modificando i riferimenti di cella)

codice:

Sub scrivi()
Dim temp, temp1, temp2, temp3, temp4, temp5, temp6, temp7 As String

    temp1 = Range("c1").Value
    temp2 = Range("d1").Value
    temp3 = Range("e1").Value
    temp4 = Range("f1").Value

    temp = temp1
    temp5 = temp & " " & temp2
    temp6 = temp5 & " " & temp3
    temp7 = temp6 & " " & temp4   
   
    For i = 2 To 5
    If Len(temp7) <= Range("a" & i).Value Then
        Range("b" & i).Value = temp7
    ElseIf Len(temp6) <= Range("a" & i).Value Then
        Range("b" & i).Value = temp6
    ElseIf Len(temp5) <= Range("a" & i).Value Then
        Range("b" & i).Value = temp5
    ElseIf Len(temp) <= Range("a" & i).Value Then
        Range("b" & i).Value = temp
    End If
    Next i
   
End Sub

Ciao
Valerio

giulia 07-13-2007 08:08 PM

Un miglioramento della formula di Ivano potrebbe essere questa:

codice:

=SE(LUNGHEZZA($B$7)<A13;$B$7;"")&SE(LUNGHEZZA($B$7&" "&$C$7)<A13;" "&$C$7;"")&SE(LUNGHEZZA($B$7&" "&$C$7&" "&$D$7)<A13;" "&$D$7;"")&SE(LUNGHEZZA($B$7&" "&$C$7&" "&$D$7&" "&$E$7)<A13;" "&$E$7;"")
Ciao
Giulia

giovanni 07-13-2007 10:19 PM

Altra soluzione, molto simile a quella di giulia: poi basta, eh?:-D

codice:

=SE(LUNGHEZZA(B$7)>A13;" ";SE(LUNGHEZZA(CONCATENA(B$7;" ";C$7))>A13;B7;SE(LUNGHEZZA(CONCATENA(B$7;" ";C$7;" ";D$7))>A13;CONCATENA(B$7;" ";C$7);SE(LUNGHEZZA(CONCATENA(B$7;" ";C$7;" ";D$7;" ";E$7))>A13;CONCATENA(B$7;" ";C$7;" ";D$7);CONCATENA(B$7;" ";C$7;" ";D$7;" ";E$7)))))
Saluti

lisa 07-13-2007 10:27 PM

1 allegato(i)
Tutte ottime soluzioni. Per chi volesse provarle, allego il file vergine (potevo forse farlo prima?;-))
Grazie ancora
Lisa

teo 07-16-2007 04:57 PM

Potresti anche fare così:
nel tuo file di Excel, nell'Editor di VBA, inserisci un nuovo Modulo e copiaci dentro questa funzione:

codice:

    Public Function ConcatenaConLimite(rng As Range, lim As Range)
    For k = rng.Column To rng.Column + rng.Columns.Count
        s = s & Cells(rng.Row, k) & " "
        If Len(s & Cells(rng.Row, k + 1)) > lim.Value Then
            ConcatenaConLimite = Trim (s)
            Exit Function
        End If
    Next
        ConcatenaConLimite = Trim (s)
    End Function

Dopo di che, nel tuo foglio di lavoro, nelle celle in cui ti interessano i risultati (quindi in B13, B14, B15, etc..), usa la nuova funzione in questo modo:

codice:

=concatenaconlimite($B$7:$E$7;A13)
Teo


Tutti gli orari sono GMT +2. Attualmente sono le 04:35 AM.