用公式填充每个单元格

时间:2017-03-28 17:27:03

标签: excel vba excel-vba excel-2013

我正在尝试编写一个宏
1)将变量searchstring中A列中每个单元格的值存储
I Think 的代码片段是

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

2)获取变量searchstring并确定它是否存在于名为rsca的工作表的A列中。
4)如果确实更新了列N,则为是
5)如果没有用

更新列N.

这是我的完整语法,但每当我单步执行我的代码时,它会点击For行并立即跳转到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

2 个答案:

答案 0 :(得分:2)

这是我对要求的理解:

将公式应用于工作表N的{​​{1}}列,验证工作表ers列中A列的同一行中的值是否存在A {1}}。 如果找到值,公式将返回rsca,否则返回Yes

由于目标是使用excel公式返回所需的结果,因此无需循环任何相关范围。

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

Target Range

其中:

=IF( ISERROR( MATCH( RC1, #rSrc, 0 ) ), ""No"", ""Yes"" )位于Target Range 的工作表ers中(N2:Nr是包含r列数据的最后一行)

A代表位于#rSrc 的工作表Source Range中的rsca的地址(A2:Ar是包含r列数据的最后一行1}})

以下代码:

  • 使用常量来保存excel公式。
  • 获取包含每个工作表数据的最后一行。
  • 构建目标和来源范围。
  • 使用A更新excel公式。
  • 并将excel公式应用于目标范围,保留结果值。

试试这段代码:

source range address

答案 1 :(得分:-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