【问题标题】:Copying Dynamic Cells/Rows Into New Sheet or Workbook将动态单元格/行复制到新工作表或工作簿中
【发布时间】:2013-08-17 02:09:41
【问题描述】:

我尝试在网站上搜索此问题的解决方案,但找不到完全匹配的内容。我正在尝试找出一个 VBA 代码来执行以下操作:

  1. 搜索指定列
  2. 找到所有匹配值(未指定)
  3. 复制所述匹配值的行
  4. 将它们放入新的工作表或工作簿(最好是工作簿)

这是我的问题。指定行中的值可以是 300 多个唯一值中的 1 个,因此在 VBA 代码中指定每个值将是一场噩梦。

我知道按字母顺序过滤指定的列会起作用,但是我如何告诉宏在每个组的末尾停止并将其复制到新工作表?基本上我会如何说“如果下一个值与当前值不匹配,则开始一本新书”? (即:向下搜索C列并复制所有包含“Bat”的行,然后复制到新书,然后向下搜索C列并复制所有包含“Car”的行,然后复制到新书)

任何帮助将不胜感激!

【问题讨论】:

  • 您可以将要查找的值放在不同的工作表上(如果愿意,可以将其隐藏),然后对于该列表中的每个值,在指定列上执行 Find 循环以收集所有匹配项并将它们复制到新工作表,然后在工作表上执行 .Move(将其移动到自己的工作簿,这将成为活动工作簿),然后保存并关闭活动工作簿并继续下一个值在您的列表中。
  • 我会试一试,然后回来。感谢您的建议!

标签: vba excel copy-paste worksheet-function


【解决方案1】:

假设您的数据是分组的,即不是这样的:

batman
batman
robin
robin
batman

而是:

batman
batman
batman
robin
robin

然后这将抓取所有连续的块并将它们推到自己的工作簿中。它还假设所有内容都在 A 列中,因此如果需要,请进行更改。

Sub grabber()
Dim thisWorkbook As Workbook
Set thisWorkbook = ActiveWorkbook
last = 1
For i = 1 To 18 'my sample had 18 rows, replace it with how many you have
If Range("A" & i) <> Range("A" & (i + 1)) Then
Range("A" & last & ":A" & i).Copy
Set NewBook = Workbooks.Add
NewBook.Sheets("Sheet1").Range("A1").PasteSpecial xlPasteValues
last = i + 1
thisWorkbook.Activate
End If
Next i
End Sub

【讨论】:

  • 完美!非常感谢您的帮助,我整晚都在琢磨这个问题!
  • 太棒了!如果它对您有用,您可以单击复选框将其标记为您的问题的已接受答案吗?
  • 完成,对不起,这个网站的新成员。
猜你喜欢
  • 2021-08-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-28
  • 1970-01-01
相关资源
最近更新 更多