在VBA

时间:2016-06-13 10:13:05

标签: arrays vba copy-paste

有没有更简单的方法,这样我就不必手动输入“1”和“M38 + n”等。

Range("M6").Select
ActiveCell.FormulaR1C1 = "1"
Range("M28").Select
Selection.Copy
Range("M38").Select
Selection.PasteSpecial Paste:=xlValues
Range("M35").Select
Selection.Copy
Range("N38").Select
Selection.PasteSpecial Paste:=xlValues
Range("M6").Select
ActiveCell.FormulaR1C1 = "2"
Range("M28").Select
Selection.Copy
Range("M39").Select
Selection.PasteSpecial Paste:=xlValues
Range("M35").Select
Selection.Copy
Range("N39").Select
Selection.PasteSpecial Paste:=xlValues

此外,对于以下内容可以采用类似的解决方案:

Range("M6").Select
ActiveCell.FormulaR1C1 = "1"
Range("U38").Select
ActiveCell.FormulaR1C1 = "=MAX(R[-12]C[-7]:R[-12]C[16])"
Range("U38").Select
Selection.Copy
Range("W38").Select
Selection.PasteSpecial Paste:=xlValues
Range("V38").Select
ActiveCell.FormulaR1C1 = "=MAX(R[-5]C[-8]:R[-5]C[15])"
Range("V38").Select
Selection.Copy
Range("X38").Select
Selection.PasteSpecial Paste:=xlValues
Range("M6").Select
ActiveCell.FormulaR1C1 = "2"
Range("U39").Select
ActiveCell.FormulaR1C1 = "=MAX(R[-13]C[-7]:R[-13]C[16])"
Range("U39").Select
Selection.Copy
Range("W39").Select
Selection.PasteSpecial Paste:=xlValues
Range("V39").Select
ActiveCell.FormulaR1C1 = "=MAX(R[-6]C[-8]:R[-6]C[15])"
Range("V39").Select
Selection.Copy
Range("X39").Select
Selection.PasteSpecial Paste:=xlValues

在这两种情况下,M6中的数字引用来自单独工作表的数组(使用索引函数),然后将结果作为值粘贴到表中。在第一个示例中,使用单个值,而在第二个示例中,使用最高值(Max函数)。当M6需要比较1到300的值时,它会变得很耗时。我想可以使用一个循环或类似的东西,但是没有线索从哪里开始。

非常感谢。

更新: 如下所述,请参阅有关代码的一些其他信息,以及如何编辑/缩放代码所需的时间。

对于第一组代码,在M6中输入数字“1”(或任何其他数字)在M28和M35中给出结果,然后在M38中复制并粘贴(作为值) N38分别。下一次迭代重复该过程,而是使用数字“2”(引用单独的数组)进行输入。再次从M28和M35获得这些值,然后将它们粘贴在紧接着前一组结果(即M39和N39)之下的行中。我必须找到能够一遍又一遍地重复该过程的方法,这样将任何数字输入M6将把M28和M35的结果值粘贴到相应的行中,即1> 1。 38,2> 39,3> 40等等。

对于第二组代码,需要类似的解决方案。这次,来自指定数组(使用相对“坐标”)的最大值(由M6中的更改产生)必须粘贴到相邻单元格中,即与上面的代码相同的行,但在另一个表格中向右移动。这里的主要区别是公式使用相对行和列来表示数组。

0 个答案:

没有答案