【发布时间】:2014-11-26 13:57:02
【问题描述】:
我一直在寻找答案,但找不到如此具体的答案。
我正在尝试编写对没有任何编程知识的人来说易于使用的宏。
因此,我们使用定价模板,您可以在其中查看许多不同国家/地区的价格。我想创建一个宏,它将复制整个选项卡并删除不需要的列,这取决于它创建文件的国家/地区。 (需要保留公式,我仍然想要所有的计算而不是值)。
因此,前几列将保留,因为它们对所有国家/地区都是通用的,然后应删除除选定范围之外的所有列。范围在单独的选项卡中指定,并将存储在数组中。
示例: 比利时 第一栏:CJ 最后一栏:CQ
假设在第一个循环中存储了第一列和最后一列的值,我希望宏删除从 H 到 CI 的列,然后从 CR 到 HF。
但是,在下一个循环中,first 和 last 会发生变化,因此必须重新计算删除范围。
我尝试使用公式 ASC 和 CHR,但它不适用于两个字母代码。
【问题讨论】:
-
每列是否有唯一的标题?
-
几乎...是的,有唯一的标题,但在第三行
-
如果可以使用唯一标题来标识您想要保留的列,您可以简单地遍历从 H 到数据末尾的列,并删除不符合模式的列。
-
如果你要循环,你最好从头开始工作并向前移动,否则你的所有列都会在每次删除时向前移动。
-
向后迭代(例如,
For LoopControl = 214 To 1 Step -1: If LoopControl >96 Or (LoopControl <= {Last column in next block to be deleted} And LoopControl > {First column in that same block}) Or ... Then ActiveSheet.Columns(LoopControl).Delete: Next LoopControl)。如果需要速度,再次从最后一组列开始,ActiveSheet.Columns(96).Resize(, 118).Delete等。