Level 11 挑战更强大的宏 其1
-显示近亲繁殖马-
【血统表中的近亲繁殖】
通过Level 9,我们已经能够制作5代血统表了,但你是否觉得这个血统表还缺少些什么呢?
没错,我们无法一眼看出哪些马是近亲繁殖(Inbreeding)的。
在常见的血统表中,近亲繁殖的马名通常会用粗体或不同颜色的文字标注,以便一目了然地看出哪些马是近亲繁殖的(或者没有近亲繁殖)。
由于每匹马的近亲繁殖情况各不相同,因此像之前那样用函数来处理几乎是不可能的。
于是,我们将编写一个宏,从血统表中找出近亲繁殖的马,并修改其字体样式,从而制作一个更专业的血统表。
【如何显示近亲繁殖的马】
要找出“血统表中哪些马是近亲繁殖的”,似乎可以通过检查表中所有马的名字,列出重复的名字来实现……
但这种方法会导致以下问题。
如果将所有重复的马都视为近亲繁殖,血统表会变成这样:
(蓝色粗体为近亲繁殖的马)
Northern Dancer 骝色 1961 Lady Victoria 黑骝色 1962 |
Nearctic 黑骝色 1954 Natalma 骝色 1957 |
Nearco 黑骝色 1935 Lady Angela 栗色 1944 |
Pharos Nogara |
Phalaris Scapa Flow |
Havresac Catnip |
||||
Hyperion Sister Sarah |
Gainsborough Selene |
|||
Abbots Trace Sarita |
||||
Native Dancer 青色 1950 Almahmoud 栗色 1947 |
Polynesian Geisha |
Unbreakable Black Polly |
||
Discovery Miyako |
||||
Mahmoud Arbitrator |
Blenheim Mah Mahal |
|||
Peace Chance Mother Goose |
||||
Victoria Park 骝色 1957 Lady Angela 栗色 1944 |
Chop Chop 骝色 1940 Victoriana 栗色 1952 |
Flares Sceptical |
Gallant Fox Flambino |
|
Buchan Clodagh |
||||
Windfields Iribelle |
Bunty Lawless Nandi |
|||
Osiris Belmona |
||||
Hyperion 栗色 1930 Sister Sarah 黑骝色 1930 |
Gainsborough Selene |
Bayardo Rosedrop |
||
Chaucer Serenissima |
||||
Abbots Trace Sarita |
Tracery Abbots Anne |
|||
Swynford Molly Desmond |
*Northern Taste与Lady Angela有“3×2”的近亲繁殖,但如果将所有重复的马都视为近亲繁殖,那么Lady Angela的父母及其祖先也会被标记为近亲繁殖,导致无法分辨真正的近亲繁殖马。
此外,如果Lady Angela的父亲之外还有其他Hyperion的血统,这显然意味着Hyperion的近亲繁殖,但这种方法无法区分这种情况。
因此,简单地选择重复的马并不能正确显示近亲繁殖。
那么,我们可以尝试将某匹马及其后代作为一个组,通过组之间的比较来检查。
以Lady Angela及其后代为一个组,血统表中会有两个Lady Angela的组:
Lady Angela - Nearctic
Lady Angela - Lady Victoria
这两个组的父母相同,但后代不同。在这种情况下,我们将父母视为近亲繁殖马。
如果父母和后代完全相同,则不视为近亲繁殖。例如,Hyperion(Lady Angela的父亲)的组:
Hyperion - Lady Angela
Hyperion - Lady Angela
这不会被标记为近亲繁殖。
通过这种方式,将血统表中的某匹马及其后代作为一个组,如果“父母相同但后代不同”,则该父母为近亲繁殖马。这样可以正确识别近亲繁殖马。
【程序流程】
既然我们已经知道如何找出近亲繁殖马,接下来将以此为核心,设计整个宏的流程。