簡體   English   中英

Excel宏中的部分單元格(或字符串)匹配

[英]Partial cell(or string) match in excel macro

我是VBA的新手,我想在兩張紙之間進行部分字符串(或單元格)匹配。

Name1的一個示例是“ IT主管Sally Lim”

Name2的一個示例是“ Sally Lim”

Name1 = Sheets("Work").Cells(RowName1, ColName1)
Name2 = Sheets("Roster").Cells(RowName2, ColName2)

'This condition doesn't work
If Name1 = "*" & Name2 & "*" Then
    'The "Name2" comes out with a compile error: Invalid Qualifier
    Name2.Font.Strikethrough
    Exit Do
Else
    End If

但是,它不起作用。 當我運行編碼時,沒有任何反應或彈出錯誤。 請幫忙

編輯編碼:

If ShiftName Like "*" & CashName & "*" Then
    CashName.Font.Strikethrough = True

我按照約翰·科爾曼的建議將聲明從“字符串”更改為“范圍”后,刪除線部分已經解決,並且不再顯示“編譯錯誤”。

我通過將Name1和Name2都更改為Sally進行了測試,然后將以下條件用於刪除線,它可以正常工作。 我認為是使條件無法使用的“ *”。

If ShiftName Like CashName Then
    CashName.Font.Strikethrough = True

如何通過相應地更改條件來進行部分匹配?

第二編輯:

我的錯! 我意識到我的Name1是大寫的。

除了@MacroMan有關使用Like的答案外,您還需要正確使用Strikethrough 這是一個布爾屬性,需要設置為True:

If Name1 Like "*" & Name2 Then
    Name2.Font.Strikethrough = True
    Exit Do
Else
    End If

在編輯時:

根據您提出的問題,您可以執行以下操作:

Dim Name1 As Range, Name2 As Range 'If you don't have this already declared

'then ... in the loop:

Set Name1 = Sheets("Work").Cells(RowName1, ColName1)
Set Name2 = Sheets("Roster").Cells(RowName2, ColName2)

If Name1.Value Like "*" & Name2.Value & "*" Then
    Name2.Font.Strikethrough = True
    Exit Do
Else
    End If

並非絕對必要在范圍變量上使用.ValueLike沒有,則使用Like的比較將按預期進行工作),但許多人認為,當使用范圍變量而不是依賴於變量時,它是一種很好的VBA編碼風格。范圍對象的默認屬性。

您也可以完全省去變量Name1Name2

If Sheets("Work").Cells(RowName1, ColName1).Value Like "*" & Sheets("Roster").Cells(RowName2, ColName2).Value & "*" Then
   Sheets("Roster").Cells(RowName2, ColName2).Font.Strikethrough = True
    Exit Do
Else
    End If

最后的話: Else緊接着End If毫無意義。 大概您的實際代碼在else子句中做了什么。 如果沒有-只是刪除東西完全和有End If后立即Exit Do

使用Like運算符:

If Name1 Like "*" & Name2 Then

您可以將Like用於特定的模式匹配,但也可以使用通配符*

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM