gpt4 book ai didi

vba - 将行输出到另一个工作表

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

我有两组数据存储在两个不同的工作表中。我需要运行一个打印出 的分析。非重复 在工作表中找到行(即行存在于一个而不是另一个)并将它们打印在新的工作表中。

我可以很好地进行比较 - 范围和 For Next 相对简单方法。我目前将非重复项存储在两个不同的集合中,每个集合代表每张表中的非重复项。但是,我无法决定如何继续在新工作表上粘贴重复的行。

我曾考虑将整行存储到一个集合中,但在新工作表中从集合中打印出该行似乎并不简单:我必须确定集合的大小,设置适当的范围,然后遍历集合并打印他们出去。我还想截断这些数据,这会增加另一层复杂性。

我认为的另一种方法是简单地存储行号并使用 Range.Select.CopyPasteSpecial .这样做的好处是我可以截断任何我希望的内容,但这对我来说似乎非常棘手(主要是使用 VBA 来模拟用户输入),而且我不确定性能是否会受到影响。

有什么相对优点还是有更好的方法?

最佳答案

本周我在工作中一直在解决类似的问题。我想出了两种方法:

首先,您可以一次简单地遍历每个集合一行,并将值复制到新工作表:

Function PasteRows1(ByRef srcRows As Collection, ByRef dst As Worksheet)
Dim row As Range
Dim curRow As Integer

curRow = 1
For Each row In srcRows
dst.rows(curRow).Value = row.Value
curRow = curRow + 1
Next
End Function

这样做的好处是不使用 Range.Copy方法,因此保留了用户的剪贴板。如果不复制整行,则必须创建从行的第一个单元格开始的范围,然后使用 Range.Resize 调整其大小。 .所以 for里面的代码循环大致是:
Dim firstCellInRow as Range
Set firstCellInRow = dst.Cells(curRow,1)
firstCellInRow.Resize(1,Row.columns.Count).Value = row.Value
curRow = curRow + 1

我想到的第二种方法使用 Range.Copy .像这样:
Function PasteRows2(ByRef srcRows As Collection, ByRef dst As Worksheet)
Dim row As Range
Dim disjointRange As Range

For Each row In srcRows
If disjointRange is Nothing Then
Set disjointRange = row
Else
Set disjointRange = Union(disjointRange, row)
End If
Next
disjointRange.Copy
dst.Paste
End Function

虽然这确实使用了 .Copy方法它还允许您一次复制所有行,这很好,因为如果 excel 在您的宏中间崩溃,您将避免部分复制。

让我知道这些方法是否满足您的需求:)

关于vba - 将行输出到另一个工作表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31728534/

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