<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>ドレミファソラシド - プログラミングで遊ブログ</title>
	<atom:link href="https://lemon818.com/tag/%e3%83%89%e3%83%ac%e3%83%9f%e3%83%95%e3%82%a1%e3%82%bd%e3%83%a9%e3%82%b7%e3%83%89/feed/" rel="self" type="application/rss+xml" />
	<link>https://lemon818.com</link>
	<description>現役システムエンジニアが趣味でプログラミングする自由気ままなブログ</description>
	<lastBuildDate>Wed, 09 Jun 2021 15:07:58 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.1.3</generator>
<atom:link rel="hub" href="https://pubsubhubbub.appspot.com"/><atom:link rel="hub" href="https://pubsubhubbub.superfeedr.com"/>	<item>
		<title>【Vba】エクセルでピアノつくってみた！（猫ふんじゃったが演奏できます！）</title>
		<link>https://lemon818.com/excel-piano/</link>
		
		<dc:creator><![CDATA[Take]]></dc:creator>
		<pubDate>Wed, 09 Jun 2021 15:07:58 +0000</pubDate>
				<category><![CDATA[Excel]]></category>
		<category><![CDATA[BeepAPI]]></category>
		<category><![CDATA[vba]]></category>
		<category><![CDATA[ドレミファソラシド]]></category>
		<category><![CDATA[ピアノ]]></category>
		<guid isPermaLink="false">https://lemon818.com/?p=5792</guid>

					<description><![CDATA[Excel でピアノをつくってみました！！ &#160; &#160; &#160; これはこのブログが100記事記念ということですごいものを作ってみたい！と思って作っていました。 （ 作り終わった後にいろいろと調べてみ…]]></description>
										<content:encoded><![CDATA[<div class="sc_frame_wrap solid yellow">
<div></div>
<div class="sc_frame "><strong><span style="color: #000000;">Excel でピアノをつくってみました！！</span></strong></div>
</div>
<p>&nbsp;</p>
<p><img fetchpriority="high" decoding="async" src="https://lemon818.com/wp/wp-content/uploads/2021/06/piano.gif" alt="" width="1201" height="376" class="aligncenter wp-image-5793" /></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>これはこのブログが100記事記念ということで<span style="color: #000000;"><strong>すごいものを作ってみたい！</strong></span>と思って作っていました。</p>
<p>（ 作り終わった後にいろいろと調べてみると、Excel ピアノって世の中に出回ってるとしてすこしがっかりしましたが、、、）</p>
<p>&nbsp;</p>
<div>
<p>この記事では、<span style="color: #3366ff;"><strong>Excel のピアノの作り方について簡単に解説します。</strong></span></p>
<p>今回は Excel Vba というプログラミング言語で作成しました。</p>
<p>&nbsp;</p>
<p>注意書きですが<span style="color: #ff0000;"><strong>私はピアノがまったくわかっていない</strong></span>ので、Excel ピアノは作れるようになりますが、</p>
<p>もっと音楽が詳しい方はさらにいいものが作れると思います。</p>
<p>&nbsp;</p>
<p>もしよければ参考にしてみてください。</p>
<p>&nbsp;</p>
<p>また下記ボタンから「<strong>猫ふんじゃった</strong>」<strong>が演奏される Excel ファイルがダウンロードできます。</strong></p>
</div>
<p>興味があればぜひどうぞ！</p>
<p>&nbsp;</p>
<div>
<div class="button frame block green"><a class="midium" href="https://lemon818.com/wp/wp-content/uploads/2021/06/excelPiano_ver1.0.xlsm">Excel でピアノを演奏してみる！</a></div>
<p>&nbsp;</p>
<h2>Excel ピアノの作り方！</h2>
</div>
<p>Excel ピアノの作り方は下記二つです。</p>
<div class="sc_frame_wrap orange">
<div class="sc_frame ">
<div class="sc_frame_text">
<div class="sc_designlist ol square solid orange">
<ol>
<li>ピアノ用のExcelシートを準備</li>
<li>Excel Vba で ピアノを実装する</li>
</ol>
</div>
</div>
</div>
</div>
<p>&nbsp;</p>
<p>これらを順に説明します。</p>
<p>&nbsp;</p>
<h3>ピアノ用のExcelシートを準備</h3>
<p>まずExcel シートを下記の画像のように準備します。</p>
<p><img decoding="async" src="https://lemon818.com/wp/wp-content/uploads/2021/06/excel-piano3png.png" alt="" width="1185" height="603" class="aligncenter  wp-image-5798" srcset="https://lemon818.com/wp/wp-content/uploads/2021/06/excel-piano3png.png 1363w, https://lemon818.com/wp/wp-content/uploads/2021/06/excel-piano3png-300x153.png 300w, https://lemon818.com/wp/wp-content/uploads/2021/06/excel-piano3png-1024x521.png 1024w, https://lemon818.com/wp/wp-content/uploads/2021/06/excel-piano3png-768x391.png 768w" sizes="(max-width: 1185px) 100vw, 1185px" /></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>これは実際にこのページからダウンロードできる Excel を見たほうが速いと思うので、説明は簡略化します。</p>
<p>しかし注意点は<span style="color: #ff0000;"><span style="color: #000000;">このシートには</span><strong>非表示列<span style="color: #000000;">（上記画像の</span>赤枠<span style="color: #000000;">の箇所</span></strong><span style="color: #000000;"><strong>）</strong></span></span>がある点です。</p>
<p>&nbsp;</p>
<div class="sc_frame_wrap block blue">
<div class="sc_frame_title">非表示列について</div>
<div class="sc_frame ">
<div class="sc_frame_text">
<div class="sc_designlist ol square solid blue">
<ol>
<li>左（A列）の<span style="color: #ff0000;"><strong>赤枠</strong></span>・・・「ドレミ」を出すために必要な周波数</li>
<li>上部（3行目）の<span style="color: #ff0000;"><strong>赤枠</strong></span>・・・今のセルの位置から0の数をカウントしている（０が10回連続したら終了する処理を実装しているため）</li>
<li>上部（4行目）の<span style="color: #ff0000;"><strong>赤枠</strong></span>・・・水色の表に値が入っているセルの行位置を取得</li>
</ol>
</div>
</div>
</div>
</div>
<p>&nbsp;</p>
<h3>Excel Vba で ピアノを実装する</h3>
<p>今回 Excel ピアノを実装する上で下記のような3つのプロシージャ（関数）を用意しました。</p>
<div class="sc_frame_wrap orange">
<div class="sc_frame ">
<div class="sc_frame_text">
<div class="sc_designlist ol square solid orange">
<ol>
<li>selectCol プロシージャ・・・いま読み込んでいる列を表示させる処理</li>
<li>myBeepプロシージャ・・・ BeepAPI で音を出す（引数 vioce が周波数の値となる）</li>
<li>pianoプロシージャ・・・Excel ピアノのメインの処理、シートの楽譜情報から音を出す処理までをまとめています</li>
</ol>
</div>
</div>
</div>
</div>
<p>&nbsp;</p>
<p>これはいまは意味がわからなくても大丈夫です。</p>
<p>(　´_ゝ｀)ﾌｰﾝって感じでさらーっと流してもらえればと思います。</p>
<p>&nbsp;</p>
<h4>selectCol プロシージャ・・・いま読み込んでいる列を表示させる処理</h4>
<p>いま読み込んでいる列を表示させる処理というのは</p>
<p>下記のように列が順番に選択されてくる処理を意味します。</p>
<p>&nbsp;</p>
<p><img decoding="async" src="https://lemon818.com/wp/wp-content/uploads/2021/06/piano.gif" alt="" width="1025" height="321" class="aligncenter wp-image-5793" /></p>
<p>&nbsp;</p>
<p>これは3列から順に列を選択していくだけのすごく簡単な処理です。</p>
<p>たとえば Columns("C:C").Select とすると C列が選択されます。</p>
<p>それをC,D,E .... と順にずらしていくということです。</p>
<p>&nbsp;</p>
<h4>myBeepプロシージャ・・・ BeepAPI で音を出す</h4>
<p>今回ピアノの「ドレミファソラシド」を鳴らすために <strong>BeepAPI</strong> というAPI を用いりました。</p>
<p>このAPIではパソコンのBeep音（パソコンのピーとかブーってなる音）を鳴らすことができます。</p>
<p>&nbsp;</p>
<p>BeepAPIを用いるには、はじめに下記のような<strong>おまじない</strong>を書く必要があります（意味はわからなくても動きます）。</p>
<div>
<pre class="crayon-plain-tag">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)</pre>
</div>
<p>&nbsp;</p>
<p>注意点ですが、これをつかうときは<span style="color: #ff0000;"><strong>「標準プロシージャ」でプログラムを実装する必要があります。</strong></span></p>
<p>&nbsp;</p>
<p><img loading="lazy" decoding="async" src="https://lemon818.com/wp/wp-content/uploads/2021/06/excel-piano2.png" alt="" width="339" height="119" class="aligncenter size-full wp-image-5797" srcset="https://lemon818.com/wp/wp-content/uploads/2021/06/excel-piano2.png 339w, https://lemon818.com/wp/wp-content/uploads/2021/06/excel-piano2-300x105.png 300w" sizes="auto, (max-width: 339px) 100vw, 339px" /></p>
<p>&nbsp;</p>
<p>そして実際にBeepAPI から「ドレミファソラシド」を出すには周波数と鳴らす時間間隔（今回は<strong>200</strong>と設定）の設定が必要です。</p>
<p>&nbsp;</p>
<div class="sc_frame_wrap block orange">
<div class="sc_frame_title">ポイント！</div>
<div class="sc_frame ">
<div class="sc_frame_text"><strong>BeepAPI（周波数、時間）</strong>と指定することで ビープ音を鳴らすことができます！</div>
</div>
</div>
<p>&nbsp;</p>
<p>なおBeepAPI で「ドレミ」を使う上で下記の周波数表を使いました。</p>
<p>&nbsp;</p>
<table style="border-collapse: collapse; width: 26.0601%;">
<tbody>
<tr>
<td style="width: 12.2205%; text-align: center; background-color: #66c9fa;"><strong>周波数</strong></td>
<td style="width: 13.8396%; text-align: center; background-color: #66c9fa;"><strong>音</strong></td>
</tr>
<tr>
<td style="width: 12.2205%; text-align: center;"><strong>262</strong></td>
<td style="width: 13.8396%; text-align: center;"><strong>ド</strong></td>
</tr>
<tr>
<td style="width: 12.2205%; text-align: center;"><strong>264</strong></td>
<td style="width: 13.8396%; text-align: center;"><strong>レ</strong></td>
</tr>
<tr>
<td style="width: 12.2205%; text-align: center;"><strong>330</strong></td>
<td style="width: 13.8396%; text-align: center;"><strong>ミ</strong></td>
</tr>
<tr>
<td style="width: 12.2205%; text-align: center;"><strong>392</strong></td>
<td style="width: 13.8396%; text-align: center;"><strong>ファ</strong></td>
</tr>
<tr>
<td style="width: 12.2205%; text-align: center;"><strong>440</strong></td>
<td style="width: 13.8396%; text-align: center;"><strong>ラ</strong></td>
</tr>
<tr>
<td style="width: 12.2205%; text-align: center;"><strong>493</strong></td>
<td style="width: 13.8396%; text-align: center;"><strong>シ</strong></td>
</tr>
<tr>
<td style="width: 12.2205%; text-align: center;"><strong>523</strong></td>
<td style="width: 13.8396%; text-align: center;"><strong>ド</strong></td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<p>※ 周波数については<a href="http://palm.org/f_pal/f_pal_special/sp011_pyrol_scale.html"><span>ドレミファ音階のHz対応表</span></a>を参考にしました。</p>
<p>&nbsp;</p>
<p>たとえば「ド」を鳴らそうとします。</p>
<p>その場合は BeepAPI(262, 200)のように呼び出してやればOKってことです！</p>
<p>&nbsp;</p>
<h4>pianoプロシージャ・・・Excel ピアノのメインの処理</h4>
<p>piano プロシージャとは前章で説明しました、下記処理をまとめて実行する処理（いわばメイン処理）です。</p>
<div class="sc_designlist ol square solid  blue">
<ol>
<li>selectCol プロシージャ・・・ いま読み込んでいる列を表示させる処理</li>
<li>myBeepプロシージャ・・・ BeepAPI で音を出す（引数 vioce が周波数の値となる）</li>
</ol>
</div>
<p>&nbsp;</p>
<p>まとめただけなので、特に説明することもないので割愛します。。</p>
<p>&nbsp;</p>
<h4>Excel ピアノのソースコード</h4>
<p>&nbsp;</p>
<p>プログラミングのソースコードは下記になります。</p>
<div>
<pre class="crayon-plain-tag">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) &lt; 10 And Cells(CELL_CHECK_ROW, i) &lt;&gt; ""
        
        Call selectCol(i)

        voiceRow = Cells(CELL_VOICE_ROW, i).Value + CELL_VOICE_ROW
        
        If voiceRow &lt;&gt; 0 And voiceRow &lt;&gt; "" 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 &amp; ":" &amp; buf).Select
    
End Sub

Private Sub myBeep(voice)

    Call BeepAPI(voice, TIME_INTERVAL)

End Sub</pre>
</div>
<p>&nbsp;</p>
<div>
<div>
<h2>最後に</h2>
<p>&nbsp;</p>
<p>いかがでしたでしょうか？</p>
<p>この記事では、<span style="color: #3366ff;"><strong>Excel のピアノの作り方について簡単に解説しました。</strong></span></p>
</div>
<p>&nbsp;</p>
<p>この Excel でぜひいろんな曲を作って遊んでいただければと思います。</p>
<div>
<p>この記事がいいなと思った方は SNS で共有いただければ嬉しいです。</p>
</div>
<p>&nbsp;</p>
<p>また100記事いけたのは読者の皆様からおかげです。</p>
<p>これからは Excel の情報以外にもさまざまな役に立つ情報を発信していきたいと思います。</p>
<div>
<p>ではでは。</p>
</div>
</div>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
