EXCEL代码帮忙改成VBA命令,点击按钮自动遍历G列,循环判断省份后执行相应代码。感谢大神费时指导!

EXCEL代码帮忙改成VBA命令,点击按钮自动遍历G列,循环判断省份后执行代码结果复制到J列,判断JFK。EXCEL这段函数代码帮忙改成VBA宏命令,设置一个按钮,点击按钮自动遍历G列,循环判断省份后,执行相应的代码并将结果复制到J列。并判断J列的结果与F列是否相同,相同输出0,不同输出“错误”。=IF(OR($G2="广东省",$G2="上海",$G2="浙江省",$G2="江苏省",$G2="安徽省"),IF($E2<=1.1,3.6,IF($E2<=2.1,4.6,IF($E2<=3.1,6,4.5+1.4*(ROUNDUP($E2,0)-1)))),IF($G2="福建省",IF($E2<=1.1,3.6,IF($E2<=2.1,4.6,IF($E2<=3.1,6,4+0.6*(ROUNDUP($E2,0)-1)))),IF($G2="江西省",IF($E2<=1.1,3.6,IF($E2<=2.1,4.6,IF($E2<=3.1,6,5+2*(ROUNDUP($E2,0)-1)))),IF(OR($G2="湖南省",$G2="湖北省"),IF($E2<=1.1,3.6,IF($E2<=2.1,4.6,IF($E2<=3.1,6,5+2.5*(ROUNDUP($E2,0)-1)))),IF($G2="北京",IF($E2<=1.1,3.6,IF($E2<=2.1,4.6,IF($E2<=3.1,6,7+3.8*(ROUNDUP($E2,0)-1)))),IF($G2="天津",IF($E2<=1.1,3.6,IF($E2<=2.1,4.6,IF($E2<=3.1,6,5+3.8*(ROUNDUP($E2,0)-1)))),IF($G2="广西壮族自治区",IF($E2<=1.1,3.6,IF($E2<=2.1,4.6,IF($E2<=3.1,6,5+3.3*(ROUNDUP($E2,0)-1)))),IF(OR($G2="山东省",$G2="河南省",$G2="河北省"),IF($E2<=1.1,3.6,IF($E2<=2.1,4.6,IF($E2<=3.1,6,5+3.5*(ROUNDUP($E2,0)-1)))),IF(OR($G2="山西省",$G2="四川省",$G2="重庆",$G2="贵州省"),IF($E2<=1.1,3.6,IF($E2<=2.1,4.6,IF($E2<=3.1,6,6+4.7*(ROUNDUP($E2,0)-1)))),IF(OR($G2="陕西省",$G2="云南省",$G2="海南省"),IF($E2<=1.1,3.6,IF($E2<=2.1,4.6,IF($E2<=3.1,6,6+4.5*(ROUNDUP($E2,0)-1)))),IF(OR($G2="吉林省",$G2="辽宁省",$G2="黑龙江省"),IF($E2<=1.1,4,IF($E2<=2.1,6,IF($E2<=3.1,8,7+5*(ROUNDUP($E2,0)-1)))),IF(OR($G2="内蒙古自治区",$G2="甘肃省",$G2="宁夏回族自治区",$G2="青海省"),IF($E2<=1,10,10+8*(ROUNDUP($E2,0)-1)),IF($G2="新疆自治区",IF($E2<=1,15,15+13*(ROUNDUP($E60,0)-1)),IF($G2="西藏自治区",IF($E2<=1,18,18+15*(ROUNDUP($E60,0)-1)),"省份错误"))))))))))))))

第1个回答  2021-02-04
重量的分割点都一样的吧,把省份和重量分割点分别为横向和纵向列成表格,以方便编程。
第2个回答  2021-02-04

你自己根据代码修改一下吧

追问

能发个代码吗?看不清

追答

怎么发,发哪里,什么时候发,用什么发

第3个回答  2021-02-04

写的真够长的 ,这个简单的计算快递费 不需要用到VBA ,这是杀鸡用牛刀

一般只要有个清单 , 就可以用公式计算,我曾经写过好多

第4个回答  2021-02-04

对于本帖的需求,建议使用公式解决,只是目前的公式过于复杂,维护修改很难,逻辑不清晰,下面对公式进行简化,简化后的公式为:

=SUMPRODUCT((M$2:M$1000=G2)*(N$2:N$1000<=E2)*(O$2:O$1000>=E2)*(P$2:P$1000))

+SUMPRODUCT((M$2:M$1000=G2)*(N$2:N$1000<=E2)*(O$2:O$1000>=E2)*(Q$2:Q$1000))*ROUNDUP(E2-1,0)

其中M:Q区域是运费参数表,可以建立在别的表格里面,效果如下图:

如果为了练习VBA,那么也建议在参数表的基础上编写,代码示例如下:

sub 宏1()

    dim arr, std,i,j

    arr=activesheet.usedrange '需要计算的表格

    std=range("m1").currentregion '标准参数区域,如果在别的位置需要适当修改

    for i=1 to ubound(arr) '计算每一行

        if arr(i,5)<>""" and arr(i,7)<>"" then'只处理E、G列不为空的

            if vartype(arr(i,5))=vbdouble then '只处理E列为数值的

                for j=2 to ubound(std)

                    if std(j,1)=arr(i,7) then

                        if std(j,2)<=arr(i,5) and std(j,3)>=arr(i,5) then

                            cells(i,6) = std(j,4) + std(j,5) * Application.WorksheetFunction.RoundUp(arr(i,5)-1,0)

                            exit for

                        end if

                    end if

                next j

            end if

        end if

    next i

end sub

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网