Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 从单个字符串单元格中提取多个数字以查看结果_Vba_Excel - Fatal编程技术网

Vba 从单个字符串单元格中提取多个数字以查看结果

Vba 从单个字符串单元格中提取多个数字以查看结果,vba,excel,Vba,Excel,我在做一个小项目。我遇到了一个无法绕过的问题。任何帮助都将不胜感激。 我有以下表格: 我需要一个函数从Sheet1中提取这3个数字(可以多于或少于3个),它们总是被“()”限制,并根据A1列中的数字在Sheet2中查找值 我能够(借助)编写以下代码来提取图形,但我不知道如何将图形从单个单元格中分离出来,并在sheet2中基于它进行查看: 编辑: 我原以为我能应付剩下的,但我错了。如果能提供更多帮助,将代码扩展为从Sheet2返回B列,我将不胜感激。通常,逻辑是函数将单元格从表1中拆分,然后在表

我在做一个小项目。我遇到了一个无法绕过的问题。任何帮助都将不胜感激。 我有以下表格:

我需要一个函数从Sheet1中提取这3个数字(可以多于或少于3个),它们总是被“()”限制,并根据A1列中的数字在Sheet2中查找值

我能够(借助)编写以下代码来提取图形,但我不知道如何将图形从单个单元格中分离出来,并在sheet2中基于它进行查看:

编辑:


我原以为我能应付剩下的,但我错了。如果能提供更多帮助,将代码扩展为从Sheet2返回B列,我将不胜感激。通常,逻辑是函数将单元格从表1中拆分,然后在表2中查看每个项目。该功能的最终结果将是:

测试1 测试2 测试3

我已经用我自己尝试过的方法更新了代码

Function onlyDigits(s As String) As String
Dim retval As String
Dim i,j As Integer
Dim TestRng as Range
Dim NoArr() as String
Dim TestRes() as String

retval = ""
s = Replace(s, ")", " ")
For i = 1 To Len(s)
    If Mid(s, i, 1) >= "0" And Mid(s, i, 1) <= "9" Or Mid(s, i, 1) = " " Then
        retval = retval + Mid(s, i, 1)
    End If
Next
'deletes last unnecessary space
retval = Left(retval, Len(retval) - 1) 
'array with results after extracting numbers
NoArr() = Split(retval, " ", , vbTextCompare)
'vlookedup range
set TestRng = Worksheets("Sheet2").Range("A1:B3")

For j = LBound(NoArr) To UBound(NoArr)

    TestRes(j) = Application.WorksheetFunction.VLookup(NoArr(j), TestRng, 2, 0)

Next j  

onlyDigits = TestRes 
End Function
函数仅将数字(作为字符串)作为字符串
作为字符串的Dim retval
作为整数的Dim i,j
Dim TestRng as范围
Dim NoArr()作为字符串
Dim TestRes()作为字符串
retval=“”
s=替换(s,“)”,“”)
对于i=1到Len(s)

如果Mid(s,i,1)>=“0”且Mid(s,i,1)与当前方法保持一致,则我修改了函数以通过传递占位符返回所需的值。我修改了从第一行到最后一行的第二行

Function onlyDigits(s As String, pos As Integer) As String
    Dim retval As String
    Dim i As Integer

    retval = ""
    s = Replace(s, ")", " ")
    For i = 1 To Len(s)
        If Mid(s, i, 1) >= "0" And Mid(s, i, 1) <= "9" Or Mid(s, i, 1) = " " Then
            retval = retval + Mid(s, i, 1)
        End If
    Next
    'deletes last unnecessary space
    retval = Left(retval, Len(retval) - 1)
    onlyDigits = Split(retval, " ", , vbTextCompare)(pos)
End Function
函数仅将数字(s作为字符串,pos作为整数)作为字符串
作为字符串的Dim retval
作为整数的Dim i
retval=“”
s=替换(s,“)”,“”)
对于i=1到Len(s)

如果Mid(s,i,1)>=“0”且Mid(s,i,1)与当前方法保持一致,则我修改了函数以通过传递占位符返回所需的值。我修改了从第一行到最后一行的第二行

