|
1、要先了解cells和range的写法不同:
cells(x,y):x就是行坐标,y是列坐标,跟数学坐标是一致的,所以搭配循环很好用;
range("a5"):a是列,5是行,其实与cells是相反的。主要是range在引用字母列的时候不好直接判断,尤其是在涉及行和列的双循环中,比如第5列要判断为E列,这个就需要有点其他的技巧了。但cells就不需要,直接cells(x,5)或者cells(x,"e")都是可以的;
正因为如此,excel允许这两者结合使用。比如range("a5:h20")表示a5:h20这个区域,也可以写成range(cells(5,1),cells(20,8)),其中cells(5,1),是左上角的起始单元格坐标a5(第5行第1列),cells(20,8)是右下角的终点坐标h20(第20行第8列,太后面的列不好数,也可以用字母代替),它抛开了字母的限制,完全坐标化了,这在循环中搭配双循环参数就非常简单了。
不过range("a5")只表示一个单元格a5,应该是不能写成range(cells(5,1))的,由此可以看出,range通常适合引用一个坐标点固定另一个是变化的情况,比如range("a5:h" & [h65000].end(3).row),这里只有一个变量是H列的行数不知道,但左上角a5确是固定的才好这么写;
对于区域的扫描通常都是双循环,有行\列两个参数,完美搭配了cells(x,y),在help也是推荐cells写法的;
2、回到你的问题,对单元格,因为有行参数 i ,所以当前单元格的写法是:cells(i,7),所有ells(f,7)肯定是不对的,但我认为
Cells(i, "g") = Cells(i, "d") / Cells(i, "C")
应该是正确的。你这句之所以不能通过,实测是因为除数cells(i,"c")是零值,错误提示“溢出”,所以还要排除零值的情况:
if cells(i,"c")<>0 then
Cells(i, "g") = Cells(i, "d") / Cells(i, "C")
endif
|
|