LoginSignup
18
17

More than 5 years have passed since last update.

掛算の概念がわかりやすい九九表をPythonでExcelファイルとして自動生成する

Last updated at Posted at 2018-12-24

※末尾にExcelやPDF形式の九九表のダウンロード用URLがあります。

掛算の概念がわかりやすい九九表について

以前、掛算の概念がわかりやすい九九表というものがTwitterで話題になっていました。

九九を理解するための表がとても分かりやすいと好評「ビジュアルで解る」「子どもの時に欲しかった」 - Togetter @togetter_jpさんから

かつて大昔自分が小学生のころに丸暗記していた頃の表よりもはるかに掛け算の意味・概念そのものがわかりやすい表現のものが多数提案されており、「なぜ掛け算で面積が計算できるのか」なども量的・直感的に理解しながら覚えられると感じました。

たまたま自分の子どもにもそろそろ掛け算九九表が必要かなという時期になってきたので、一番よさそうなものを探していたところ、見た目としては下記の方が作られたレイアウトが最も見やすいと感じました。
(似たようなレイアウトの表は多数見つかったので、どなたがオリジナルなのかは調査が不十分なため申し訳ございません。問題があれば取り下げます。)

こちらはとても見やすく素晴らしいのですが、画像のままだったので好きな形に編集ができませんでした。自分で色をいじったり最大数を九九までだけでなく10x10とか20x20まで作ってみたかったので、PythonでExcel表として出力できるコードを書いてみました。

なお、Togetterのまとめ上は、最初にこういった図を提案されたのはこちらのツイートをされた@L_starさんのようです。シンプルな考え方なので、大昔にも同様のアイデアがあったかどうかまでは調査できていません。

Excelでできた掛算の概念がわかりやすい九九表をPythonで自動生成する

下記のコード中の「num」を自由に変更することで任意サイズの上記のタイプの九九表が自動生成されます。

MultiplyTable9x9.png

上図のようなExcelファイルの表を生成できるコードがこちらです。
XlsxWriterというExcelのファイルを出力できるライブラリを使っています。
Excel上でも好きなデザインとして編集しやすいように、セルだけで表現せず、掛け算の結果を表示するラベル部分はテキストボックスとして生成しています。

import xlsxwriter as excel

#作成したい掛算表の数の最大値(縦横同数)
num = 9
max_cell = sum(range(1,num+1))

# Excelのファイル準備
wb = excel.Workbook("MultiplyTable"+str(num)+"x"+str(num)+".xlsx")
ws = wb.add_worksheet(str(num)+"x"+str(num))

# セルのサイズを正方形に
for i in range(max_cell):
    ws.set_row(i, 40.5)
    ws.set_column(i,i, 6.13)

# セルの四方を囲む&文字色白
cell_format = wb.add_format(
    {'font_color': 'white',
    'font_size' : 20,
    'border' : 1,
    'bg_color' : '#E9E9E9'})

# 九九の表を作る
sum_i = 0
for i in range(1, num+1):
    sum_j = 0
    for j in range(1, num+1):
        v = i * j #九九の計算

        # 九九に相当する面積分各セルを数字で埋める
        for ii in range(0, i):
            for jj in range(0, j):
                ws.write(sum_j+jj, sum_i+ii, jj*i+ii+1, cell_format)

        # 1行目・1列目は色付き、2乗のマスは赤、それ以外は薄いグレーに設定    
        if sum_i == sum_j : f_color = '#EA5532'
        elif sum_i == 0 : f_color = '#00A95F'
        elif sum_j == 0 : f_color = '#187FC4'
        else : f_color = '#1A1A1A'

        # ラベル用テキストボックスの書式設定
        op = {
            'width': 48*i,
            'height': 54*j,
            'font': {'name': 'Arial','size': 40+(v/1.5), 'color' : f_color},
            'align': {'vertical': 'middle','horizontal': 'center'},
            'fill': {'none': True},
            'line': {'color': '#1A1A1A','width': 8}
            }

        # ラベル用テキストボックスの作成
        ws.insert_textbox(row = sum_j, col =  sum_i, text=str(v) , options=op)
        sum_j += j
    sum_i += i
wb.close()

出力されたファイルのダウンロード

出来上がったExcelやPDFのファイルのみ必要な方は下記からダウンロードをお願いします。これらは特にライセンスや著作権を主張するつもりはないのでパブリックドメインとして公開します。
9x9のExcel九九表  9x9のPDF九九表(A4サイズ)
10x10のExcel九九表 10x10のPDF九九表(A4サイズ)
20x20のExcel九九表 20x20のPDF九九表(A3サイズ)

投げ銭代わりに「いいね」やシェアなどしていただけると嬉しいです。

Acknowledgement

上記で紹介したツイートやTogetterまとめのほか、この形式の九九表を考えられた全ての皆さまに感謝します。

18
17
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
17