当value = 1时,在字符串数组中获取数组位置

时间:2015-08-04 05:15:53

标签: excel excel-vba excel-formula vba

我有一个包含二进制字符串的列

11110010

如果找到1

,我需要在另一个单元格中返回位置 像这样

12347

我尝试使用索引和匹配功能,但它没有工作原理

3 个答案:

答案 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"}

但尚未完成。