2017-03-28 62 views
-1

我试图写一个宏,将
1)存储在一个代码可变searchstring
件A列中的每个小区的值,该值我想这是否是填充每个细胞与式

lr = Cells(Rows.Count, 2).End(xlUp).Row 
    For i = 2 To lr 
     searchstring = ws.Cells(i, 1).Value 

2)取变量searchstring并确定它是否存在于名为rsca的工作表的A列中。
4)如果它以是
5)更新N列。如果它不与任何

更新N列这是我的完整的语法,但每次我通过我的代码步骤它击中了对于线立即跳转到End Function我的工作表中有数据,列A大约有40行要精确(但是这可能会波动上下,所以我不想硬编码一个结束单元格)

该句法应如何更改它会在上面达到我想要的结果?

Public Function CheckIfCurrent() 
    Dim ws As Worksheet, searchstring As String, i As Long 
    Set ws = Sheets("ers") 

    lr = Cells(Rows.Count, 2).End(xlUp).Row 
    For i = 2 To lr 
     searchstring = ws.Cells(i, 1).Value 
     With .Range("N2:N" & .Cells(.Rows.Count, "A").End(xlUp).Row) 
     .Formula = IIf(IsError(Application.Match(searchstring, Sheets("rsca").Columns(1), 0)), "No", "Yes") 
     .Value = .Value 
     End With 
    Next i   
End Function 
+0

你'lr'不是完全限定的,其修改为'LR = ws.Cells(ws.Rows.Count,2).END(xlUp).Row ',或者在之前添加'With ws'并且在 –

+0

和'ws.Rows.Count'之前添加'.',工作表'With .Range(“N2:N”&.Cells(.Rows.Count,“A”) .End(xlUp).Row)'属于? –

+0

我修改了你的lr行,并得到了相同的结果。行数应该属于表格(“ers”) – BellHopByDayAmetuerCoderByNigh

回答

-1

这个怎么样?

Public Sub CheckIfCurrent() 
    Dim searchstring As String 
    Dim i As Long 

    With ThisWorkbook.Worksheets("ers") 
     lr = .Cells(.Rows.Count, 1).End(xlUp).Row 
     For i = 2 To lr 
      searchstring = .Cells(i, 1).Value 
      With .Range("N2:N" & lr) 
       .Formula = IIf(IsError(Application.Match(searchstring, Sheets("rsca").Columns(1), 0)), "No", "Yes") 
       .Value = .Value 
      End With 
     Next i 
    End With 
End Sub 
+0

同样的结果。它击中了行并立即停止。没有进一步处理。 – BellHopByDayAmetuerCoderByNigh

+0

@BellHopByDayAmetuerCoderByNigh,B列是什么? – CallumDA

+0

ers上的B列为空白,rsca上的列B有十进制值 – BellHopByDayAmetuerCoderByNigh

2

这是我的要求的理解:

套用公式,以表ersN列中,验证如果同一行A列中的值出现在工作表rscaA列。 如果找到该值,则公式将返回Yes,否则返回No

由于目标是使用Excel公式返回期望的结果,因此不需要循环任何涉及的范围。

此解决方案适用于Target Range以下公式:

=IF(ISERROR(MATCH(RC1, #rSrc, 0)), ""No"", ""Yes"")

其中:

Target Range位于片ersN2:Nrr在最后一行与A列数据)

#rSrc表示位于片rscaA2:ArSource Range的地址(r在最后一行与A列数据)

以下代码:

  • 采用恒定保持Excel公式。
  • 获取每个工作表中数据的最后一行。
  • 构建目标和源范围。
  • source range address更新excel公式。
  • 并将excel公式应用于目标范围,并留下结果值。

试试这个代码:

Public Sub CheckIfCurrent_Published() 
Const kFml As String = "=IF(ISERROR(MATCH(RC1, #rSrc, 0)), ""No"", ""Yes"")" 
Dim rTrg As Range, rSrc As Range 
Dim sFml As String 

    Rem Set Target Range (Sheet `ers`) 
    With ThisWorkbook.Worksheets("ers") 
     Set rTrg = .Range("N2:N" & .Cells(.Rows.Count, 1).End(xlUp).Row) 
    End With 

    Rem Set Target Range (Sheet `rsca`) 
    With ThisWorkbook.Worksheets("rsca") 
     Set rSrc = .Range("A1:A" & .Cells(.Rows.Count, 1).End(xlUp).Row) 
    End With 

    Rem Reset Formula 
    sFml = kFml 
    sFml = Replace(sFml, "#rSrc", rSrc.Address(ReferenceStyle:=xlR1C1, External:=1)) 

    Rem Apply Formula 
    With rTrg 
     .FormulaR1C1 = sFml 
     .Value = .Value2 
    End With 

    End Sub 
+0

Rem代码行/是什么意思? – BellHopByDayAmetuerCoderByNigh

+1

请参阅[Rem声明](https://msdn.microsoft.com/en-us/library/office/gg278825(v = office.15).aspx)或者只需在VBA编辑器中选择该单词并按[F1] – EEM

+0

这真的应该是被接受的答案。 – user2676140