我厌倦了
如果col C中的单元格与col A中的单元格匹配,那么在该行中,col N = 1中的单元格col N = 0中的所有其他单元格
在我的Sub中,我继续在所有单元格中获得#N / A
由于
Sub Match()
Dim LastRow As Long
Dim ws As Worksheet
Set ws = Sheets("Source")
LastRow = ws.Range("A" & ws.Rows.count).End(xlUp).Row
ws.Range("N2:N" & LastRow).Formula = "=IF(INDEX('Source'!A:A,MATCH($A2,'Source'!$C:$C,0))<> "" "",1,0)"
Range("N2:N" & LastRow).Copy
Range("N2:N" & LastRow).PasteSpecial xlPasteValues
Range("N1").Select
ActiveCell.FormulaR1C1 = "Grouping"
End Sub
答案 0 :(得分:1)
我会采取不同的方法。根据我的经验,使用VBA循环遍历单元格比尝试使用MATCH
函数更快。它不必以这种方式计算任何东西。
(我也喜欢命名我的范围,因为通过VBA查找最后一行并不总是可靠的。所以我可能首先命名我的A范围,然后参考该范围。或者我和#39; d抛出一个输入框,让用户动态选择范围。但我会使用你拥有的模型。)
Sub Match()
Dim LastRow As Long
Dim ws As Worksheet
Dim matchRange As Range
Dim testRange As Range
Dim foundIt As Range
Set ws = Sheets("Source")
LastRow = ws.Range("A" & ws.Rows.count).End(xlUp).Row
Set matchRange = ws.Range("A2:A" & LastRow)
Set testRange = ws.Range("N2:N" & LastRow)
For Each c In testRange.Cells
Set foundIt = matchRange.Find(What:=c.Value, _
LookIn:=xlValues, _
LookAt:=xlWhole, _
SearchOrder:=xlByRows, _
SearchDirection:=xlNext, _
MatchCase:=False)
If Not foundIt Is Nothing Then
c.Value2=1
End If
Next c
Range("N1").Select
ActiveCell.FormulaR1C1 = "Grouping"
End Sub
答案 1 :(得分:1)
试试这个:
Sub MyMatch()
Dim LastRow As Long
Dim ws As Worksheet
Set ws = Sheets("Source")
With ws
LastRow = ws.Range("A" & .Rows.Count).End(xlUp).Row
With .Range("N2:N" & LastRow)
.Formula = "=1*ISNUMBER(MATCH($A2,'Source'!$C:$C,0))"
.Value = .Value
End With
.Range("N1").FormulaR1C1 = "Grouping"
End With
End Sub
注意:
ISNUMBER(MATCH(..))
找不到任何内容,则False
会返回Match
(因为这种情况Match
会返回#N/A
并且它不是数字),{ {1}}否则。部分True
会将=1*ISNUMBER(..)
/ True
转换为False
/ 1
。0
更改为Copy/PasteSpecial
- 速度更快.Value = .Value
)