gpt4 book ai didi

excel - 有条件地将不匹配的行追加到表格底部并使用 Excel 中的 VBA 处理空白

转载 作者:行者123 更新时间:2023-12-03 02:20:25 25 4
gpt4 key购买 nike

我正在尝试在 Excel 中创建一个 VBA 模块,该模块比较两列属性编号(主数据:A 列、sheet1,目标:A 列、sheet2)并返回主数据中的所有不匹配值(即存在于master,但不在目标中)到目标表的底部(即目标表末尾的第一个空白行)。到目前为止,我的一些东西运行得很好,但在测试时我发现了一些问题。

代码:

Sub MergeData()
Dim wsSource As Worksheet
Dim wsDest As Worksheet
Dim recRow As Long
Dim lastRow As Long
Dim fCell As Range
Dim i As Long

'Define our worksheets
Set wsSource = Worksheets("Sheet1")
Set wsDest = Worksheets("Sheet2")

Application.ScreenUpdating = False

recRow = 1

With wsSource
lastRow = .Cells(.Rows.Count, "A").End(xlUp).Row

For i = 2 To lastRow
'See if item is in Master sheet
Set fCell = wsDest.Range("A:A").Find(what:=.Cells(i, "A").Value, lookat:=xlWhole, MatchCase:=False)

If Not fCell Is Nothing Then
'Record is already in master sheet
recRow = fCell.Row
Else
'Need to move this to master sheet after last found record
.Cells(i, "A").Cells.Copy
wsDest.Cells(lastRow, "A").Cells.Insert
recRow = recRow
End If
Next i

我注意到的一个问题是,当目标表中有空白时,事情会变得有点不稳定(示例):

运行模块之前:

  M|D

1|1

2|

3|3

之后:

M|D

1|1

2|

3|2

|3

请注意,空白单元格仍然存在,并且返回结果的顺序发生了更改。我想要的结果是:

M|D

1|1

2|

3|3

|2

所需的结果保留了顺序以及空白(主数据中不应该存在,但我正在为最坏的情况做准备,因为我不是主表的 DBA)。在这种情况下无法获得所需的结果是有问题的,因为目标工作表需要是“静态的”(即保留行顺序)。目标表中 A 列旁边会有一些列,多个用户将在其中输入注释,并且如果目标表发生变化(除了在末尾添加行之外)或重新排序,注释将与其原始关联的属性编号分离。困惑随之而来,等等。

我对VBA很陌生,所以我似乎无法找出我的方法的错误(可能还有更多错误,但我在测试时还没有发现其他任何东西,所以指出它们将不胜感激) 。另外,如果此信息相关,则主列表是一个 SQL 连接的表,将定期刷新(因此该过程将是刷新主列表(动态,即行的顺序可以并且确实会更改),运行模块以将新的属性号返回到在目标表的底部,用户在 Excel 中添加注释并过滤目标表(静态,即行的顺序不会改变,除非所有列同时过滤或排序)。先谢谢大家。这个社区帮助我突破了很多障碍,希望这将是另一个成功的故事。

最佳答案

尝试使用更类似于:

dim i as long, dim lrs as long, lrd as long
with sheets(1)
lrs = .cells(.rows.count,1).end(xlup).row
for i = 2 to lrs 'assumes header in row 1
if application.iferror(application.match(.cells(i,1),sheets(2).columns(1),0),0)=0 then
lrd = sheets(2).cells(sheets(2).rows.count,1).end(xlup).row
sheets(2).cells(lrd+1,1).value = .cells(i,1).value
end if
next i
end with

这将允许您检查该值是否存在(使用匹配),如果不匹配,它将被添加到底部的该列表中,然后移至源数据的下一行。

关于excel - 有条件地将不匹配的行追加到表格底部并使用 Excel 中的 VBA 处理空白,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54026222/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com