我在网上搜索并尝试了所有可能的解决方案,但是徒劳无功。
有审计员在特定领域查看特定客户。
我有三个包含数据的工作表:摘要表,原始数据表和区域表。数据从数据表传输到汇总表,但包含不属于特定审计员的区域。区域列表中有一个指示符是/否,必须用于清除不需要区域的摘要表。
因此,我需要先从两个工作表上的区域名称中删除不需要的区域,然后删除区域清单上标有“否”的区域。
我尝试过的核心编码:
If ActiveCell.Formula = "=VLookup(B2,Areas!C2:D,1,False)"=True _
And Sheets("Areas").Range("D2").Value = "No" Then
Sheets("Summary").EntireRow.Delete
其中B2是包含区域的摘要中的列,C2是区域中相应的列,D2是区域中的列,列出是/否的选择。
如何编写代码以删除摘要中的行,其中区域在“摘要”和“区域”表中匹配,“区域”表中的指示符为“否”?
我也尝试过:
For I = LastRowCheck To 1 Step -1
If Sheets("Summary").Range("B" & LastRowCheck).Value = _
Sheets("Areas").Range("C" & sdRow).Value _
And Sheets("Areas").Range("D" & NoRow).Value = "No" Then
If DelRange is Nothing Then
Set DelRange = Sheets("Summary").Rows(i)
End If
If not DelRange Is Nothing Then DelRange.EntireRow.Delete
End If
Next i
有人可以告诉我我在哪里错过了船吗?
答案 0 :(得分:0)
在我看来,区域表将会有...让我们说50个不同的区域,而汇总表将有许多行,每个行都有一个区域表区域。所以多行将具有相同的区域。因此,您希望遍历摘要表上的所有行,从区域表中找到相应的区域,并查看该区域在D列中是否具有“否”值。
鉴于上述理解,以下两个选项都应该起作用:
A)
遍历区域表上的所有行,并使用D
加载所有区域名称
列数值为“否”的数组。
循环摘要表
B)
使用循环查找区域表中D列值为“No”的所有行,并将每个区域中的名称加载到数组中。
使用所述数组作为数据过滤器的条件,过滤摘要表中的区域名称列
代码:
Dim strArray() as variant
ReDim strArray(1 to 1)
dim deleted as boolean 'keeps track of whether row was delete or not
Sheets("Area Sheet").Activate
Range ("A1").Activate 'where assuming column a has area name
for i = 1 to lastrow
if ActiveCell.offset(0, 3).formulaR1C1 = "No" then 'column D, I have had bad experience with .value so i always use formulaR1C1
strArray(i) = ActiveCell.formulaR1C1
end if
ActiveCell.offset(1,0).activate
next
Sheets("Summary Sheet").activate
Range("A1") ' again, assuing a has area name
for i = 1 to endrow
delete = false 'reset delete before inner loop
for j = 1 to ubound(strArray)
if ActiveCell.formulaR1C1 = strArray(i) then
ActiveCell.entireRow.delete xlShiftUp
deleted = true
exit for 'exits inner loop
else
deleted = false
end if
next
if not deleted then ActiveCell.offset(1,0).offset ' move down to next row if curent row was not deleted
next
B代码:
'use same as A code to get all areas with D Column "No" into array
Dim rng as Range
Range("A1").activate ' after activating summary sheet, again, assuming a has area name
ActiveCell.entireColumn.select
selection.AutoFilter Field:=1, Criteria1:=strArray, Operator:=xlFilterValues ' this will filter so only rows with area and column D of "No" will be visible.
set rng = Range("A1", Cells(lastrow, lastcolumn)).SpecialCells(xlCellTypeVisible) ' this will get all visible cells (ones that are visible with current filter condition)
rng.entirerow.delete xlshiftup 'will delete all rows in rng
取决于数据量,A)application.Screenupdating =false
可能比过滤器快(使用时看不到幕后发生的事情。)确保再次执行Application.screenupdating = true
之后再转回上。
代码可能需要调整拼写错误等。但基础应该在那里 因为每个人都有自己的方式获得最后一排,所以我没有设置endrow。
HTH 祝你好运!