我正在尝试从被引用的列中逐个单元格获取包含第一个单词的索引号的列。
我能够获得文本中单词的长度,因为其中的上单元格值使用了ActiveCell.Offset(-1, 0).Activate
,但对我来说不起作用。
Public Function StartIndex(ByVal strText As String) As Long
Application.Volatile
Length = UBound(Split(strText, " ")) + 1
StartIndex = ActiveCell.Offset(-1, 0).Activate + Length
End Function
下面看,考虑默认情况下我有 col1 ,并希望通过VBA startIndex ;
Col1 | startIndex
VBA Index Printer Friendly version | 1
Adobe Acrobat version | 6
A UDF can remain in a code module | 9
如上图所示,考虑到该表具有3行和两列,col1第1行中单词“ VBA” **的索引号是1个类似的单词**“ is” ,紧挨单词“ VBA” 的索引为2,依此类推..考虑到行是段落的组合,因此当我们到达Col1 row2时,单词“ Adobe” 的索引应如表所示为6
实际上,startIndex列显示了段落中第一个单词的索引号,该单词被分成行
答案 0 :(得分:2)
不需要VBA,只需使用公式即可对单词进行计数:
然后将单词数量添加到上一个单词数量(从上一行开始)。
1
写入B1(始终为1)在B2中使用以下公式:
=B1+LEN(TRIM(A1))-LEN(SUBSTITUTE(TRIM(A1)," ",""))+1
将公式从B2复制到B3
答案 1 :(得分:0)
我会略有不同,然后通过范围。
Public Function StartIndex(ByVal textCell As Range) As Long
Dim text As String
text = textCell.Value
Dim result As Long
result = (UBound(Split(text, " ")) + 1)
If textCell.Row > 1 Then
result = result - (UBound(Split(textCell.Offset(-1, 0).Value, " ")) + 1)
End If
StartIndex = result
End Function
示例用法:
=StartIndex(A1)
或在VBA中:
Dim index As Long
index = StartIndex(Range("A1"))
答案 2 :(得分:0)
我已经修改了原始功能,使其能够处理范围:
Public Function StartIndex(ByVal vRNG As Range) As Long
Application.Volatile
Dim rng As Range
For Each rng In vRNG
StartIndex = UBound(Split(rng.Value, " ")) + 1 + StartIndex
Next rng
End Function
然后,您可以像这样应用它:
=StartIndex($A$1:A1)+1
但是要使其正常工作,您需要从第2行开始应用它。...
另一种选择是在B1中仅输入1(因为它始终为1),然后在B2中输入相同的公式:
=StartIndex($A$1:A1)+1
它会起作用: