Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
12
返回列表 发新帖
楼主: zcjng1314

求公式

[复制链接]
发表于 2019-12-16 16:03 | 显示全部楼层
zcjng1314 发表于 2019-12-13 12:48
感谢抽时间帮助解决,但是我想要的新算式是,比如:1+2+3得出1.2+2.4+3.6。再次感谢

我给你写了一段代码,你可能要仔细看才能搞的懂。主要是的公式太复杂,我不了解你公式的全貌,只能写一个大概:
先上代码:

gs = "*1.2"
Dim arr(1 To 6)
arr(1) = "+"
arr(2) = "-"
arr(3) = "*"
arr(4) = "[↓]"
arr(5) = "[↑]"
arr(6) = ")"

Application.ScreenUpdating = False
For i = 7 To 640
    s = Cells(i, 14)
    s1 = ""
    wz = 0
    Do While Len(s) > 0
       js = 0
       For k = 1 To UBound(arr)
           js1 = InStr(s, arr(k))
           If js1 > 0 Then
              If js = 0 Then
                 wz = Len(arr(k))
                 js = js1
              Else
                 If js1 < js Then
                    wz = Len(arr(k))
                    js = js1
                 End If
              End If
           End If
       Next k
       If js = 1 Then
          s1 = s1 & Mid(s, 1, wz)
          s = Mid(s, wz + 1, 1000)
       Else
          If js = 0 Then
             s1 = s1 & s & gs
             s = ""
          Else
             s1 = s1 & Mid(s, 1, js - 1) & gs
             s = Mid(s, js, 1000)
          End If
       End If
    Loop
    Cells(i, 15) = s1
Next i
Application.ScreenUpdating = True


解释:
1、几个重要的参数:
    gs:就是你要定义的公式,不是表格中的公式,是指“*1.2”。这是为了方便你替换,说不定哪天你要把公式改成*1.5呢;
          是字符,目前是*1.2,你可以随便修改;
    arr数组:是定义所有可能的标识符(运算符),这个是分隔公式的标志,不然代码也不知道如何判断插入*1.2;
          标识符需要完整,不完整的就会有遗漏。我根据你公式先定义了如下标识符:
          Dim arr(1 To 6)   '标识符的数量,目前定义了下面的6个。如增减标识符数量,数组定义也要跟随变化;
          arr(1) = "+"
          arr(2) = "-"
          arr(3) = "*"
          arr(4) = "[↓]"      '公式大量存在次标识,会分隔两组数字,我猜测每个数组都要分别*1.2,所以也把它看成是标识符了;
          arr(5) = "[↑]"
          arr(6) = ")"

2、先看几个例子:
     第387行:1.8[↓]+1+2.9+2.8+3.2+3.7+3.2+3+4.3+5.2+4+0.3[↑]*21
     替换结果:1.8*1.2[↓]+1*1.2+2.9*1.2+2.8*1.2+3.2*1.2+3.7*1.2+3.2*1.2+3*1.2+4.3*1.2+5.2*1.2+4*1.2+0.3*1.2[↑]*21*1.2
        每一组数字,不论是+-*符号还是[↓][↑]都会被分隔插入1.2,这些都是标识符定义数组的分隔标志;

     第383行:6*2[D'户型与D对称]
     替换结果:6*1.2*2[D'户型与D对称]*1.2
       *是定义了的,但 [D'户型与D对称] 没有定义,所以代码会把 2[D'户型与D对称] 看成是一个整体,在后面加 *1.2;

     最后看一个比较复杂的来验证:
     第201行:2.2[↑]+4.5+15.5+25.8+2.6+5.2+9+(2.3+2.7[↓])*4
     替换结果:2.2*1.2[↑]+4.5*1.2+15.5*1.2+25.8*1.2+2.6*1.2+5.2*1.2+9*1.2+(2.3*1.2+2.7*1.2[↓])*4*1.2
       你仔细对比下,我不知道是否领会了你的本意,看起来是那个意思。

3、关键是要全面定义标识符,才能准确识别分隔插入。你所说的1+2+3,这个例子过于简单,我不清楚 * 算不算?如果不算标识符,你自行删掉并适当修改数组定义;





评分

参与人数 1学分 +1 收起 理由
zcjng1314 + 1 学习

查看全部评分

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
回复

使用道具 举报

 楼主| 发表于 2019-12-17 08:39 | 显示全部楼层
hfwufanhf2006 发表于 2019-12-16 16:03
我给你写了一段代码,你可能要仔细看才能搞的懂。主要是的公式太复杂,我不了解你公式的全貌,只能写一个 ...

感谢老师花时间和精力帮助解决,但是我是VBA代码小白。我想的是新的计算式直接出结果的代码。百度知道里的高手老师基本已达到我的需求。https://zhidao.baidu.com/question/1546877237870850587.html?entry=qb_uhome_tag
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-27 10:08 , Processed in 0.320380 second(s), 11 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表