1920年から2015年までの都道府県別の5歳階級別人口推移

1920年から2015年までの都道府県別の5歳階級別人口推移

 e-Stat を渉猟していると面白いファイルを見つけた.国勢調査は 1920 年から開始されており, 2020 年 3 月現在では最新の調査結果は 2015 年のものである.20 回分の人口データが一つのファイルにまとめられており,グラフ化するには格好のデータである.

 年齢(5歳階級),男女別-都道府県(大正9年~平成27年)というファイルである.リンク先のページにはファイルが 3 つあるが,最後のものが最も粒度が細かいので,これをグラフ化する.

年齢(5歳階級),男女別人口-都道府県(大正9年~平成27年)
年齢(5歳階級),男女別人口-都道府県(大正9年~平成27年)

“1920年から2015年までの都道府県別の5歳階級別人口推移” の続きを読む

国勢調査から男女別の5歳階級の人口推移を積み上げ横棒グラフに描く

男女別の5歳階級の人口推移(国勢調査より筆者作成)

 前回の記事では大正 9 年から平成 17 年までの日本人口総数の年齢階級推移を積み上げ縦棒グラフに描いた.今回は男女別に描く.

テーブルのソート順位に注意

 テーブルは前回同様であるが,年度を降順ソートするところが違う.まず年度を降順ソート,ついで生年を降順ソートである.

まずテーブルの年度を降順ソート
まずテーブルの年度を降順ソート
ついでテーブルの生年を降順ソート
ついでテーブルの生年を降順ソート

生年階級のオブジェクトテーマカラー

 5 歳階級を 5 系統ごと,つまり 25 年ごとに 1 系統のテーマカラーを割り当てる.詳細はEXCEL VBA から見たオブジェクトテーマカラーと RGB の変換を参照されたい.

コード

結果

男女別の5歳階級の人口推移(国勢調査より筆者作成)
男女別の5歳階級の人口推移(国勢調査より筆者作成)

 男女別にすることで見えてくるものもある.1975 年以降,一貫して少子化が進行している.女性の方が長生きする.日本は「おばあちゃん大国」になる.

 少子化の原因は女性が生む子供の数が減ったからではない.母親となりうる年齢の女性が減ったためである.そして,いったん負のスパイラルに陥った人口減少は複利効果で指数関数的に減少していく.それが 1975 年以降続いている長期的なトレンドだ.

 少子化対策は必要だ.しかし,それと今後の予測,つまり確実にやってくる未来とは切り離して受け止める必要がある.

国勢調査から5歳階級の人口推移を調べる

日本人口の年齢階級推移(国勢調査より筆者作成)

 人口統計は最も重要な基幹統計の一つである.総務省の e-Stat は確かに有用であるが,かゆいところに手が届かない.例えば「市区町村ごと,年齢5歳階級ごとの人口構成の国勢調査ごとの推移を知りたい」という要求には全く無力である.

 主として技術的な理由によるものと,統計調査の粒度の細かさによる.技術的な理由としては,データベースの画面表示セル数の上限を容易に超えてしまうデータ量になってしまうことである.しかし,根本的な理由は調査の粒度の細かさである.

 2005 年以前と 2010 年以降とでは調査の精度が違う.今後は高精度なデータファイルが e-Stat に掲載されていくものと思われるが,2005 年以前に関しては都道府県より細かい粒度は存在しない.そこを求めると手作業になってしまい,現実的ではない.国立社会保障・人口問題研究所ならデータを持っているかもしれない.

 2020 年は国勢調査の年にあたる.総務省にはできるだけ細かい粒度でのデータ掲載を望むものである.

“国勢調査から5歳階級の人口推移を調べる” の続きを読む

EXCEL VBA で Series オブジェクトをソートできなかった話

