我有6个不同的Excel表在一个工作表中具有类似的列名,我想在所有这些表中的一列中实现1个公式。我想根据“属性编号”列中的属性编号重复来填充序列号(在“序列”列中)。
下面是我想在Excel表格中复制的公式:
通式:=IF(AND(E2=E2),COUNTIFS($E$2:E2,E2),"")
如果我需要在Tables/Listobjects中复制相同的公式,看起来像这样:=IF(AND([@PropertyNumber]=[@PropertyNumber]), COUNTIFS([@PropertyNumber]:[@PropertyNumber],[@PropertyNumber]),"")
我无法使用绝对引用,但是,我想在VBA代码中复制相同的公式来填充结果,如下所示:
我曾试图复制公式在VBA与以下代码,它是抛出错误,“属性或方法不支持”
Populating the formulas for Sequence Columns in all the RealProperty Tables
Dim RealPropertySequenceCol As Integer
Dim RealPropertyPropertyNumRow1 As Integer
Dim RealPropertyPropertyNumRows As Integer
Dim RealPropertyPropertyCol As Integer
Dim ListObjectTables As ListObject
Dim TblCounts As Integer
For Each ListObjectTables In RealPropertySht.ListObjects
RealPropertyPropertyNumRows = 1
If ListObjectTables = "RealPropertyRentalPropertyTaxableMajorMaintenanceOrRepairExpensesSubTable" Then
RealPropertyPropertyNumRow1 = ListObjectTables.ListColumns("PropertyNumber").DataBodyRange.Rows(1)
TblCounts = ListObjectTables.DataBodyRange.Rows.Count
If ListObjectTables.ListColumns("PropertyNumber").DataBodyRange.Rows(1).Value = ListObjectTables.ListColumns("PropertyNumber").DataBodyRange.Rows(1).Value Then
ListObjectTables.ListColumns("Sequence").DataBodyRange.Rows(1).Value = Application.WorksheetFunction.CountIfs(ListObjectTables.ListRows(TblCounts) - (ListObjectTables.ListRows(TblCounts) - ListObjectTables.ListRows(RealPropertyPropertyNumRow1)), RealPropertyPropertyNumRow1, "")
End If
End If
Next ListObjectTables
请帮助我根据每个表中可用的属性编号动态填充序列号。提前感谢你的帮助。
2条答案
按热度按时间lokaqttq1#
使用公式(
Formula2
)或值填充Excel表公式(Microsoft 365)
其中
RealProperty
是表名,PropertyNumber
是要“sequenced”的列的标题。数值
p5cysglq2#
另一种可能性是创建一个“命名的”LAMBDA函数;然而,它确实使用了“volatile”函数,这可能会使重新计算陷入困境(根据@VBasic2008的评论)。不过,对于小数据集来说,这应该不是问题。
诀窍是为你的函数定义一个名称(例如,“ColumnSeq”),并将其定义设置为LAMBDA
=LAMBDA(...)
。然后,您可以在表中使用=ColumnSeq(...)
。LAMBDA将会是
当您在 entire 表列上调用
ColumnSeq
(省略“@”,例如,[PropertyNumber]而不是[@PropertyNumber])时,LAMBDA
中的COL
将表示整个表列。CELL("address",COL)
返回目标区域左上角单元格的地址,然后INDIRECT
将“锁定”序列的起始区域,而无需知道表名。Base
则是该列的左上角单元格。ROW()
返回列中每一行的行号,因此减去ROW(Base)
并加上1将得到表中每行的相对位置。然后,
Rng
使用OFFSET
从Base
开始,并包括Nbr
行,导致“列中的第一个Nbr
行”。INDEX
函数从列中返回行的值,因此COUNTIF
对列的“前Nbr
行”进行操作,仅计算与各行值匹配的行。或者列中每个值的序列。同样,所有这些都在名称定义(
CTRL + F3
)中。每个表中的函数可以是=ColumnSeq([ColName])
,其中“ColName”是要排序的列的名称。