您的位置:程序门 -> vb -> vba



vba修改excel单元格值的问题?


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


vba修改excel单元格值的问题?[已结贴,结贴人:jlbb102]
发表于:2007-08-21 07:04:32 楼主
比如有一c列数值a1,a2,a3....,需将大于2.00%的所有表格的值a修改为小于2.00%,(b列数值为b1,b2,b3.....;a列为total1,total1,total2....):

a,b为百分数,total为整数,d列是真正要修改的数值!
if   2.00% <x <=3.00%     then     [1-(a1-2.00%)-b1]*total1=d1数值
if   3.00% <x <=4.00%     then     [1-(a2-3.00%)-b2]*total2=d2数值
if   4.00% <x <=5.00%     then     [1-(a3-4.00%)-b3]*total3=d3数值
.......
if   others   x> 10%   then   [1-(a-10%)-b@]*total@=d@数值

由于涉及列单元格太多,我不知如何给某一列单元格设置变量,赋值,然后带入公式计算,把一小数赋给单元格等等,所以自己写的晕晕乎乎,没办法实行我要的功能,在这恳请各位高手指点一二?谢谢(给源码者我给追加分)
发表于:2007-08-21 08:45:571楼 得分:0
写个宏处理下
发表于:2007-08-21 09:12:042楼 得分:100
sub   calc()
    dim   startrow   as   integer,   endrow   as   integer
    dim   calcrow   as   integer,   a   as   string,   b   as   string,   c   as   string,   at   as   single
    startrow   =   1   '这里自己修改要计算的范围
    endrow   =   100   '
    calcrow   =   startrow
    with   sheet1
    do
        a   =   .cells(calcrow,   3)
        b   =   .cells(calcrow,   2)
        c   =   .cells(calcrow,   1)
        if   isnumeric(a)   and   isnumeric(b)   and   isnumeric(c)   then
            at   =   int(a   *   10000)   -   1
            if   at   >   1000   then   at   =   1000
            at   =   at   /   10000
            .cells(calcrow,   4)   =   (1   -   (a   -   at)   -   b)   *   c
        end   if
        calcrow   =   calcrow   +   1
    loop   until   calcrow   >   endrow
    end   with
end   sub
发表于:2007-08-21 09:15:503楼 得分:0
漏了1句  
sub   calc()
    dim   startrow   as   integer,   endrow   as   integer
    dim   calcrow   as   integer,   a   as   string,   b   as   string,   c   as   string,   at   as   single
    startrow   =   1
    endrow   =   100
    calcrow   =   1
    with   sheet1
    do
        a   =   .cells(calcrow,   3)
        b   =   .cells(calcrow,   2)
        c   =   .cells(calcrow,   1)
        if   isnumeric(a)   and   isnumeric(b)   and   isnumeric(c)   then
            at   =   int(a   *   10000)   -   1
            at   =   at   -   (at   mod   100)   '上面漏掉这句
            if   at   >   1000   then   at   =   1000
            at   =   at   /   10000
            .cells(calcrow,   4)   =   (1   -   (a   -   at)   -   b)   *   c
        end   if
        calcrow   =   calcrow   +   1
    loop   until   calcrow   >   endrow
    end   with
end   sub
发表于:2007-08-21 09:56:164楼 得分:0
谢谢楼上,我会尝试多种方法解决.以下是我自己写的句字:
private   sub   worksheet_activate()
'dim   x
'dim   y   as   integer
'y   =   range( "f4 ").value
'range( "a1:k35 ").select
'msgbox   range( "h4 ").value
if   range( "h4 ").value   >   0.01   and   range( "h4 ").value   <   0.02   then
          x   =   range( "h4 ").value   -   0.01
          range( "c4 ").value   =   int((1   -   range(h4).value   -   range( "g4 ").value)   *   range( "b4 ").value)
          msgbox   range( "c4 ").value
elseif   range( "h4 ").value   >   0.02   and   range( "h4 ").value   <   0.03   then
          x   =   range( "h4 ").value   -   0.02
          range( "c4 ").value   =   int((1   -   range(h4).value   -   range( "g4 ").value)   *   range( "b4 ").value)
          msgbox   range( "c4 ").value
         
    elseif   range( "h4 ").value   >   0.03   and   range( "h4 ").value   <   0.04   then
          x   =   range( "h4 ").value   -   0.03
          range( "c4 ").value   =   int((1   -   range(h4).value   -   range( "g4 ").value)   *   range( "b4 ").value)
          msgbox   range( "c4 ").value
........
........
end   if
end   sub
我用上面的语句执行怎么单元格没有反应?不知为何
发表于:2007-08-21 10:48:415楼 得分:0
楼上的这句
at   =   int(a   *   10000)   -   1

看不懂啊?为什么要除以10000?
发表于:2007-08-21 22:38:296楼 得分:0
楼上老大:
你给写的程序运行提示:类型不匹配,是什么变量定义错了吗?
咋回事?我找不出来啊   !
发表于:2007-08-21 22:59:187楼 得分:0
帮顶!
发表于:2007-08-21 23:02:518楼 得分:0
total first   pass   first   fail     true   fail   first   pass   rate     fail   rate ndf   rate
6605 6479       126           40         98.09%           0.61%                   1.30%
        #div/0!           #div/0!       #div/0!
4172 4043       129           25         96.91%           0.60%                   2.49%
1503 1377       126           22         91.62%           1.46%                 6.92%
3669 3448       221           22         93.98%               0.60%                   5.42%
2935 2820       115           16         96.08%           0.55%                   3.37%

first   pass   rate=6479/6605
fail   rate=40/6605
ndf   rate=1-first   pass   rate-fail   rate
以上是原始数据,我想控制ndf   rate比例在2.00%以下,通过修改first   pass数值来降低ndf   rate应该如何做?
发表于:2007-08-22 01:31:459楼 得分:0
对于每个要运算的单元要进行   isnumeric   判断是否数字   你套用的时候没有作相应判断
发表于:2007-08-22 05:49:3310楼 得分:0
单步执行到这一句时:
if   isnumeric(a)   and   isnumeric(b)   and   isnumeric(c)   then
提示“类型不匹配”,不知何故,感觉变量a,b,c定义不准确,换了其它类型也不可以啊,有哪位大侠能告知一下吗?
发表于:2007-08-22 06:38:4811楼 得分:0
非常感谢ayalicer(小刀惋心)   ,我知道错在什么地方了,错在对单元格“#div/0!”的处理方面,暂时还不知道怎么解决这个问题,我再研究下!
发表于:2007-08-23 01:22:3912楼 得分:0
再次感谢ayalicer(小刀惋心),问题解决,结贴!!!!!!!!!!!!!!!!


快速检索

最新资讯
热门点击