我尝试检查列中的值是否为" 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
答案 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 object和Range.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,则看起来已经发布了其他答案。