用公式填充每个单元格
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
的地址(r
是A
)
列中数据的最后一行
以下代码:
- 使用常量来保存 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
我正在尝试编写一个宏
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
这是我的完整语法,但每次我单步执行我的代码时,它都会点击 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
的地址(r
是A
)
以下代码:
- 使用常量来保存 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