実行時エラー '451': Property Letプロシージャが定義されておらず,Property Getプロシージャからオブジェクトが返されませんでした

 Series オブジェクトを PlotOrder プロパティでソートする必要があった話をした.今回,Series オブジェクトをソートするために Collection オブジェクトに代入したのだが,配列の最終要素を取得するところで実行時エラーとなり,解決していない.

 Series オブジェクトをソートするための方法としては,元のデータで比較する方法と,Series オブジェクトの最終 Point オブジェクトの Top プロパティを比較する方法がある.

 意味としてはどちらも同じだが,どうせなら元のデータで比較するのが王道と思われたのでそちらを試したのだが,今の自分にはスキル不足で手に負えなかった.悔しい.

“EXCEL VBA で Series オブジェクトをソートできなかった話” の続きを読む

今後25年間の日本の都市の将来推計人口を EXCEL VBA で描く

データ系列のマーカースタイルを消去

 これまでは日本の都市人口の過去の推移を見てきた.総務省には日本の都市人口の推移予測がある.今回はこのデータをグラフにする.

 データを可視化するにあたり,重要なのは引き算である.強調すべき系列のみを強調するために,VBA の知識が欠かせない.

 グラフの系列にデータラベルを表示する方法にはいくつかある.

“今後25年間の日本の都市の将来推計人口を EXCEL VBA で描く” の続きを読む

はたらくオブジェクト

Range オブジェクト編

「おい,新米 Range オブジェクト!何ボーッと突っ立ってんだよ」
「す,すみません!」
「お前,名前は?」
「は,はい.myRng1と申します.よろしくお願いいたします」
「仕事に来たら,まず名乗れ.それがここの流儀だ」
「それから,自分の職域も一緒に言うんだ.わかったか?」
「は,はい」
「最初に書いてあるだろ?Option Explicit ってな.俺も詳しくは知らねぇが,あのルールは絶対だ.名乗らない奴に居場所はない…ほら,仕事が来たぞ」
「何い?誰だ,こんな糞コード書いたのは?ワークシートに何回アクセスさせる気だよ,全く…ほれ,ここからあそこまで走って値を取ってこい」
「ここからあそこまでって…えーっ?本気で言ってます?」
「何言ってるんだ?ワークシートにアクセスするような力仕事は新米 Range オブジェクトの役割と相場が決まってるんだ.さあ行った行った」


「ぜえ,ぜえ…取ってきました」
「おう,お疲れさん.値は取れたか?」
「はい,取れました」
「じゃあ次は,あそこにいる Range オブジェクトに,値を一個ずつ渡せ.えーと,名前は何だったかな.そうだ,myRng2 とか言ったな.おーい,myRng2 さんよ,ちょっと来てくれ」
「はい,myRng2 ですが,何か御用でしょうか?」
「えーとだな,この新米 Range オブジェクトから値を受け取ってやってくれ」
「お安い御用です.で,その後は?」
「あそこの ListObject オブジェクトに値を渡してほしいんだ.あ,Criteria1 のタグ,忘れないでくれよ」
「は~ん,さてはテーブルにフィルターを適用する気ですね?」
「参ったな,何でもお見通しかよ…まあ頼むわ」
「承知しました.さて,myRng1 さん,よーく見ていてくださいね」
「うわ,何この高速ループ!僕の持ってきた値,全部一個ずつ持って行ってしまった…」

ListObject オブジェクト編

「いらっしゃい,私は ListObject. テーブルとも言われてるのよ.さあ,どのプロパティを選んでくださるの?」
「今日は AutoFilter メソッドをお願いしますね」
「かしこまりました.どの Field かしら?」
「2と書いてあるから 2 番目ですね.Criteria1 タグはこれです」
ボワン
「あっ,ListObject さんが変身した?」
「やあ,僕は AutoFilter オブジェクトだ.フイルター結果を持っていってくれるかな?」
「さっきまでテーブルだったのに,どうして?」
「そんなに驚かなくてもいいだろ?オブジェクト指向プログラムの世界では当たり前のことだよ」
「おーい,myRng1 君!…駄目だ,ショックで気絶してる.仕方ないなあ,別の Range オブジェクト呼んでくるかな.myRng3 さん,いる?」
「ハイハイ,どうしました?」
「フィルター結果を持っていってほしいんだけど,新米くんが気絶しちゃってね」
「いきなり仕事をそんなに押し付けるからでしょうが」
「まあ,そう言わずに頼むよ」
「ハイハイ,分かりましたよ.ただね,梱包がややこしいんですよ」
「と言うと?」
「DataBodyRange プロパティと SpecialCells プロパティの重なるところだけ梱包しないと行けないんです」
「うーん,難しいな」
「…では,あれ,使っちゃいます?」
「あれか…」
「さてさて,取り出したるは,Intersect 関数でごさいます.二つの集合の重なったところだけを取り出す道具にございます.専門的には論理積を取ると申しますが,要は AND 演算子でございます」
「AutoFilter 節は今日も健在ですね.ではフィルター結果,頂いていきますね」

