首页 > 解决方案 > 在 Excel 中翻译数字字符串

问题描述

所以基本上我在一列中有18位数字。此字符串表示给定人员在此表中的角色:

100000000000000000 -> Admin

000000000010000000 -> TL

000000000100000000 -> DEV

000000010000000000 -> Viewer

000000100000000000 -> TE

000000000000100000 -> TA

从字符串的长度来看,我认为它们是更多的角色,这些角色现在并不重要,但以后可能会更重要。问题是,可以有任何角色组合,例如:

000000010100000000 -> DEV, Viewer

000000100100000000 -> DEV, TE

100000010000100000 -> Admin, TA, Viewer

我的任务是将每个字符串翻译成角色。

因为我知道哪个位置代表哪个角色,所以我可以在字符串中搜索“1”并通过“1”的位置添加代表角色。这是我的问题,我不知道 VB 是否提供了搜索字符串以查找给定字符的多个外观并保存它们的相对位置的可能性。如果是这样,那么只需为每个角色添加“if then”即可。如果没有,我就像现在一样迷路了。

标签: excelvbastring

解决方案


也许这是一个起点:

Sub Test()

Dim Dict As Object: Set Dict = CreateObject("Scripting.Dictionary")
Dim str As String, Role As String
Dim arr1 As Variant, arr2 As Variant

arr1 = Array(1, 7, 8, 10, 11, 13)
arr2 = Array("Admin", "TE", "Viewer", "DEV", "TL", "TA")

str = "100000010000100000"

For x = 0 To 5
    If Mid(str, arr1(x), 1) = 1 Then Dict(arr2(x)) = 1
Next

Role = Join(Dict.Keys, ", ")

End Sub

dict.RemoveAll如果您打算在迭代中使用它,请不要忘记包括在内。


为了好玩,一个Evaluate选项:

Sub Test()

Dim str As String, Role As String
Dim arr1 As Variant, arr2 As Variant

str = "100000010000100000"

arr1 = Array("Admin", "TE", "Viewer", "DEV", "TL", "TA")
arr2 = Evaluate("IF(MID(""" & str & """,{1,7,8,10,11,13},1)=""1"",1,0)")

With Application
    Role = Join(Filter(.IfError(.Match(arr2, Array(0), 0), arr1), 1, False), ", ")
End With

End Sub

推荐阅读