# 从零开始的记账工具人

既然题目是用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)
```

计算总金额。

