VBA:在行中搜索多个可能的值,然后复制范围

时间:2014-07-29 10:22:44

标签: excel vba excel-vba copy find

我是VBA的新手,非常感谢你的帮助。我有一个庞大的动态数据库(公司及其季度评级),每个季度都有更新。该数据库包含大约70列(评级和其他信息)和超过3000行(公司)。列顺序和行可能会发生变化,因为我对源文件没有任何影响。我的目标是不仅复制和粘贴公司的名称(根据标题"公司"),而且还包括所有过去的评级 AND 新评级,这将始终是在最新评级与其他专栏之间的新栏目中(包含我不需要的信息)。

请参阅我的示例(随机数字): https://www.dropbox.com/s/98n8ty5mrt7etwd/Screenshot2.PNG

你可以看到

  • 公司名称(带蓝色标题)
  • 过去的评分(绿色)以及新评级的位置和
  • 不需要的其他信息(橙色)

为了不必每季度手动调整宏我希望有一个宏来搜索任何标题(格式为例如" Q1-07和#34;),表示季度和年份(& #34; Q1"," Q2"," Q3"或" Q4")然后将这些评级复制到另一个工作表(包括公司名称)

我知道如何搜索具有特定名称的标题(例如"公司"标题),但我不知道如何集成可能需要多个的Find函数价值(四分之三)考虑在内。

到目前为止,我的手动解决方案就是这样,但正如我所说,我更喜欢一种更舒适的解决方案,可以自动识别新的季度:

Worksheets("UpdatedQuarterlyInput").Activate
Range("A1").Select
Worksheets("UpdatedQuarterlyInput").rows("1:1").Find(What:="Q1 - 07", _ 
After:=ActiveCell, LookIn:=xlFormulas, LookAt:=xlWhole, SearchOrder:=xlByRows, _
SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False).Activate
Set Rng = ActiveCell.Range(Cells(2, 1), Cells(LastRow_UpdatedQuarterlyInput, 1))
Rng.Select
Selection.Copy
Worksheets("Output").Activate
Worksheets("Output").Range("A2").PasteSpecial Paste:=xlPasteValues

非常感谢!!

菲利克斯

1 个答案:

答案 0 :(得分:0)

我不确定我是否完全理解你的问题 - 希望我对这个想法并没有走错路。

快速而肮脏的解决方案是使用“数据”选项卡上的“数据验证”在目标工作表的某处创建一个下拉菜单,该选项卡由源文档中的所有季度标题填充(Data - > {{ 1}} - >从Data Validation字段中选择List,然后为Allow字段选择源文档Quarter标头。让公式一列超过最后一个Quarter列,这样当你在中间添加一列时它会自动展开。

然后添加一个按钮,按照上面的说明执行Formula,但使用下拉菜单中的内容填充Sub方法的What:参数。现在,您只需从下拉菜单中选择所需的季度(如果您正确创建了Find,它就已存在)并单击您的按钮。完成。