excel - Excel 宏 - 重复宏代码但应用于不同的列
问题描述
我对 VBA 很陌生,想寻求一些建议。
我正在运行一个宏来将表编译成逐行事务列表。
但是,我不想为不同的月份列复制此代码 11 次。
如何执行循环,以便在所有 12 个月内自动执行任务?
下面的代码和表格转换按照附图。
谢谢!
'For Apr'20 - 'Copy name and category to clipboard
Sheets("Sheet2").Range("A3:C15").Copy
'Select last row of reference cell
lastRow = Sheets("Consolidated Cost Sheet_Working").Cells(Rows.Count, "A").End(xlUp).Row + 1
Range("A" & lastRow).Select
'Paste clipboard as values
ActiveCell.PasteSpecial xlPasteValues
'Copy period and drag down
Sheets("Sheet2").Range("D2").Copy
lastRow = Sheets("Consolidated Cost Sheet_Working").Cells(Rows.Count, "D").End(xlUp).Row + 1
Range("D" & lastRow).Select
ActiveCell.PasteSpecial xlPasteValues
Sheets("Consolidated Cost Sheet_Working").Range("C3").Select
Selection.End(xlDown).Select
ActiveCell.Offset(0, 1).Select
Range(Selection, Selection.End(xlUp)).Select
Application.CutCopyMode = False
Selection.FillDown
'Copy Financial Info to Sheet
Sheets("Sheet2").Range("D3:D15").Copy
lastRow = Sheets("Consolidated Cost Sheet_Working").Cells(Rows.Count, "E").End(xlUp).Row + 1
Range("E" & lastRow).Select
ActiveCell.PasteSpecial xlPasteValuesAndNumberFormats
解决方案
看起来您录制了一个宏,现在您想要概括该功能。我们很多人就是这样开始的。您录制的宏看起来像这样
Sub Macro1()
' Lots of code
End Sub
实现目标的最快方法是更改原始宏以将列作为参数传递。
Sub Macro1(Byval col as String)
' Lots of code
End Sub
然后用列 col 替换宏中“D”列的每个实例。例如:
Sheets("Sheet2").Range(col & "2").Copy
lastRow = Sheets("Consolidated Cost Sheet_Working").Cells(Rows.Count, col).End(xlUp).Row + 1
Range(col & lastRow).Select
ActiveCell.PasteSpecial xlPasteValues
然后你可以从另一个 sub 重复调用宏,每次传入不同的列。
Sub OtherSub()
Macro1 "D"
Macro1 "E"
Macro1 "F"
Macro1 "G"
End Sub
可以通过多种方式改进此代码(我特别建议您阅读一些如何避免选择的示例),但这应该可以帮助您入门。
推荐阅读
- c# - 如何在 .NET 中反序列化为本地集合?
- python - 如何在 Python 的列表中找到最小值或最大值
- discord.js - 如何检查反应成员 discord.js 的角色
- php - the_category function is not working properly; the categories are not showing where they are supposed to be
- .net - 为某些选项卡关闭 WPF TabControl ContentTemplate
- amazon-web-services - 如何在 cloudformation 中引用 AWS 托管策略 arn?
- scala - KafkaConsumer Position() vs Committed()
- google-sheets - 提取所有部分匹配项:聚合公式以在 GOOGLE SHEET 中复制
- javascript - 发出事件后清除 vue 输入字段
- ios - 图像上的快速矢量化逐像素操作