0
votes

Comment puis-je pouvoir tronquer jusqu'à certains caractères dans Excel VBA?

J'ai une feuille Excel avec quelques rangées de descriptions dans une seule colonne, ce que je vis est d'obtenir un VBA qui irait à toutes ces lignes de descriptions et de la tronquer jusqu'à la limite de caractère, par exemple 30 caractères et si le La troncature s'arrête à 30 caractères au milieu du mot, je veux que le mot complet (pourrait prolonger 30 caractères dans ce cas).

J'ai essayé de le faire avec le code VBA ci-dessous, mais je ne suis pas capable d'obtenir ce que Je cherche. xxx

Je pense que le code passe dans toutes les lignes d'une colonne spécifique et de la tronquer jusqu'à 30 caractères et si la troncature s'arrête au milieu de la mot, alors il devrait garder ce mot.


0 commentaires

5 Réponses :


2
votes

Puisque vous l'avez marqué pour une formule

=LEFT(A1,FIND(" ",A1,30)-1)


1 commentaires

Brillante réponse !!! ... une autre chose que si je veux laisser tomber le mot à 30 caractères si elle s'arrête au milieu d'un mot (ce qui pourrait être inférieur à 30 caractères)



0
votes

Je pense que vous recherchez la fonction INSTR () code>. Cela pourrait vous donner le premier caractère spatial après la position 30.

Vous obtiendrez ce qui suivit: P>

Dim SpacePosition as Integer

'return the position for the first space-character after position 29
SpacePosition = Instr(30, r.value," ")

if SpacePosition <> 0 then

    'fill ret with the substring up to the first space after position 29
    ret = left(r.value, SpacePosition - 1)

else

    'if there is no space-character (after position 29) then take the whole string
    ret = r.value

end if


2 commentaires

C'est génial, mais comment puis-je boucler à travers les rangées de la colonne A.


@Ahmed à la boucle voir mon post.



0
votes

Solution Best & Brilliant de @scott Craner. Cependant, dans votre code VBA, vous pouvez modifier les suivants pour obtenir le résultat requis

'Join the array back to a string/sentence
'ret = Join(sentence, " ")
ret = ""
For w = LBound(sentence) To UBound(sentence)
    ' trim to 6 characters:
    sentence(w) = Left(sentence(w), 6)
ret = ret & IIf(Len(ret) > 0, " ", "") & sentence(w)
If Len(ret) >= 30 Then Exit For
Next w

'Make sure the sentence is max 20 chars:
' ret = Left(ret, 20)


0 commentaires

0
votes
Public Function foo(r As Range, length As Integer) As String
    If Len(r.Value) <= length Then
        foo = r.Value
    Else
        foo = Left(r.Value, 1 + length)
        foo = RTrim(Left(foo, InStrRev(foo, " ")))
    End If
End Function
I suppose you would want to run that by passing 20 as the 2nd parameter

0 commentaires

0
votes

Rangements en boucle de la feuille 1, colonne A à partir de la rangée 1: xxx


0 commentaires