Files
2020-11-07 13:20:32 +08:00

97 lines
3.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 从零开始的记账工具人
既然题目是用Excel分发的,那就直接用Excel解(
解题使用的Excel表格已经放在了本文件夹内的从`零开始的记账工具人-convert.xlsx`中。
## Excel表格中每列的含义(Sheet1
### A-B
题目给出的金额(单位为大写)和数量。
### G-K
用于拆分佰,拾,元,角,分前的大写数字。
以G列为例:
```
=IFERROR(MID($A2,FIND(G$1,$A2)-1,1),0)
```
>函数 FIND 和 FINDB 用于在第二个文本串中定位第一个文本串,并返回第一个文本串的起始位置的值,该值从第二个文本串的第一个字符算起。
[`FIND`函数](https://support.microsoft.com/zh-cn/office/find%e3%80%81findb-%e5%87%bd%e6%95%b0-c7912941-af2a-4bdf-a553-d0d89b0a0628?ui=zh-cn&rs=zh-cn&ad=cn)用于寻找`A列`对应单元格(即`A2`)内“佰”字的位置,并输出其位置。
>MID 返回文本字符串中从指定位置开始的特定数目的字符,该数目由用户指定。
[`MID`函数](https://support.microsoft.com/zh-cn/office/mid%E3%80%81midb-%E5%87%BD%E6%95%B0-d5f9e25c-d7d6-472e-b568-4ecb12433028)用于读取“佰”字的位置的前一位的文字(即佰位的金额,此题中只有“零”和“壹”)
> 可以使用 IFERROR 函数捕获和处理公式中的错误。 如果公式的计算结果为错误值,则 IFERROR 返回您指定的值;否则,它将返回公式的结果。
[`IFERROR`函数](https://support.microsoft.com/zh-cn/office/iferror-%E5%87%BD%E6%95%B0-c526fd07-caeb-47b8-8bb6-63f3e417f611)用于处理单元格金额没有佰位的情况,没有佰位时输出0。
对拾,元,角,分位的处理同上。
### M-Q
用于将提取出的中文大写金额转换成数字。
以M列为例:
```
=VLOOKUP(G2,'LUT-UC'!$A$1:$B$12,2,0)
```
使用[`VLOOKUP`函数](https://support.microsoft.com/zh-cn/office/vlookup-%E5%87%BD%E6%95%B0-0bbc8083-26fe-4963-8ab8-93a18ad188a1),查找`LUT-UC`这个Sheet中对应的数字,并返回该数字。
`LUT-UC`中包含了中文大写金额和数字的对应关系:
| 0 | 0 |
| ---- | ---- |
| 零 | 0 |
| 壹 | 1 |
| 贰 | 2 |
| 叁 | 3 |
| 肆 | 4 |
| 伍 | 5 |
| 陆 | 6 |
| 柒 | 7 |
| 捌 | 8 |
| 玖 | 9 |
| 拾 | 0 |
**其中“拾”位由于有形如“拾X”(10-20之间的数额)在“拾”字之前没有“壹”,所以需要特殊处理:**
```
=VLOOKUP(H2,'LUT-UC'!$A$1:$B$12,2,0)+IFERROR(FIND("拾",A2,1)=1,0)
```
其中,处理10-20之间的数额时,“拾”位前没有字符,因此`H`列如果直接用给“佰”用的公式会返回0。因此N列公式的第二部分即是用于检查“拾”字是否是单元格的第一个字符。如果其为单元格的第一个字符,则返回**1**(给“拾”位的计数加1)。
### S
```
=M2*100+N2*10+O2*1+P2*0.1+Q2*0.01
```
将解析出的每位数字相加。
### T
```
=S2*B2
```
计算每行的金额之和。
### W2
```
=SUM(T:T)
```
计算总金额。