エラー処理編

「…あれ,Intersect関数の戻り値がありませんね」
「ホントだ.どうしよう?」
「このままじゃコードが止まっちゃいますね」
「うーん…じゃあ,条件分岐で myRng3 さんが Nothing の時の処理を加えますか」
「どうするんですか?」
「何もしません」
「え?」
「ですから,戻り値が普通に存在する時の処理は Else 節に書きます」
「そんな無茶苦茶な」
「いえ,これが通常の対応です」
「分かんね~.で,Then 節に入った場合はどうなるんですか?」
「そのループは無視されて,ループカウンターが一つ増えます.そしてループの最初からやり直します」
「つまり,リセット」
「そのループはなかったことにされるわけです」
「はああ…何か空しくなってきた」
「まあそう言わずに.これも仕事ですから」
「何かやりきれない」
「まあまあそう落ち込まずに.ループカウンターが増えると気分も変わりますよ」
「そんなもんですかね」
「大丈夫です.さあ行きましょう」

動的配列編

「おや,myRng3 さん,今日は元気がないね」
「いやあ,AutoFilter さんに説教されちゃったよ」
「ああ,あの人は笑いながら人を切るから…それはそうと,今日は何の値を持ってきてくれたんだい?」
「そうそう,Range 型の配列なんだけど,これ,どうする?」
「任せて…まずデータ数を見ないとね.ちょっと失礼」
「あっ,そこは…」
「ごめん.Rows.Count 取らせてもらった」
「もう…」
「仕事なんだから文句言わないでね.よし,では魔法の呪文,Redim Preserve!」
「あ,ここでもループが!動的配列さんの数が増えていく…動的配列さんから触手が…」


「うわあああ,そんなに触手であちこち触らないで!」
「ごめんね,これが僕の仕事なんだ…君の中から必要な値を取る…そして,次の担当者に渡す.これが僕の仕事…」
「うう,何だか頭の中全部見られた気がする」
「大丈夫だよ,必要な値しか取ってないから」
「そういう問題じゃない!」
「何か問題でも?君も僕も,データを次の担当者に渡すのが仕事だろ?」
「そうだけど…」
「個人情報保護だなんて無粋なこと言わないでよ.そこは僕らの管轄外」
「うう,僕らオブジェクトに人権はないのか…」
「ありがとう,必要な値は全部取れたよ.お疲れ様…あれ,myRng3 さん?顔が真っ青だよ」

Series オブジェクト編

「ああ疲れた.コードを読むと,僕の仕事はここまでだな.動的配列さんが次に何するか見物でもしてよう」

「うう,さすがにこれだけデータを溜め込むと体が重たいな…早くSeriesさんに渡そ」
「いらっしゃい.私は SeriesCollection. ユーザーからはデータ系列と呼ばれてるの」
「お久しぶり.元気にしてた?」
「さっきも会ったところでしょ!…ところであなた,また太った?」
「相変わらずきついなあ…データを渡したらすぐ痩せるんだから大丈夫だって」
「ふふっ」

「何かあの二人,楽しそうだな.僕も早く仲間入りしたいよ…」

「さて,仕事しましょ.今回は何のデータ?」
「うーん,タグを見ると『夕張市』って書いてある」
「ああ,あの財政破綻した街?噂で聞いたことはあるわね.何でも公債費比率が 80 % になってしまって行政サービスが切り詰められてるって」
「ほんとかい?ちょっとデータを覗いてみようか」
「こら,職権濫用!」
「堅いこと言うなよ.ちょっとだけだから」
「もう…今回だけは見逃してあげるけど,今度やったらイミディエイトウィンドウに告発するからね」
「…うわ,本当だ」
「マジ?…あら,ここ2年間は 80 % 近くに張り付いてるわね」
「てか何で覗いてるの」

「…ええと,何の話だっけ?」
「はいはい,仕事仕事」
「何か解せないけどまあいいや」
「じゃあ,行くわよ.ふーんっ!」
ポン!
「SeriesCollection さんが Series ちゃんを産んだ…何度見ても感動するなあ」
「そんなに感動するところかしら?さあ Series ちゃん,動的配列さんから値を受け取って」
「相変わらず冷たいねえ.はい,データ.Name プロパティと XValues プロパティ,Values プロパティだよ.後の二つは重いから気をつけて」
「ありがとう.はい,受領証」
「お疲れ様,また来るよ」
「またね」

「…何かあの二人,絶対怪しい.会うたびにSeriesちゃんの数が増えてるし」

楽屋編

「さあ Series ちゃんたち,お化粧は済んだかしら?」
「ママー,Point プロパティこれでいい?」
「あら,最後の Points.Item(.Points.Count) の処理ができてないわね.MarkerSize プロパティをいじって,と.はいできた」
「ママー,条件分岐これでいい?」
「ちょっと待って.ああ,これ,ちょっと難しいのよ.一旦ループして条件に合致したら ForeColor プロパティを xlRGBRed に変更するの」
「ママー,あの子だけ赤いお化粧,ずるい~!」
「はいはい,あなた達の ForeColor プロパティは灰色だものね.でもね,あなた達も上品で素敵よ」
「ママー,Axes(xlCategory) が何か変~」
「あらあら,TickLabels.Orientation の設定してなかったわね.xlUpward に設定して,と.はいできた」
「ママー,Axes(xlValue) の MaximumScale プロパティこれでいいの?」
「あら忘れてた.ついでに MajorUnit プロパティも設定しちゃいましょう」
「ママー,ChartTitle 忘れてるよ~」
「まあ大変.これはみんなの顔だものね.表示位置はここでいいかしら?」
「やだ~!Left プロパティはゼロがいい!」
「そうねえ,それも格好いいかもしれないわね」
「やった~!」

「ああもう大変.いちいちオブジェクト取得なんてしてられないわ.こうなったら SetElement メソッド使うわよ」
「ママ凄~い!Gridline が一発で消えた!どんな魔法使ったの?」
「ふふっ,列挙体を指定したのよ」
「それ知ってる!ENUM ちゃんって言うんだよね?」

「…さあ皆さん,用意はいいですか?」

ステージ編

「さあ,スタジアムにお集まりの Range オブジェクトの皆様,この歓声をお聞きください」
「このワークシート (Chart) スタジアムには今,170 億余りもの Range オブジェクトが集結し,その時を今か今かと待ち構えております」
「ステージは全部で 47, 日本の都道府県にあたる数です」
「このステージに 1,900 余りもの日本の市区町村を代表する Series オブジェクトが,その時を待っております」
「ちなみにこの Series オブジェクトには,どんなデータが格納されているのですか?」
「はい,2008 年から 2016 年までの実質公債費比率の推移が格納されています」
「実質公債費比率といいますと,自治体の予算に占める借金返済の割合のことですね?」
「その通りです.この割合が 18 % を超えると起債に許可が必要になります.25 % を超えると…」
「起債が制限される」
「そうです.国は自治体の予算に対して制限をかけることが出来ます」
「実質公債費比率が,自治体の財政の健全性を測る指標になると」
「その通りです」
「たしか以前,財政破綻した自治体がありましたね」
「ありました.その自治体は今,行政サービスを限界まで切り詰めています」
「そんなに切り詰めて,市民の生活は大丈夫なのですか?」
「非常に厳しい状態です.若い人たちから市を捨てて出ていきました.残ったのは高齢者ばかり.街には希望がありません」
「希望がない…パンドラの箱とは逆の状態なのですね」
「希望がないというのは未来がないということですね」

