将来本当に男性の消滅によって人類は絶滅するのか

生まれてくる赤ちゃんの性別は、性別を決定づける染色体として、母親のX染色体と父親のX染色体が融合してXX染色体となった場合は女の子となり、母親のX染色体と父親のY染色体が繋がってXY染色体となった場合は男の子となります。
X染色体に含まれる遺伝子の数は1,098個と言われており、かつて、哺乳類が誕生したころは、Y染色体もX染色体と同じくらい遺伝子の数がありましたが、徐々にその数を減らしていき、現在は78個と言われています。

  人間の男性を決定づけるY染色体が長い年月を経て徐々に短くなっているため、将来は男性が消滅する可能性があると言われています。したがって、Y染色体の消滅とともに男性も消滅し、子孫を繁栄させることができないため人類は絶滅する可能性があります。

  生物は絶滅しないよう繁殖によって長い間遺伝子が子孫に受け継がれてきました。初期に発生したアメーバのような単細胞生物は細胞分裂による自己繁殖によって子孫(クローン)を残していきました。
生物の中にはやがてメスとオスに分かれ、交接することにより子孫を残す有性生物が出現しました。哺乳類は全て有性生物であると言われています。

しかし、有性生物の中には、環境によってはオスがいるのにメスだけで子孫を残す生物もいます。蜂、蟻、ゴキブリ、ヘビ、サメなどです。

  ゴキブリは周囲にオスがいなくてメスだけになると自分で卵を産みます。このようにオスとの交接なく自分で子孫を残すことを単為生殖(たんいせいしょく)と呼びます。
哺乳類の単為生殖はありえないと言われてきました。しかし、2004年の東京農工大学の教授がマウスを使って、メス同士の卵子を交配させて子孫を残すことに成功しました。当時、成功率は1%ほどでしたが、その後、さらなる遺伝子の発見により2007年には30%の確率で成功するようになり、現在も各国でその技術が盛んに研究されているそうです。

  将来、男性が絶滅しても、この技術を進化させて、人間の子孫を残すことができるのかもしれません。

  また、人間の赤ちゃんは受精してから胎児に成長するまでの間、途中で魚の形をしたり、しっぽが生えていたりと、人間の進化の歴史を再現していると言われています。そして、最初は全ての胎児が女性です。したがって、全員が胎盤や子宮を作りながら成長していきます。ところが、4週目ころになって、突然男性を作る因子であるSRY遺伝子が現れて女性器を男性器に作り変えていき、女性が男性へと変化します。

つまり、胎児の変化の歴史が人間の進化の歴史を物語っているとすれば、人間のルーツには単為生殖の時期があったのかもしれません。

一方で、鹿児島県から台湾にかけて連なる南西諸島に生息しているトゲネズミにはY染色体がなく、オスもメスもX染色体1本しか持たないXO型を持っています。かつては、オスはY染色体を持っていましたが徐々に短くなって遂にY染色体が消えた可能性があります。

ところが、Y染色体がなくてもオスが生まれているのです。この原因はまだ研究中ですが、他のX染色体の中にオスを出現させる遺伝子が含まれている可能性があるそうです。

したがって、たとえ、男性のY染色体が将来消えても遺伝子の進化(又は突然変異)によって別のX染色体の中から男性を出現させる遺伝子が現れるかもしれません。
あるいは、1,098個あった遺伝子から78個まで減ったところで、これ以上はあまり減らない状況が長い間続くのかもしれません。

いずれにしても、今の状況で、男性が消滅し、人類が絶滅するかどうかについて予測は難しいでしょう。

生物学的に人間の運命が絶滅の道を選んでいるとしても、そのしくみを知った人間が技術によって克服するのかもしれません。

EXCELマクロの簡単なVBAプログラミング

今、職場の業務効率化を図るため、Excel macro で使うVBA(Visual Basic for Application)を勉強中です。特に1000人くらい参加する予定のイベントのうち 、こちらが把握したい人(ある集団のメンバー)が含まれているかどうかを確認する必要が生じたため、職員が2つの名簿を照合して手作業で確認していましたが、この確認作業は洩れがないよう極めて正確性が求められる作業なので、こんなときその担当者がExcel macro の知識を持っていれば、迅速かつ正確に行うことができるので、今回のことをきっかけとしてVBAプログラミングの勉強をして業務の効率化に協力しようと思い立ちました。

私も学生のころ、授業でフォートランを学んだので多少のプログラミングのやり方は覚えているつもりだし、その後、趣味でC言語やJAVA, BV.Netもかじりましたが、どれも中途半端で途中で挫折しました。
プログラミング言語というものは、趣味で勉強しても普段から使っていなければやがて忘れてしまうものなので、趣味程度の気持ちではなかなか上達しないものだとわかりました。何か明確な目的や目標がなければ身につかないものです。

