阅读通配符As Asterisk

时间:2016-03-25 12:08:51

标签: excel vba

我本周早些时候委托了一段代码(让专家写的比我花费一周时间更便宜!)。然而,当它使用时,我遇到了一些障碍。

宏查看一个Excel工作表上的名称,将其与不同工作表上的名称列表和关联的ID号相匹配,然后在第一个工作表上插入ID。在我开始在真实数据上使用它之前,这一切都很好。

以下是一些示例数据(所有这些信息都在一个单元格中......):

WARHOL *,Andy

PETO,John F

D3 GRECO,Emilio -20th C

HASELTINE,William Stanley

D3 DALI,Salvador

D3 SOSNO,Sacha

WEGMAN **,WILLIAM

一个星号表示它是一个印刷品,两个是一张照片,D3是一个雕塑,而不是一幅画。

当我使用此数据运行代码时,它会将*视为通配符,因此将始终在工作表中插入艺术家的第一个变体的ID。我需要的是一种宏不能将其作为通配符读取的方法。

我做了一些研究,发现插入〜之前*否定了通配符属性。我如何让我的代码这样做?我发现了由其他人编写代码的主要问题......你可能不理解它!

以下是代码:

Public Sub match_data()
'ctrl+r
On Error GoTo errh

Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual

Dim r1, r2, i, exc As Long
Dim fp As Range

Sheets("Data").Activate

r1 = Cells(Rows.Count, "B").End(xlUp).Row
r2 = Sheets("List").Cells(Sheets("List").Rows.Count, "B").End(xlUp).Row

'MsgBox r1 & r2

exc = 0

For i = 2 To r1
    If Range("B" & i).Value <> "" Then
        With Sheets("List").Range("B2:B" & r2)
            Set fp = .Find(Range("B" & i).Value, LookIn:=xlValues, lookat:=xlWhole)

        If Not fp Is Nothing Then
            Range("B" & i).Interior.Color = xlNone
            Range("A" & i).Value = Sheets("List").Range("A" & fp.Row).Value
        Else
            Range("B" & i).Interior.Color = xlNone
            Range("B" & i).Interior.Color = vbYellow
            exc = exc + 1
        End If

    End With
End If
Next i

MsgBox "There are " & exc & " exceptions."

errh:
If Err.Number > 0 Then
    MsgBox Err.Description
End If

Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
End Sub

哦,我还需要为名单和ID做这个,不是吗?如果是这样,那只需要做一次,所以如果你能给我一个暗示,我会非常感激!

谢谢!

PS我知道我们现在使用的系统绝对糟糕(绝对不是标准化的第三种形式!),但我们正在快速耗尽时间和金钱,并且需要尽快启动并运行我们的产品!

编辑:为了澄清,这里是我正在使用的电子表格的图片......显然,在单元格A14和A15中,我想要ID号11和A;分别为12个

Clarification

2 个答案:

答案 0 :(得分:0)

这是告诉行星中恒星的一种方法:

Sub StaryNight()
    Dim s As String, OneStar As String, TwoStar As String, ThreeStar As String

    OneStar = "*"
    TwoStar = "**"
    ThreeStar = "***"
    t = Range("A1").Text
    ary = Split(t, ",")
    s = ary(0)

    If Right(s, 3) = ThreeStar Then
        MsgBox "scupture"
        Exit Sub
    ElseIf Right(s, 2) = TwoStar Then
        MsgBox "photograph"
        Exit Sub
    ElseIf Right(s, 1) = OneStar Then
        MsgBox "print"
        Exit Sub
    End If

    MsgBox "Painting"
End Sub

enter image description here

答案 1 :(得分:0)

好的,我已经解决了这个问题!我在“查找和替换”框中更改了变量。

如果我在查找和替换框中都放了〜*,并取消选中匹配整个单元格内容,我可以用〜*替换所有*(真的不明白但是哦!)

所以我在数据工作表上执行此操作,但不在列表工作表上,正常运行宏并解决问题!