如何在Excel VBA中截断少于30个字符并删除?

时间:2019-01-28 18:50:16

标签: excel vba excel-formula

我有一个excel表格,在单列中包含一些描述行,我的目标是得到一个公式,该公式可以将其截断到某些字符限制,例如30个字符,并且如果截断在中间的30个字符处停止单词,然后我删除最后一个单词。

这是我要使其起作用的公式。

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

3 个答案:

答案 0 :(得分:2)

使用AGGREGATE在前31个字符中查找最后一个空格。

=LEFT(A2, AGGREGATE(14, 7, ROW($1:$31)/(MID(A2&" ", ROW($1:$31), 1)=" "), 1) -1)

enter image description here

答案 1 :(得分:1)

无循环方法

=IF(LEN(A2)<30,A2,LEFT(A2,FIND("}}}",SUBSTITUTE(A2," ","}}}",30-LEN(SUBSTITUTE(LEFT(A2,30)," ",""))))-1))

enter image description here

答案 2 :(得分:0)

尝试类似这样的方法: 在VBA编辑器(ALT + F11)->插入新模块中放入模块。

当您过去这段代码时,可以从任何带有“ = NotTruncateWord(A1; 30)”的单元格中调用它。

有一些调整要做,因为很难知道什么是单词(在空格后面?),我问,因为如果有人写了一个35个字符的字符串而没有空格,我会考虑一个单词并删除所有?


公共函数NotTruncateWord(值,限制)

LastSpaceBeforeLimit = 0
FirstSpaceAfterLimit = 9999

Phrase_Lenght = Len(Value)
If Phrase_Lenght > Limit Then

    For i = 1 To Phrase_Lenght
        check = Mid(Value, i, 1)
        If Asc(check) = 32 Then
           If i < Limit Then
              LastSpaceBeforeLimit = i
              ElseIf i < FirstSpaceAfterLimit Then
              FirstSpaceAfterLimit = i
           End If
        End If
    Next


    If LastSpaceBeforeLimit > 0 Then
       NotTruncateWord = Left(Value, LastSpaceBeforeLimit)
       Else
       NotTruncateWord = Left(Value, Limit)
    End If

    Else
    'no need to truncate
    NotTruncateWord = Value
End If

结束功能