通过大量研究,我找到了一种代码,可以将存储在单元格中的句子截断为 100 个字符或更少,并将多余的句子添加到第二个字符串中。我一直在努力尝试把它变成一个函数。
我想让函数接受一个范围(1 列,不同的行),或者,如果不可能的话,一个具有相同范围值的数组。还应该有一种方法来设置每个输出字符串可以容纳的字符数,输出为字符串数组。
即 wordWrap(Input 'range or array', maxLength as integer) wordWrap 的输出将是结果的数组
这是我当前的代码:
Sub wordWrap()
'This procedure is intended to check the character length of a string and truncate all the words over 100 characters
'To a second string. (basically a word wrap)
Dim sumCount As Integer, newCount As Integer, i As Integer
Dim newString As String, newString2 As String
Dim words As Variant
Dim lenwords(0 To 1000) As Variant
Dim myRange As Range
sumCount = 0
newCount = 0
newString = ""
newString2 = ""
With Range("Q:Q")
.NumberFormat = "@"
End With
Set myRange = Range("B3")
words = Split(myRange.Value, " ")
For i = 0 To UBound(words)
lenwords(i) = Len(words(i))
Range("Q3").Offset(i, 0) = CStr(words(i)) 'DEBUG
Range("R3").Offset(i, 0) = lenwords(i) 'DEBUG
If sumCount + (lenwords(i) + 1) < 100 Then
sumCount = sumCount + (lenwords(i) + 1)
newString = newString & " " & words(i)
Else
newCount = newCount + (lenwords(i) + 1)
newString2 = newString2 & " " & words(i)
End If
Next
'DEBUG
Range("S3") = CStr(newString)
Range("T3") = Trim(CStr(newString2))
Range("S4") = Len(newString)
Range("T4") = Len(newString2)
ActiveSheet.UsedRange.Columns.AutoFit
End Sub
因此,如果以最多 100 个字符输入("B2:B6")或等效数组的范围:
c = wordWrap(Range("B2:B6"),100)
基本上这应该做的是计算每个单元格(或元素)的长度并截断任何使字符串超过 100 个字符的额外单词,并将它们连接到输出数组中下一个元素的前面到输出数组的下一个元素. 如果这会使该元素超过 100 个字符,那么再次执行相同的过程,直到所有元素都包含少于 100 个字符长的句子字符串。它应该在末尾添加一个额外的元素以适应任何剩余的单词。
我一直在扯我的头发试图让它发挥作用。我可以参考专家的建议。
任何帮助表示赞赏。
要求的示例:
http://s21.postimg.org/iywbgy307/trunc_ex.jpg
但是,输出应该是一个数组,而不是直接返回到工作表。