Level 10 挑战使用宏
-尝试血量计算-
【什么是宏】
EXCEL附带了一种称为“宏”的程序功能。
宏通常用于自动化重复性操作,例如:[选择“Sheet 1”中的“A1:G20 ”范围]→[复制所选范围]→[粘贴到“Sheet 2”]→[打印该范围]。通过更复杂的编程,可以创建一些实用的简易程序。
在Level 10中,我们将使用宏功能,制作一个从近亲繁殖(Inbreeding)显示中计算血量的程序。
【近亲繁殖显示与血量】
在实际编写宏之前,我们先了解一下血量计算是如何进行的。
例如,在“T M Opera O”的5代血统表中,近亲繁殖显示如下:
Nasrullah 4*5
Nearco 5×5
Nasrullah(ナスルーラ)的近亲繁殖用“*”表示,表示它只出现在父系或母系的一方(在“T M Opera O”中,它出现在母系)。
Nearco(ネアルコ)的近亲繁殖用“×”表示,表示它同时出现在父系和母系中。
有时也会使用相同的符号表示两种情况,但使用不同的符号更容易理解。
这些近亲繁殖的血量分别如下:
Nasrullah 9.375%
Nearco 6.25%
近亲繁殖显示与血量之间的关系如下:
如果某匹马的近亲繁殖表示为:
x * y * z * ...
则其血量计算公式为:
(0.5^x + 0.5^y + 0.5^z + ...) × 100 (%)
在公式中,“*”和“×”没有区别。
以“T M Opera O”为例,Nasrullah的近亲繁殖显示为“4*5”,代入公式计算,计算过程和结果就如下文所示:
(0.5^4 + 0.5^5) × 100
= (0.0625 + 0.03125) × 100
= 9.375 %
【编写宏】
关于宏的详细说明,请参考EXCEL的帮助文档或相关书籍。现在,我们直接尝试编写宏。
首先,打开EXCEL并创建一个新文件。
接着从菜单中选择工具→宏→Visual Basic Editor(现在的EXCEL里是去文件→选项,在自定义功能区里将开发工具放入工作栏,然后使用其中的宏功能即可)。
此时,会显示一个与普通表格界面完全不同的窗口,这就是编写宏的“VBE”(Visual Basic Editor)界面。
界面分为三部分:左上角是“项目”,左下角是“属性”,右侧是一个空白区域。
从菜单中选择插入→标准模块,右侧区域会变成一个白色编辑窗口,光标会闪烁。
在此窗口中,可以编写宏代码。
将以下代码直接输入到窗口中。如果觉得麻烦,也可以复制粘贴。
Sub 血量计算()
Dim N As Integer
Dim TOTAL As Single
Dim BLD As Single
N = 1
TOTAL = 0
BLD = 0
While Mid(ActiveCell, N, 1) <> Error
BLD = 0.5 ^ Mid(ActiveCell, N, 1) * 100
TOTAL = TOTAL + BLD
N = N + 2
Wend
MsgBox TOTAL & " %"
End Sub
输入第一行“Sub 血量计算()”后,最后一行“End Sub”会自动显示。
其余部分请按上述代码输入,操作方式与普通文本编辑器相同。
编写完成后,从菜单中选择文件→关闭并返回到Microsoft Excel,结束宏的编写。
【运行宏】
返回表格界面后,在任意单元格中输入“4*5”(全角或半角均可),然后选中该单元格(点击单元格或用方向键移动光标使其被粗框包围)。
从菜单中选择工具→宏→宏,打开宏窗口,选择“血量计算”宏。
点击“运行”或双击“血量计算”,宏将启动。(有点紧张吧?)
如果宏运行正常,会弹出一个消息框,显示“9.375 %”和一个“OK”按钮。点击“OK”关闭消息框。
接下来,在另一个单元格中输入“5×5”,并选中该单元格。可以尝试混合使用全角和半角字符,例如第一个“5”用全角,第二个“5”用半角。输入完成后,确保选中该单元格,然后运行宏。
这次,消息框应显示“6.25 %”。
如果出现错误消息或计算结果不正确,请重新打开VBE界面,检查宏代码。
【宏的代码说明】
这个宏简单说明一下。
While Mid(ActiveCell, N, 1) <> Error
BLD = 0.5 ^ Mid(ActiveCell, N, 1) * 100
TOTAL = TOTAL + BLD
N = N + 2
Wend
以上5行是实际进行血量计算的主要部分。
除此之外的记述,是关于宏(程序)的各种约定和计算结果的显示。
主要部分中,
「取出当前活动单元格内容的第一个字符,将其值以0.5的幂次方乘以100。
接着,从该字符向右取第二个字符,将其值以0.5的幂次方乘以100,并加到最初的值上。
重复这样的操作,直到单元格内容为空。」
进行这样的计算。
也就是说,
(0.5x+0.5y+0.5z+....)×100
进行这样的计算。
这个宏没有字符数的限制。因此,
5*6*6*5*4×7*5*6*6
即使是这样的近亲繁殖,也能正确计算。
此外,关于字符,不区分全角和半角,所以无论是数字还是符号,使用哪种方式记述,计算都能正确进行。
对于数字以外的符号,与计算无关,所以即使使用“*”或“×”以外的符号记述(例如4#5!5&3这样写),只要符号是一个字符,计算上完全没有问题。
不过,取出的数字每次只能是一个字符,所以
8*10×10*9*11
这样包含两位数以上的数字时,无法计算。
实际上,几乎不需要计算10代以上的血统表的血量,所以这不会有问题。
【宏的保存】
如果直接保存宏,这个宏只能在当前创建的工作簿(文件)中使用。
为了让其他工作簿(EXCEL的其他文件)也能使用,需要将其保存到其他位置。
打开菜单中的「工具」→「宏」→「Visual Basic Editor」。
在画面左上角的「项目」中,有一个名为“VBA Project (PERSONAL.XLS)”的部分。
右键点击这里,从显示的菜单中选择「插入」→「标准模块」。
当画面右侧出现空白部分时,将创建的宏(记录在“VBA Project (Book1)”的模块中)复制并粘贴到这里。
选择菜单中的「文件」→「保存 PERSONAL.XLS」,宏将被保存到个人宏工作簿中,可以从任何工作簿中使用。
另外,每次从菜单中启动宏有点麻烦。
也可以将这个宏注册为工具栏按钮。
返回到EXCEL的单元格显示画面,选择菜单中的「工具」→「自定义」→「命令」。
从左侧的命令中选择「宏」,点击带有笑脸图标的「自定义按钮」。
将此按钮拖动到上方工具栏的适当位置(任何位置都可以,但右侧的空白处比较好),笑脸图标将显示在工具栏中。
右键点击此图标,会打开可以注册宏的列表画面,选择「宏的注册」,选择“PERSONAL.XLS!血量计算”,然后点击“OK”按钮。
还可以更改按钮的名称或图标(标记),请选择合适的内容。