お世話になります。 ちょっと長い説明になりますが、宜しくお願いします。
音楽に使うダイアトニックコードの早見表を作っています。
_│_A_│_B_│_C_│_D_│_E_│_F_│_G_│_H_│_I_│_J_│_K_│_L_│_M_│_N_│
1│ _1_ _2_ _3_ _4_ _5_ _6_ _7_ _8_ _9_ 10_ 11_ 12_ 2│ │ C │ │ D │ │ E │ F │ │ G │ │ A │ │ B │ 3│ # │B# │C# │C##│D# │ │E# │F# │F##│G# │G##│A# │ │ 4│ b │___│Db_│___│Eb_│___│___│Gb_│___│Ab_│___│Bb_│Cb_│
名前の定義: C2:N2 →「ナチュラル」 C3:N3 →「シャープ」 C4:N4 →「フラット」 (従って、5行の「b」は本来「♭(フラット記号)」です。) C2:N4 →「鍵盤」
ピアノの鍵盤1オクターヴ分の12音階を簡易的に表したものです。
_│_A_│_B_│_C_│_D_│_E_│_F_│_G_│_H_│_I_│_J_│ 5│ 6│___ ___ _T_ _2_ _3_ _S_ _D_ _6_ _7_ 7│___│___│ │___│___│___│___│___│___│___│ 8│
A7には入力規則により 「C,D,E,F,G,A,B」の何れかを入力します。 B7は同様に「#,b」または空白です。
=A7&B7の値をキーとして使用します。 但し「E#」「Fb」「B#」「Cb」というキーはありません。 其々「F 」「E 」「C 」「B 」と同音だからです。
さて、 A7とB7に入力規則に従って何かしらを入力すると、 D7:J7の各セルに「鍵盤」から対応する音階名を拾ってくる という仕組を考えており、 今回求めるのは、D7:J7の各セルに入る数式です。
D7は、=A7&B7 E7は「鍵盤」内のD7と同じ値のある場所から、 2つ右隣の列内にある、次のアルファベット(A7="C"なら"D")を含む 値を選んでくる。 F7は、更に2つ右隣り列から、その次のアルファベット(A7="C"なら"E")を含む値 G7は、更に1つ右隣り列から、その次のアルファベット(A7="C"なら"F")を含む値 H7は、更に2つ右隣り列から、その次のアルファベット(A7="C"なら"G")を含む値 I7は、更に2つ右隣り列から、その次のアルファベット(A7="C"なら"A")を含む値 J7は、更に2つ右隣り列から、その次のアルファベット(A7="C"なら"B")を含む値 ※「鍵盤」の13列目は1列目へ戻ります。
例:D7=A7&B7="Ab"なら E7="Bb"、F7="C"、G7="Db"、H7="Eb"、I7="F"、J7="G"となります。
参考になるか、 C1:N1にある1〜12の数字をD8:J8に拾い出すとすれば、 D8=MATCH($A$7,ナチュラル,0)+IF(B7="#",1,IF(B7="b",-1,0)) E8=ROUND(MOD(D$8+2,12.5),0) F8=ROUND(MOD(E$8+2,12.5),0) G8=ROUND(MOD(F$8+1,12.5),0) H8=ROUND(MOD(G$8+2,12.5),0) I8=ROUND(MOD(H$8+2,12.5),0) J8=ROUND(MOD(I$8+2,12.5),0) で表せます。
御意見宜しくお願いします。
++++++++++++++++++++ OS ⇒Windows 98 Version⇒Excel 2000 ++++++++++++++++++++ |