Excel Vb检查值i工作表错误

时间:2016-01-30 08:22:12

标签: excel vba excel-vba

我尝试检查列中的值是否为" B"在sheet2中也列在" B" sheet1,如果有匹配,那么我想要一个" 1"在第5列中,如果不是" 0"

我有以下代码,但没有完成这项工作

Dim S1 As Worksheet
Dim S2 As Worksheet

Dim i As Integer
Dim k As Integer
Dim j As Integer

Set S1 = Worksheets("sheet1")
Set S2 = Worksheets("sheet2")

k = S1.UsedRange.Rows.Count
j = S2.UsedRange.Rows.Count



For i = 1 To k
If Application.WorksheetFunction.CountIf(S2.Range("B", j), S1.Range("B", k)) > 0 Then
    MsgBox "Found"
    S1.Cells(i, 5).Value = "1"
Else
    MsgBox "Not Found"
    S1.Cells(i, 5).Value = "0"
End If
Next i

3 个答案:

答案 0 :(得分:0)

Dim wk As Worksheet, ws As Worksheet
Dim i As Long, j As Long, m As Long
Dim strA As String, strB As String
Dim FRowA As Long, FRowB As Long

'Setting Worksheet Variables
Set wk = Sheet1
Set ws = Sheet2

m = wk.Rows.count
FRowA = wk.Range("B" & m).End(xlUp).Row     
FRowB = ws.Range("B" & m).End(xlUp).Row

For i = 1 To FRowB
    strB = Trim(ws.Range("B" & i).Text)
        For j = 1 To FRowA
                strA = Trim(wk.Range("B" & j).Text)
                    If strA = strB Then

                        wk.range("E"&j).Value = 1 

                    Else End If         
         Next j
Next i              

     For j = 1 To FRowA
     strA = Trim(wk.Range("E" & j).Text)
     If strA = "" Then

     wk.range("E"&j).Value = 0

     Else End If         
     Next j


End Sub

答案 1 :(得分:0)

您似乎对Range objectRange.Cells property的单元格引用语法感到困惑。语法更接近S2.Range("B" & j),而不是S2.Range("B", j);但这并不包括完整的专栏。您似乎也没有正确使用COUNTIF function。无论如何,工作表MATCH function更有效率。

For i = 1 To k
    If Not IsError(Application.Match(S1.Range("B"& i), S2.Range("B:B"), 0)) Then
        MsgBox "Found"
        S1.Cells(i, 5).Value = "1"
    Else
        MsgBox "Not Found"
        S1.Cells(i, 5).Value = "0"
    End If
Next 

我认为这应该更接近你的尝试。

答案 2 :(得分:0)

根据您的描述,您可能更适合直接使用公式,而不是VBA。

让我们从Sheet2开始吧。您在单元格B2中有一个值。 如果该值出现在Sheet1上的B列中的任何位置,则要在单元格E2中显示值1(同一行,第5列)。如果没有,您希望E2显示0.

由于您希望在单个单元格中显示计算结果,因此工作表公式可以满足您的需要。 MATCH函数将查找范围内的第一个匹配项,它比COUNTIF更接近您的目标。

如果MATCH返回任何数字,它会找到匹配项,因此我们可以使用ISNUMBER检查MATCH结果并返回TRUE / FALSE。最后,我们可以使用IF将其转换为自定义输出(在本例中为1或0)。

在单元格E2中,输入以下公式:

=IF(ISNUMBER(MATCH($B2,Sheet1!$B:$B,0)),1,0)

您可以根据需要将该公式复制或填充多行。您不需要在工作簿中启用宏来使用它,并且只要工作表执行,您的结果就会重新计算(因此您不需要手动运行宏)。

如果出于特定原因需要使用VBA,则看起来已经发布了其他答案。