用公式填充每个单元格

Fill Each Cell With Formula

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

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

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

更新 N 列

这是我的完整语法,但每次我单步执行我的代码时,它都会点击 For 行并立即跳转到 End Function 我的工作 sheet 中有数据,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

这个怎么样?

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

这是我对需求的理解:

将公式应用于工作sheet ers 的第 N 列,验证第 A 列同一行中的值是否出现在第 A 的工作sheet rsca。 如果找到值,公式应 return Yes 否则 No

由于 objective 是 return 使用 excel 公式的预期结果,因此无需遍历所涉及的任何范围。

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

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

其中:

Target Range 位于 sheet ers at N2:Nr r 是最后一行数据在列 A)

#rSrc 表示 Source Range 位于 sheet rsca at A2:Ar 的地址(rA)

列中数据的最后一行

以下代码:

  • 使用常量来保存 excel 公式。
  • 获取每个作品数据的最后一行sheet。
  • 构建目标和源范围。
  • 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