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. P> 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. p> p>
5 Réponses :
Puisque vous l'avez marqué pour une formule
=LEFT(A1,FIND(" ",A1,30)-1)
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)
Je pense que vous recherchez la fonction Vous obtiendrez ce qui suivit: P> INSTR () code>. Cela pourrait vous donner le premier caractère spatial après la position 30. 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
C'est génial, mais comment puis-je boucler à travers les rangées de la colonne A.
@Ahmed à la boucle voir mon post.
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)
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
Rangements en boucle de la feuille 1, colonne A à partir de la rangée 1: