これはこのブログが100記事記念ということですごいものを作ってみたい!と思って作っていました。
( 作り終わった後にいろいろと調べてみると、Excel ピアノって世の中に出回ってるとしてすこしがっかりしましたが、、、)
この記事では、Excel のピアノの作り方について簡単に解説します。
今回は Excel Vba というプログラミング言語で作成しました。
注意書きですが私はピアノがまったくわかっていないので、Excel ピアノは作れるようになりますが、
もっと音楽が詳しい方はさらにいいものが作れると思います。
もしよければ参考にしてみてください。
また下記ボタンから「猫ふんじゃった」が演奏される Excel ファイルがダウンロードできます。
興味があればぜひどうぞ!
Excel ピアノの作り方!
Excel ピアノの作り方は下記二つです。
- ピアノ用のExcelシートを準備
- Excel Vba で ピアノを実装する
これらを順に説明します。
ピアノ用のExcelシートを準備
まずExcel シートを下記の画像のように準備します。
これは実際にこのページからダウンロードできる Excel を見たほうが速いと思うので、説明は簡略化します。
しかし注意点はこのシートには非表示列(上記画像の赤枠の箇所)がある点です。
- 左(A列)の赤枠・・・「ドレミ」を出すために必要な周波数
- 上部(3行目)の赤枠・・・今のセルの位置から0の数をカウントしている(0が10回連続したら終了する処理を実装しているため)
- 上部(4行目)の赤枠・・・水色の表に値が入っているセルの行位置を取得
Excel Vba で ピアノを実装する
今回 Excel ピアノを実装する上で下記のような3つのプロシージャ(関数)を用意しました。
- selectCol プロシージャ・・・いま読み込んでいる列を表示させる処理
- myBeepプロシージャ・・・ BeepAPI で音を出す(引数 vioce が周波数の値となる)
- pianoプロシージャ・・・Excel ピアノのメインの処理、シートの楽譜情報から音を出す処理までをまとめています
これはいまは意味がわからなくても大丈夫です。
( ´_ゝ`)フーンって感じでさらーっと流してもらえればと思います。
selectCol プロシージャ・・・いま読み込んでいる列を表示させる処理
いま読み込んでいる列を表示させる処理というのは
下記のように列が順番に選択されてくる処理を意味します。
これは3列から順に列を選択していくだけのすごく簡単な処理です。
たとえば Columns("C:C").Select とすると C列が選択されます。
それをC,D,E .... と順にずらしていくということです。
myBeepプロシージャ・・・ BeepAPI で音を出す
今回ピアノの「ドレミファソラシド」を鳴らすために BeepAPI というAPI を用いりました。
このAPIではパソコンのBeep音(パソコンのピーとかブーってなる音)を鳴らすことができます。
BeepAPIを用いるには、はじめに下記のようなおまじないを書く必要があります(意味はわからなくても動きます)。
1 2 3 |
Declare Function BeepAPI Lib "kernel32.dll" Alias "Beep" _ (ByVal dwFreq As Long, ByVal dwDuration As Long) As Long Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) |
注意点ですが、これをつかうときは「標準プロシージャ」でプログラムを実装する必要があります。
そして実際にBeepAPI から「ドレミファソラシド」を出すには周波数と鳴らす時間間隔(今回は200と設定)の設定が必要です。
なおBeepAPI で「ドレミ」を使う上で下記の周波数表を使いました。
周波数 | 音 |
262 | ド |
264 | レ |
330 | ミ |
392 | ファ |
440 | ラ |
493 | シ |
523 | ド |
※ 周波数についてはドレミファ音階のHz対応表を参考にしました。
たとえば「ド」を鳴らそうとします。
その場合は BeepAPI(262, 200)のように呼び出してやればOKってことです!
pianoプロシージャ・・・Excel ピアノのメインの処理
piano プロシージャとは前章で説明しました、下記処理をまとめて実行する処理(いわばメイン処理)です。
- selectCol プロシージャ・・・ いま読み込んでいる列を表示させる処理
- myBeepプロシージャ・・・ BeepAPI で音を出す(引数 vioce が周波数の値となる)
まとめただけなので、特に説明することもないので割愛します。。
Excel ピアノのソースコード
プログラミングのソースコードは下記になります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
Declare Function BeepAPI Lib "kernel32.dll" Alias "Beep" _ (ByVal dwFreq As Long, ByVal dwDuration As Long) As Long Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Const TIME_INTERVAL = 200 Const CELL_START_COL = 4 Const CELL_CHECK_ROW = 3 Const CELL_VOICE_ROW = 4 Const CELL_START_ROW = 5 Sub piano() Dim i Dim voice, voiceRow i = CELL_START_COL While Cells(CELL_CHECK_ROW, i) < 10 And Cells(CELL_CHECK_ROW, i) <> "" Call selectCol(i) voiceRow = Cells(CELL_VOICE_ROW, i).Value + CELL_VOICE_ROW If voiceRow <> 0 And voiceRow <> "" Then voice = Cells(voiceRow, 1).Value Call myBeep(voice) Else Sleep TIME_INTERVAL End If i = i + 1 Wend End Sub Private Sub selectCol(i) buf = Cells(1, i).Address(True, False) buf = Left(buf, InStr(buf, "$") - 1) Columns(buf & ":" & buf).Select End Sub Private Sub myBeep(voice) Call BeepAPI(voice, TIME_INTERVAL) End Sub |
最後に
いかがでしたでしょうか?
この記事では、Excel のピアノの作り方について簡単に解説しました。
この Excel でぜひいろんな曲を作って遊んでいただければと思います。
この記事がいいなと思った方は SNS で共有いただければ嬉しいです。
また100記事いけたのは読者の皆様からおかげです。
これからは Excel の情報以外にもさまざまな役に立つ情報を発信していきたいと思います。
ではでは。