我有一个包含二进制字符串的列
11110010
如果找到1
12347
我尝试使用索引和匹配功能,但它没有工作原理
答案 0 :(得分:1)
InStr
方法可以显示字符的位置,但索引从 1 开始。
因此,在1234
中,如果我们找到1
,则会返回 1 。有一件事是,它将显示第一场比赛。
我测试了它:
MsgBox InStr("1234", "1")
我在消息框中给了 1 。但是,当我尝试如下时:
MsgBox InStr("12341", "1")
它没有为位置1和5 提供两个消息框。它只显示位置1 的消息框。如果没问题,请尝试使用此功能。
答案 1 :(得分:1)
将它放在工作表的模块中:
Function GetInstances(MyString As String, FindChar As String)
Dim X As Long, MyResult As String
MyResult = ""
For X = 1 To Len(MyString)
If Mid(MyString, X, 1) = FindChar Then MyResult = MyResult & X
Next
GetInstances = MyResult
End Function
在单元格A1中:11110010
在Cell B1中我使用了新公式:=GetInstances(A1,1)
它给我的结果是12347
A1包含要评估的字符串,其中的1是要查找的数字。
答案 2 :(得分:0)
使用数组进行速度的替代函数:
Function StrOut(strIn As String)
Dim buff() As String
Dim lngCnt As Long
buff = Split(StrConv(strIn, vbUnicode), Chr$(0))
For lngCnt = 0 To UBound(buff) - 1
StrOut = StrOut & (lngCnt + 1) * buff(lngCnt)
Next
StrOut = Replace(StrOut, "0", vbNullString)
End Function
测试代码
Sub Test()
MsgBox StrOut("11110010")
End Sub
使用我希望与Evaluate
一起尝试的公式方法进行修补,得到了尽可能远
=IF(MID(A1,ROW(INDIRECT("1:" & LEN(A1))),1)="1",ROW(INDIRECT("1:" & LEN(A1))),"X")
给出了
={1;2;3;4;"X";"X";7;"X"}
但尚未完成。