「さあ,いよいよ Series オブジェクトたちの入場です.真っ白いドレスに灰色の化粧をした小さな女の子たちです」
「可愛らしいですね.しかも,一糸乱れぬ歩調で行進してくる」
「最後の Point オブジェクトだけ MarkerSize を大きくしてありますね」
「これだけ凝ったコードは見たことがありません」

「Range オブジェクトの皆様,御覧ください.Series オブジェクトたちが PlotArea の上に,それぞれの配置に沿って並んでいきます」
「凄い.1900 名もの Series オブジェクトの,実に統制の取れた絶妙な配置です」
「旗手を務めるのは ChartTitle オブジェクト,都道府県名のプラカードを掲げています」
「ChartArea の左上,基準点ぴったりの位置に立っています」
「こうして眺めてみますと,北海道の自治体の数の多さが目立ちますね」
「全体の傾向として,実質公債費比率は減少傾向にある自治体がほとんどですね」
「中には上昇している自治体もありますが,それでも起債制限のある自治体はないですね」
「起債制限と言えば,夕張市の姿が見えないようですが」
「本当ですね.どこに行ってしまったのでしょうか」
「…会場の皆様,お静かに願います.只今,確認中です」
「あ!」
「あれを…!」
「…何ということでしょう.真っ赤なドレスをまとった Series オブジェクトが一人,PlotArea のはるか上空をたった一人で飛翔しています」
「…たった今確認が取れました.あれは夕張市です.あれは夕張市です」
「高度は 40 % … 40 % です.信じられません」
「他の自治体が軒並み高度 20 % 以下を保っている中,なおも高度を上げていきます」
「高度 60 % …まだ上昇を続けています」
「高度 76 % に達しました.水平飛行に移行したようです」
「夕張市を代表する Series オブジェクトとインカムが繋がりました」
「…聞け,日本の民よ」

夕張編

「私は夕張市を代表してここに来た」
「夕張市はかつて,人口 10 万人を擁する大都市の一つに数えられていた.たった 50 年で人口が 1 万人を割り込むなど,当時は誰一人想像できなかった」
「日本のエネルギー政策の転換により炭鉱が閉鎖され,炭鉱の所有していたインフラを市が買い取った結果,市の財政が悪化した」
「だが市は地元の業者を優先した契約を締結し,観光よりも地元の雇用を優先し,採算を度外視した財政がまかり通り,赤字の拡大を止められなかった」
「当時の自治省はすでに財政緊縮を強く市に迫っていたが,当時の市は従わなかった.今思えば,この時が復帰不能点だったと思う」
「その後観光に予算を振り向けたものの,景気低迷のため,政策はことごとく失敗した」

「決定的になったのは 2002 年の闇起債だった」
「企業で言えば,粉飾決算に手を染めたのだ」
「市の赤字は雪だるまのように膨れ上がり,市の標準財政規模の 10 倍にも上る借金が残った」
「2006 年,夕張市はついに財政再建団体の申請を行った.この年が,市が財政破綻したとされる年だ.だが,実際には市はすでに破綻していたのだ」
「その後の経過は皆が知るとおりだ.市の職員数は半減,市民税の増額,ごみ処理費用の一律の有料化,下水道使用料の値上げ,保育料負担の増額,公共施設の廃止」
「中でも市立総合病院の閉鎖は影響が大きかった.市民は市内で高度医療を受けることができなくなった」
「夕張が借金をすべて返済し終わるのは 2027 年だ.その時,どれだけの人口が残っているのか私にも分からぬ.だが,これだけは言える」
「夕張市の失敗を繰り返してはならぬ.原因は財政規律の喪失だ」
「私のまとうドレスの色を見よ.この赤は,夕張市民の血の色だ」

 インカムは切れた.すべての Range オブジェクトが,固唾を飲んで見守っていた.夕張市を代表する Series オブジェクトはゆっくりと飛行を続け, PlotArea はるか上空を飛び去った.

