Excel 2010 VBA:复制行,根据某列上的值动态选择它们
Posted
技术标签:
【中文标题】Excel 2010 VBA:复制行,根据某列上的值动态选择它们【英文标题】:Excel 2010 VBA: Copying rows, dynamically choosing them based on a value on a certain column 【发布时间】:2013-04-25 17:12:47 【问题描述】:使用 VBA for Excel 让我大开眼界。环顾四周寻找类似的问题,但找不到与此完全相同的任何东西。
很简单的问题。我有一些数据,想将一部分行复制到工作表中的另一个位置。我不认为它会让我发布图片,所以假设它看起来像这样:
Column A Column B Column C
product1 1 #VALUE!
product2 4 100
product3 22 25
product4 0 3
我要复制的行是 C 列为 5+ 的行。因此,在这种情况下,第 3 行和第 4 行。如果有帮助,总行数应该始终相同。
我可以在 VBA 中进行复制和粘贴,只是想知道选择这些行的最佳方法是什么。我尝试了一个以 x 为列号的 Do Loop,检查它是“>4”,但我无法让它工作。
非常感谢!
【问题讨论】:
您通常找不到您正在寻找的东西 :) 看看:***.com/q/12177125/212869 谢谢@NickSlash 我想你是对的。我会看看那个,看看我是否可以将它应用到我的设置中! 贴出你试过的代码?这将对其他人有所帮助,以便他们可以对其进行修改以更好地满足您的特定要求。 @DavidZemens 我认为 sous2817 让我走上了正轨。如果在弄乱了一段时间后我无法弄清楚,我会发布我正在尝试的内容并寻求更多帮助。希望我能从这里处理它。谢谢! 【参考方案1】:有很多方法可以解决这个问题。这是一个:
Sub Macro1()
Dim LR As Long
LR = ActiveSheet.UsedRange.Rows.Count
Range("A1:C1").Range("$A$1:$C$" & LR).AutoFilter Field:=3, Criteria1:=">4", _
Operator:=xlAnd
Range("A1:C" & LR).SpecialCells(xlCellTypeVisible).Copy Destination:=Range("L1")
Range("A1:C1").Range("$A$1:$C$" & LR).AutoFilter
End Sub
调整目的地范围以适应。
【讨论】:
谢谢@sous2817。这绝对让我走上正轨。我不想花时间进行微调(起始范围实际上是 A18:Q18,低于其他一些内容,因此您无法计算所有行并将其用作范围) ,所以我会弄乱它并以这种方式学习:)。再次感谢! 根据工作表的结构,有很多方法可以找到和定义预期范围。我只是给了你一种方法。尝试用谷歌搜索 VBA Excel Find Last Row 之类的内容,了解大约 642,000 种方法(当然,有些方法会比其他方法更有帮助)。 确实如此。方法很多,大部分我还不明白!我会继续寻找。 仅供参考,如果将来有人发现此问题,我使用了 For/If 语句(抱歉,格式草率,我认为我做对了,但我猜不是......):Dim r As Long, endRow As Long, pasteRowIndex As Long endRow = 200 pasteRowIndex = 16 For r = 18 To endRow If Cells(r, Columns("BK").Column).Value > 4 Then Rows(r).Select Selection.Cut Rows (pasteRowIndex).Select Selection.Insert Shift:=xlDown pasteRowIndex = pasteRowIndex + 1 End If Next r以上是关于Excel 2010 VBA:复制行,根据某列上的值动态选择它们的主要内容,如果未能解决你的问题,请参考以下文章
在 Excel 2016 中使用 VBA 将选定范围移动到一列上
Excel VBA根据条件从一个工作表复制到其他工作表特定单元格