楼主 w83365040371 |
Q:如何统一单位? 如下图所示,将A列中的游戏币转换,统一单位为(备注:1金=100银=100000铜) 图1. A: 从图上我们可以看到单元格中都含有金银铜,且它们在单元格中的排列顺序都一致. 对于这种比较规律的数据,可以用mid和find函数去求金、银、铜所对应的系数,公式如下 公式1.
优点:公式1.对金银铜所对应的系数是否为整数没有限制 比如:单元格中的银币的系数可以为0.5, 结果见图2. 图2. 统一单位.zip 该帖已经同步到 w83365040371的微博 |
2楼 w83365040371 |
然而公式1.在实际应用中可能碰到很多问题,比如单元格中的"金"、"银"、"铜"排列顺序不一致,或者某个单元格中只含有"金"等 案例2: 如下图所示,案例数据中的,金银铜顺序不一致或者仅有银存在等,但是其系数为整数 图3. 由于数据源中的单位只有整数,那么可以用countif()和通配符"*",来求其系数,公式如下,结果见图4. 公式2.
图4. 以案例2.A8单元格中的"10银124铜2金"为例,使用简化过的公式countif(a8,"*"&row($1:$200)&"铜*),以便对结果的讨论,结果见图5. 图5. 从图表上我们可以知道,满足结果为1的行标为4,24,124. 而铜的系数为124=4+20+100,即所得行标的首位的数字相连,这就是公式LEFT(ROW($1:$200))*10^(LEN(ROW($1:$200))-1)的由来 问题: 公式2.对系数有着比较严格的要求,系数不能超过65536或不能为小数,见图11. 备注:其实如果系数是小数,也能一定限度的使用公式2. 比如 已知系数是小数且不大于655.36 图11. |
3楼 w83365040371 |
如上图所示,数据中金银铜的系数不全为整数,且单元格中金银铜不是完全存在 对于这类问题可以用公式3.,结果见图7.
以案例3.中的A13单元格,"3金2.5铜1银"为例,使用函数 LEFT(SUBSTITUTE("@"&A12,{"金","银","铜"},REPT(" ",50)),50) 可以得到每个单位对应的,由其系数和文字的混合的字符串,结果见图8. 图8. 获得字符串后,从右开始截取,所能得到的最大数字,即为每个单位真实的系数,(利用经典的混和文字求数字和的思路),也就是线面公式的由来... TEXT(RIGHT(TEXT(RIGHT(LEFT(SUBSTITUTE("@"&A12,{"金","银","铜"},REPT(" ",50)),50),ROW($1:$53)),),ROW($1:$53)-1),"[>];;0;!0") 公式3.在实际使用中也有限制 对于米、分米、厘米,这种单位"分米"包含单位"米"的数据,公式3.会出错,见图9 图9. 如上图红色标记所示, 数据"2厘米1米", 利用公式得到"米"的系数是"2厘",而不是其真实的系数"1",造成了结果错误 对于这些字符长度=1的单位,我们可以用字母评分的公式去求值 公式4.
公式5.
, 结果见图10. 图10. 由于是用公式SUMIF(H:H,MID(A4,ROW($1:$102)+COLUMN(A:J)-1,1),I:I)获得单位的兑换系数, 所以公式4.和公式5.对数据的单位有要求:要求对单位截取相同的长度时,能够彼此区分比如:数据源中同时含有长度单位,,使用公式5.就无从下手,此时用公式3.是更好的选择 本帖简单的介绍了在统一单位过程中碰到的一些问题及其解法,每个公式各有优劣,要根据实际情况取合适的公式处理... 同时对于上面所提到的一些案例, 也可以用宏表函数evaluate(详细步骤见楼下, 在此多谢天南), 由于此公式要不断地嵌套函数substitute, 所以当数据中的单位多而复杂时, 使用起来就比较麻烦. |
4楼 天南地北 |
定义名称为number为
铜币数量.rar |
5楼 w83365040371 |
嗯,用宏表函数基本上通杀... |
6楼 200240 |
好东西 我正好可以用得着,谢谢 |