Function onlyDigits(s As String, pos As Integer) As String
    Dim retval As String
    Dim i As Integer

    retval = ""
    s = Replace(s, ")", " ")
    For i = 1 To Len(s)
        If Mid(s, i, 1) >= "0" And Mid(s, i, 1) <= "9" Or Mid(s, i, 1) = " " Then
            retval = retval + Mid(s, i, 1)
        End If
    Next
    'deletes last unnecessary space
    retval = Left(retval, Len(retval) - 1)
    onlyDigits = Split(retval, " ", , vbTextCompare)(pos)
End Function
函数仅将数字(s作为字符串,pos作为整数)作为字符串
作为字符串的Dim retval
作为整数的Dim i
retval=“”
s=替换(s,“)”,“”)
对于i=1到Len(s)

如果Mid(s,i,1)>=“0”和Mid(s,i,1)正常,我用以下代码解决了问题:

F    Function onlyDigits(s As String) As String
Dim retval As String
Dim i, j As Integer
Dim TestRng As Range
Dim NoArr() As String
Dim TestRes() As String

retval = ""
s = Replace(s, ")", " ")
For i = 1 To Len(s)
    If Mid(s, i, 1) >= "0" And Mid(s, i, 1) <= "9" Or Mid(s, i, 1) = " " Then
        retval = retval + Mid(s, i, 1)
    End If
Next
'deletes last unnecessary space
retval = Left(retval, Len(retval) - 1)
'array with results after extracting numbers
NoArr() = Split(retval, " ", , vbTextCompare)
'vlookedup range
Set TestRng = Worksheets("Sheet2").Range("A1:B3")

For j = LBound(NoArr) To UBound(NoArr)
    ReDim Preserve TestRes(j)
    TestRes(j) = Application.WorksheetFunction.VLookup(CLng(NoArr(j)), TestRng, 2, False)

Next j

onlyDigits = Join(TestRes, vbNewLine)
End Function
F函数仅将数字(作为字符串)作为字符串
作为字符串的Dim retval
作为整数的Dim i,j
Dim TestRng As范围
Dim NoArr()作为字符串
Dim TestRes()作为字符串
retval=“”
s=替换(s,“)”,“”)
对于i=1到Len(s)

如果Mid(s,i,1)>=“0”和Mid(s,i,1)正常,我用以下代码解决了问题:

F    Function onlyDigits(s As String) As String
Dim retval As String
Dim i, j As Integer
Dim TestRng As Range
Dim NoArr() As String
Dim TestRes() As String

retval = ""
s = Replace(s, ")", " ")
For i = 1 To Len(s)
    If Mid(s, i, 1) >= "0" And Mid(s, i, 1) <= "9" Or Mid(s, i, 1) = " " Then
        retval = retval + Mid(s, i, 1)
    End If
Next
'deletes last unnecessary space
retval = Left(retval, Len(retval) - 1)
'array with results after extracting numbers
NoArr() = Split(retval, " ", , vbTextCompare)
'vlookedup range
Set TestRng = Worksheets("Sheet2").Range("A1:B3")

For j = LBound(NoArr) To UBound(NoArr)
    ReDim Preserve TestRes(j)
    TestRes(j) = Application.WorksheetFunction.VLookup(CLng(NoArr(j)), TestRng, 2, False)

Next j

onlyDigits = Join(TestRes, vbNewLine)
End Function
F函数仅将数字(作为字符串)作为字符串
作为字符串的Dim retval
作为整数的Dim i,j
Dim TestRng As范围
Dim NoArr()作为字符串
Dim TestRes()作为字符串
retval=“”
s=替换(s,“)”,“”)
对于i=1到Len(s)

如果Mid(s,i,1)>=“0”和Mid(s,i,1)非常感谢,这就是我一直在寻找的,我想我会自己处理其余的,但我没有成功。我已经更新了我的问题。通常,逻辑是函数将单元格从sheet1中拆分,然后将每个项目放入Sheet2中。这个函数的最终结果是:Test1 Test2 test3非常感谢,这就是我一直在寻找的。我以为我会自己处理其余的,但我没有成功。我已经更新了我的问题。通常,逻辑是函数将单元格从sheet1中拆分,然后将每个项目放入Sheet2中。此函数的最终结果是:Test1 Test2 Test3