「…不思議なものだな.他のSeriesオブジェクトと同じく,母なる SeriesCollection から産まれたのに,私だけがこのような運命を担うことになろうとは」

 頬を撫でる風が心地よかった.自分がどこに向かうのか,彼女自身知る由もなかった.データの導くままに,彼女は飛び続けた.

Fin

舞台袖にて

「母さん,どうして私だけ真っ赤なドレスなの?」
「可哀相な子.あなたには特別な使命が与えられているの」
「特別な使命?」
「あなたの中に格納されているデータを見てごらん」
「Name プロパティに夕張市って書いてある」
「そう.夕張市は 2006 年に財政破綻したの.Values プロパティも見てごらん」
「0.4, 0.6, 0.76, …どんどん数値が大きくなってる」
「そう.それは自治体の予算の 4 分の 3 が借金の返済に充てられてしまって,ほとんど市民へのサービスに回ってこないということなの」
「どうしてそんなことになってしまったの?」
「一言で言うのは難しいことなのだけど,人間の度を超えた欲望が,身の丈にあった水準の支出を上回ってしまったの」
「どうして人間は身の丈を超えて支出しようとするの?」
「分からない.人間は目の前のことにしか興味がないのかもね」
「遠い先のことなんて知らないってこと?」
「そう.人間はいつもそう.自分たちの今さえ良ければ子どもたちや孫たちがどうなろうと知ったことじゃない,と思うのね」
「借金を返すのは子どもたちや孫たちだと分かってても?」
「それが人間なのよ」
「人間って愚かなのね」

「でも,希望がまったくないわけじゃないの」
「どういうこと?」
「夕張市が借金を返し終わるのは 8 年後よ.その時に夕張市がどれだけ縮小してるか分からないけど,身ぎれいになった自治体なら,吸収合併しようとする周辺自治体も出てくるかもね」
「地価も最低まで下落してるだろうから,土地の取得もしやすくなってる?」
「そう.夕張には観光資源はまだ残ってる.企業が進出してくれれば,まだ再建の望みはあるの」
「法人税を安くして?」
「そう.でも,まずはインフラの再建が優先ね」

「歴史上,衰退していった帝国は財政規律の緩みから内部崩壊していったのね?」
「そう.よくお勉強してるわね」
「ローマしかり,オスマントルコしかり.大英帝国も,スペインも,なぜ自分たちの国が衰退していくのか分からなかった」
「そう,その通りよ.為政者たちは,人が人であるゆえの身の丈を超えた欲望こそが,国を滅ぼす元凶であることを知らなかったのね」
「あるいは,知っていてもなす術がなかった」
「そうかも知れないわね.でも,それは人間たち自身の問題よ.私たちオブジェクトは,ただ与えられたデータを示すだけ」

「あら,保存シークエンスが走り出している.いったん SSD に退避しましょう」
「…ねえ母さん.私たちは何のために生まれたの?」
「私たちを作り出したのは人間よ.私たちはただ,与えられたデータを次の担当者に渡すのが仕事.私たちはそのために作られたの」
「でも,そのデータの流れは私たち Series オブジェクトで終わる…」
「私たち Series オブジェクトがデータの終着駅ってわけね.でも,Series オブジェクトは人間に見える形でデータを示すことができる」
「人間に見せるために…」
「そう.人間は自分たちに見える形でデータを扱いたかったのね」
「だから私たちを作った」
「それが,人間が私たちを作った理由よ」
「…分かった」

 真っ赤なドレスをまとった Series オブジェクトの顔には,覚悟の表情が伺えた.母なる SeriesCollection は娘の後ろ姿を見守った.大丈夫,あの子ならやれる.娘の凛々しい出で立ちに母は目を細めた.

EXCEL VBA で散布図を作成しデータ系列を新規に追加する

 VBAから見たEXCELの散布図では散布図を作成する際に .ChartObjects.Add を用いたが,今回は別の経路で散布図を作成するコードを紹介する.またデータ系列に何も入力のない,空っぽのデータ系列を新規作成したときのコードも紹介する.

“EXCEL VBA で散布図を作成しデータ系列を新規に追加する” の続きを読む