求教Excel 2007 VBA代码制写 (公式内A68均为A列最后一个不为空值的单元格)

1、在A列最后一个不为空值的单元格(如图A68)对应同一行D列单元格(如图中D68)输入公式“=D$3”,并往上填充至A列出现空值的单元格对应D列单元格(如图D62)停止。

2、在A列最后一个不为空值的单元格(如图A68)对应同一行E列单元格(如图中E68)输入公式“=VLOOKUP(A68,单价!B:G,6,FALSE)”,并往上填充至A列出现空值的单元格对应E列单元格(如图E62)停止。

3、在A列最后一个不为空值的单元格(如图A68)对应同一行F列单元格(如图中F68)输入公式“=VLOOKUP(A68,单价!B:H,7,FALSE)”,并往上填充至A列出现空值的单元格对应F列单元格(如图F62)停止。

4、在A列最后一个不为空值的单元格(如图A68)对应同一行H列单元格(如图中H68)输入公式“=SUMIF('月份 (10)'!F:F,A68,'月份 (10)'!J:J)”,并往上填充至A列出现空值的单元格对应H列单元格(如图H62)停止。

5、在A列最后一个不为空值的单元格(如图A68)对应同一行I列单元格(如图中I68)输入公式“=VLOOKUP(A68,'月份 (10)'!F:I,4,false)”,并往上填充至A列出现空值的单元格对应J列单元格(如图I62)停止。

6、在A列最后一个不为空值的单元格(如图A68)对应同一行J列单元格(如图中J68)输入公式“=VLOOKUP(A68,'月份 (10)'!F:K,6,FALSE)/1.17”,并往上填充至A列出现空值的单元格对应J列单元格
(如图J62)停止。

学习VBA代码的通用方法:(以你这个问题为例)
按你的要求录制一个宏然后进行修改:
代码前面增加一句代码:用变量记录已使用的最大行的行号,如 Ro=[a65536].end(xlup).row
用查找替换的方法把宏代码中所有"A68"改为 "A" & Ro,其他“D68”等也类似改。
这样的代码往往太长,你可以优化一下,如
ActiveWindow.SmallScroll Down:=57 这类直接删除。
Range("D68").Select
ActiveCell.FormulaR1C1 = "=R3C"
这两句就应改为 Range("D68").FormulaR1C1 = "=R3C"追问

请教“往上填充至A列出现空值单元格”代码如何输写?

追答

VBA的对象、属性、方法都很多,像我这样一点不懂英语的人根本记不了几个。常用的我用表格分类登记起来,用时查询。不常用的就临时录制宏,然后粘贴宏代码并修改。
你填充也录制宏吧,一看就清楚了,不会修改就把宏代码贴来我指点你

追问

Ro = [a65536].End(xlUp).Row
Range("D" & Ro).FormulaR1C1 = "=R3C"
Range("D71:D77").Select
Range("D77").Activate
Selection.FillUp
最后三句为填充宏代码,如何修改?

追答

从你的代码看A70是空值,所以填充至71就行了。所以这里也要用一个变量来确定,我就用Ro1吧。一行或列有连续的值可用两次end方法得到首尾单元格。确定了起止行号后将代码中71和77换了就行。修改后的代码如下:
Ro = [a65536].End(xlUp).Row
Ro1 = [a65536].End(xlUp).End(xlUp).Row
Range("D" & Ro).FormulaR1C1 = "=R3C"
Range("D" & Ro1 & ":D" & Ro).FillUp
在代码中操作单元格数据,不必选中或激活单元格,所以这类代码就可简化。我用一句代替你的后面三句,差别主要在代码运行后你原来的活动单元格和选中状态并没改变位置,而在表格录制宏时这些都有变化。仔细琢磨一下,明白以后就简单了。
对于End方法,具体确定的哪一个单元格,可在表格中试验,按住Ctrl后再按上下左右方向键就与代码括号中的四个参数得到的单元格一致。举现在这例来说,先选中A100(代替A65536),按住Ctrl后按一次向上键,选中A77,再按一次身上键就得到A71.

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-10-30
直接录制宏不就得了?追问

直接录制宏有局限性,缺乏录活性,它无法知道在什么位置输入并判断什么时候该停止,你要知道,并不所有的工作表都是在68行到62行的范围中执行。A列最后一个不为空值的单元格也不是特定是A68的。它会随数据的积累向下走动的。

相似回答
大家正在搜