そのような状況の中で、世の中はAI(人工知能)やRPAなどデジタル社会に突入する状況となりました。また、未曾有の少子高齢化社会に向って、人手不足の問題がますます深刻化していく時代となりました。このような状況下では必然的に業務効率化による労働生産性の向上が求められます。

私が勤務している職場も仕事は増えていく一方なのに事務所スペースが限られているため職員の増員には限界があることから、人間の判断を要しない定型的な業務はできる限り自動化をしていく方針としています。

ということで、現在、RPAソフトを検討しているところで、弊社は非営利団体なのでUiPathなら無料で購入できるため、現在、UiPathが有力となっています。しかし、無料の場合は、サポートがつかないため独学で覚えなければなりません。そこで、職員に覚えさせるのは時間もかかるので、専門派遣を使って構築してもらおうかなと考えています。

UiPathは個人でも無料でダウンロードできるので、先日、インストールして少し勉強したのですが、へたにある程度プログラミングをかじったことがある人間から見るとかえってわかりづらいという印象でした。
RPAはどこのベンダーもプログラミングの知識を知らなくても簡単に覚えられるとのフレコミですが、クリックによってアクティビティやプロパティを張り付けてプログラムのようなものを構成していくので、パソコン操作手順の自動記録の方法以外については、通常のプログラミングとあまり変わらない印象でした。

コードをキーで入力する手間や細かい文法で使う単語を入力しなくてもよいというメリットはあるかと思います。しかし、RPAも結局はプログラムの作成です。通常のパソコン作業を分析してどのように組めば自動化できるかというフローチャートを描けなければなりません。

また、その対象となる作業が、頻度が少なく、かつ、手間もかからないような作業であれば、RPAで自動化する意味があまりありません。特に小規模事業場においては、一つの定型的なパソコン作業で比較的大量に行う作業というものはあまりないかもしれません。規模の小さな事業場では自動化させることに適したパソコン業務を洗い出す作業が結構難しいと感じました。

UiPath陣営はおそらく小規模事業場(年商100万ドル以下かつパソコン250台以下の事業場)や個人はRPAを購入することはあまり期待できないとみて、無料にしたのかもしれません。

Excel macro でもExcel関連であればパソコン業務の自動化は可能なので、UiPathの導入と並行して、VBAの普及も視野に入れようかなと考えています。
それには、まず、VBAのしくみや使い方を知る必要があるので、まず基本的な知識や使い方を勉強しました。かつて、VB.Netを少し勉強したことがあるので、ほとんど抵抗なく勉強できました。

練習問題として、昼のイベントと夜のイバントの両方に出席する人を抽出をする方法についてExcel macroのVBAを使って以下のようにプログラムを作成したところ、以下の表のように両方出席した人の名前を別の欄に記載し、昼の出席者ののうちその人の名前の欄を黄色で表示し、その人数(3名)を別の欄に表示できるようにしました(この画面では色は出ていませんが実際のExcel画面では色が出ています。)。

最初は、Application.WorksheetFunction.Matchなどのオブジェクやプロパティを使ってプログラムを考えていましたが、うまくいかなかったので難しいプログラムを避けて単純な構成のフローチャートを考えたところ、以下のように比較的簡単に作成できました。
このような作業は実際の仕事でもあると思うので、VBAの初心者の方は参考にしてください。

ただし、VBAのわかりづらいところは、等号と代入の記号が同じ「=」であるという点です。一般的なプログラム言語では代入は「=」が使われていますが、等号まで代入と一緒の「=」を使っているところはあまりないのではないかと思います。
通常、プログラム言語の等号記号は「==」を使うと思うのですが…。
論理的に代入と等号は概念が異なるので記号を区別するよう改めたほうがわかりやすいと思います。

Sub 重複会員()
Application.ScreenUpdating = False
Dim i, j, cnt As Long
cnt = 0
For i = 2 To 11
For j = 2 To 11
If Cells(i, 2) = Cells(j, 3) Then Cells(i, 2).Interior.Color = vbYellow
If Cells(i, 2) = Cells(j, 3) Then Cells(i, 4) = Cells(i, 2)
If Cells(i, 2) = Cells(j, 3) Then cnt = cnt + 1
Next
Next
Range(“E2”) = cnt
End Sub

実行前

昼に出席 夜に出席 両方出席 人数
1 田中 野村
2 鈴木 市川
3 山川 山本
4 池田 吉田
5 木村 成田
6 佐藤 森本
7 山本 神林
8 河村 池田
9 大谷 松本
10 中野 大谷

実行後

昼に出席 夜に出席 両方出席 人数
1 田中 野村 3
2 鈴木 市川
3 山川 山本
4 池田 吉田 池田
5 木村 成田
6 佐藤 森本
7 山本 神林 山本
8 河村 池田
9 大谷 松本 大谷
10 中野 大谷