第二弾、スクリーンと音楽  
アクセス講座2
終了!

第1回|第2回|第3回|第4回|第5回
第6回|第7回(最終回)

第二弾 開講決定!

スクリーンと音楽

ダンス競技会の進行状況をスクリーンに投影することと音楽演奏をすることの2つの目的でアクセスを構築しました。 名付けて「スクリーンと音楽」としました。多くの競技会場で稼働している様子を見るととてもうれしくなります。
 講座では、「スクリーンと音楽」のアクセスシステムを余すところなく公開し、仕組み・考え方・進め方等をザックリと解説していきます。 1か月に2回程度の不定期開催とし、10月頃には終了する予定です。
 なおナベシステムは、Windows11への移行に伴い ディレクトリを変更 しました。OS、 ACCESS とも64bitバージョンです。
 第1回では、この「スクリーンと音楽」をご自分のPCにセットアップし、動かすことを予定しています。

短い動画をご覧ください。

Top

第二弾、スクリーンと音楽
アクセス講座2

第1回 04/26(金)

セットアップ
画像

セットアップ

ダウンロードしてコピペします。

  • ワンドライブ上にフォルダー「スクリーンと音楽」が入ったフォルダー「ACCESS講座2」をアップロードしてあります。 ダウンロード を開いて「↓ダウンロード」を押すとフォルダーごとダウンロードできます。完了後、展開します。
  • Cドライブを開き、そこにフォルダー「ACCESS講座2」を放り込んでください。
  • ディレクトリは、"C:\ACCESS講座2\スクリーンと音楽"となります。

動かしてみましょう。

  • フォルダー「スクリーンと音楽」を開くと講座の題材である「ACCESS講座2スクリーンと音楽.accdb」があります。
  • 「ACCESS講座2スクリーンと音楽.accdb」は、フォルダー「ACCESS講座2」で動くように「関東甲信越スクリーンと音楽.accdb」 のリンク先を修正して名前を変えたものです。それ以外は、"C:\NABE\関東甲信越\スクリーンと音楽"のコピーです。
  • クラウドを介すとセキュリティーにより拒否されることがあります。そのような場合、右クリックメニューからプロパティで解除してください。 何もアクセスファイルに限ったとではありません。これで前に進めない方もおられるようです。
  • 問題なければこれで「ダブルクリック」か「右クリックメニュー」から開くで開けるはずです。

起動画面です。

  • めでたく開けたなら、[次へ]を押して動くかどうか、またどのように動くかお試しください。
  • スクリーンのフォントはフォルダーに同梱の「jhei00s.ttc」に設定してあります。遠くからでも見やすい極太のフォントです。
    どうやら、最近のPCからはなくなったようです。状況を見てインストールしてください。
  • 他のフォルダーやファイルもくまなくご覧になってください。壊しても問題はないし、いくらでもやり直せます。
  • 第2回は、他のナベシステムとの連携やリンク等の構造などを解説していきます。

Top

第二弾、スクリーンと音楽
アクセス講座2

第2回 05/17(金)

連携とリンク
画像

連携とリンク

他のナベシスムと連携しています。

開発ページのシステム概要図 をご覧ください。「競技進行システム」は名前を変えて「スクリーンと音楽」、「進行支援システム」は「進行予定表作成」 となっています。
"Timetable.xlsx"は「進行予定表作成」から必要な情報を出力したエクセルファイルです。

リンクテーブルマネージャー

    "ACCESS講座2スクリーンと音楽.accdb"のテーブルをご覧ください。矢印のあるテーブルがリンクテーブルです。 ポイントするとリンク先が表示されます。図は右クリックメニューからリンクテーブルマネージャーを開き編集ボタンを 押した状態です。リンク先を編集できます、新しい機能です。以前は編集はできずインポートをやり直すしか選択肢はありませんでした。

次にフォルダー「accdb」の"スクリーンと音楽.accdb"のテーブルをご覧ください。 このファイルはナベシステムのそのままのファイルです。これを加工して"ACCESS講座2スクリーンと音楽.accdb"としました。 リンク先の違いをご確認ください。リンク先がないとエラーとなります。

リンクテーブルを作成する

テーブル画面を開いて「外部データー」「新しいデータソース」を辿るといろいろな選択肢があります。 テーブルをインポートしたりリンクテーブルを作成できます。エクセルファイルやCSVファイルもインポートやリンクを作成できます。 この説明にかかわらず他の部分もいろいろ触ってください。

検索と置換

検索と置換はほぼ同じです。置換で置換しなければ検索となります。 これから説明するのは"C:\NABE"の元のファイルを"C:\ACCESS講座2"に置換する方法です。
プログラムコードは理解しようとせずにただの文字列としてとらえてください。わからないままでよろしいです。
  • 置換しようとする文字列を反転させて選択します。
  • 編集を押下。次いで置換を押下。
  • 置換後の文字列を入力。
  • 対象を選択。置換のボタンを押下します。
対象は置換する範囲のことです。プロシージャからプロジェクトまでのレベルがあります。
「すべて置換」のボタンを押すと一斉に置換できます。決定しなければキャンセルで元に戻せます。
決定してしまった後でももう一度置換することで復活できます。

図は置換後の"C:\ACCESS講座2\スクリーンと音楽.accdb"のコードです。
これで第2回を終わります。コピーとかバックアップをとって後戻りもしながらいじってください。 もしアクセスを壊してしまってどうにもならなくなったらMS365を入れなおせば解決します。
次回、第3回はフォーム「スクリーン」の解説を予定しています。

Top

第二弾、スクリーンと音楽
アクセス講座2

第3回 06/01(金)

スクリーン
画像

スクリーン

frm_表示NOW

スクリーンに表示または投影する画面です。ナビゲーションボタンはアクセス標準では小さいので自作したものを流用しています。 単純なように見えるかもしれませんが結構複雑です。
まずは大まかに二つのフォームとナビゲーションボタンについて説明します。

frm_表示NOW

    スクリーンに表示または投影する画面のデザインビューです。サブフォーム「frm_表示NEXT」が埋め込んであります。
    以下のように一工夫しています。
    • 二つのフォームは同じレコードソースです。それぞれ「NOW」「NEXT」とそれらしくしてあります。
    • プロパティのリンクをご覧ください。「NEXT」は、-1ちがいで次の区分とリンクしています。

サブフォーム

    サブフォーム「frm_表示NEXT」のデーターシートビューです。デザインビューからクエリビルダー開き、表示できます。 IDとID_が-1ちがいになっていることを確認ください。これはテーブル作成クエリを使用しています。

テーブル作成クエリ

    テーブル作成クエリ「qry_Timetable」のデザインビューです。 "ID_:ID-1"とすることで実現できます。実行すると"tbl_Timetable_NEW"が新しく作成されます。

ナビゲーションボタン

    左からコマンドボタン「先頭へ」「前へ」「次へ」「最終へ」です。

プロシージャ

    カレントレコードの位置に応じて使用の可不可を制御しています。デザインビューから実際のプロシージャをご覧ください。
    第3回アクセス講座2を終了します。

Top

第二弾、スクリーンと音楽
アクセス講座2

第4回 06/26(水)

スクリーン(続き)
画像

スクリーン

サウンドの再生と停止

通常、CDプレーヤーは、再生・停止・一時停止等のボタンがありますが、「スクリーンと音楽」ではポーズは不必要と判断し、一個のボタンで再生と停止を行います。
画像ファイルを用意し、ボタンの操作で表示される画像を制御しています。練習・デモ・表彰のボタンも同様です。

変数の宣言

「変数」を使用しています。変数を宣言することによって変数に代入することができます。類似した「定数」「関数」「引数(ひきすう)」があります。
難しく考えず漠然と字のごとくと理解して実践で実感したほうがよいでしょう。

プログレスバー

自前でプログレスバーを作成し、進捗状況を表示しています。「ボックス8」の背景色をグレー、「ボックス6」の背景色を青にして幅を変化させています。
また 参照設定の ActiveX から Microsoft ProgressBar Control を 挿入することでより簡単にプログレスバーを作成できます。

Copilot

Windows11には「Copilot」というAIを使用した質問に答えてくる機能が備わっています。

Copilotに質問

Copilot に mciSendString を質問してみました。

自分
access vba mciSendString

Copilot

mciSendString関数は、メディアコントロールインターフェイス (MCI) を介してマルチメディアデバイスを制御する強力なツールです。この関数を使用すると、MCIデバイスにコマンド文字列を送信して、音楽ファイルの再生、停止、一時停止、再開などの操作が可能になります。まるでコンピュータに「音楽を再生してね」と伝えているようなものですね! 🎵

以下にmciSendStringの使い方を説明します。

mciSendStringとは?
mciSendStringは、Windows API(アプリケーションプログラミングインターフェース)の一部です。VBAの組み込み関数ではなく、Windows内で利用できる関数です。
Windows APIは、Windowsのさまざまな機能と機能へのアクセスを提供する関数の集合です。これらの関数をVBAから呼び出すことで、音楽再生やキーボード入力のキャプチャなど、さまざまな機能を利用できます。
mciSendStringの使い方
まず、mciSendString関数を使用することを宣言する必要があります。Windowsが32ビットか64ビットかによって宣言が異なります。


以下は両方の宣言の例です:
' 64ビットWindows用
Private Declare PtrSafe Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" _
    (ByVal lpstrCommand As String, ByVal lpstrReturnString As String, _
    ByVal uReturnLength As Long, ByVal hwndCallback As Long) As Long

' 32ビットWindows用
Private Declare Function mciSendString Lib "winmm" Alias "mciSendStringA" _
    (ByVal lpstrCommand As String, ByVal lpstrReturnString As String, _
    ByVal uReturnLength As Long, ByVal hwndCallback As Long) As Long

適切な宣言をVBAモジュールの先頭に配置してください。
コマンド文字列と操作:
mciSendStringを使用して、特定のコマンド文字列をMCIデバイスに送信して制御します。
例:
ファイルを再生する:Call mciSendString("play " & file, "", 0, 0)
再生を停止する:Call mciSendString("stop " & file, "", 0, 0)
一時停止する:Call mciSendString("pause " & file, "", 0, 0)
一時停止から再開する:Call mciSendString("resume " & file, "", 0, 0)

「スクリーンと音楽」は当初は32bit で作成しその後64bit にバージョンアップしています。バージョンアップした「スクリーンと音楽」は64bitへの修正プログラムを含んでいます。
「frm_表示NOW」のコーディングは簡単ではありません。完成したコードを見るとよくぞここまで作ったなと自分でも思います。
コーディングを解析して理解するのに本人でさえ後で見直すと困難です。まして他人が理解するのはもっと困難です。コーディングして動かしてみるとようやく理解できます。
最初から一発でコーディングできたわけでなく、グーグルでググりながら、また「F1」キーから Visual Basic for Applications で調べながら 時間をかけて完成にこぎつけています。そして今ではCopilotに質問すると良い答えが返ってきます。

第4回アクセス講座2を終了します。

Top

第二弾、スクリーンと音楽
アクセス講座2

第5回 07/12(金)

音楽ファイルの指定
画像

音楽ファイルの指定

音楽ファイルの格納場所

フォルダー「C」には種目Chachachaが、フォルダー「C_AB」にはアマチュアAB級用の種目Chachachaが入っています。以下同様です。
この構成は大会用音楽CDを拝借した新潟のままのとしています。しかし、競技区分別に指定できるのでフォルダーは種目のみとして大会全体で演奏する音楽ファイルを指定する 方法がよろしいかと思います。

音楽ファイルと .datファイル

図はフォルダー「C_PRO」を開いたところです。
ファイルは演奏順を指定するために「01」から始めます。音楽ファイルを変更あるいは追加できます。99個まで可能となります。

変数の宣言

標準モジュール「音楽ファイルの指定」をご覧ください。
音楽ファイル.wmaの個数とカウント用の.datファイルの個数を宣言しています。
Functon stMusicAD は最終的に演奏する音楽ファイルのファィル名とディレクトリを取得します。
(例)"C:\ACCESS講座2\スクリーンと音楽\MusicFiles\C_PRO\04.wma"

ディレクトリの指定

strFolderName は競技区分と種目に応じて楽ファイルが格納されているフォルダー名を取得します。

音楽ファイルの演奏順

仕組みはこうです。datファイルの個数が演奏するwmaファィル名となります。一曲演奏が終わるごとにdatファイルを一個加算して次に演奏するwmaのファィル名となります。
wmaファイルの個数に達したら datファイルを削除して最初の 01.wma から演奏を始めます。この仕組みはPCの電源を入れ直しても次の曲から始まります。

ランダムの考え方

一口にランダムとか言いますが、いざ実践しようとすると奥深いものがあります。
次回はランダムの考え方についても触れながら「進行編集」を解説したいと思います。

第5回アクセス講座2を終了します。

Top

第二弾、スクリーンと音楽
アクセス講座2

第6回 08/12(月)

進行編集
画像

進行編集

新規取込

チェック「新規取込」にチェックを入れてコマンドボタン「進行編集」を押すとメッセージ「新規取込の確認」が表示されます。[OK]を押すと新規データーが取り込まれます。作成時かやり直すときに使用します。
チェック「新規取込」にチェックを入れずにコマンドボタン「進行編集」を押すとフォーム「進行編集」が開きます。

プロシージャを示します。
"qry_Timetable"は、テーブル作成クエリです。

実行するとテーブル「tbl_Timetable_NEW」が作成されます。

作成されたテーブル「tbl_Timetable_New」はバックエンドとリンクしています。
「tbl_Timetable」は、「進行予定表作成」から出力したエクセル「Timetable.xlsx」とリンクしています。

エクセル「Timetable.xlsx」は、フォルダー「Timetable」に「進行予定表作成」からコピペします。

編集

変更が生じた場合や当日の同点決勝に対応するようにコマンドボタンを配置しています。
画像

同点処理

同点決勝が発生したら同点決勝を行うコマンドボタン「同点処理」を押します。
表示されるメッセージにしたがって[OK]ボタンを押します。

コマンドボタン「同点処理」の色がピンク色に変わります。

挿入先のコマンドボタン「同点処理」を押します。

挿入されました。
画像
  • プロシージャについてはデザインビューからご覧ください。
    大まかな流れは、まず同点処理をする行をコピーします。同点決勝をする場所を決めてIDを操作して行を追加して貼り付けます。
  • コマンドボタン「区分編集」は競技以外の進行区分を複数行入力を可能とします。
  • やり直す場合は、追加した同点決勝を削除してから同点処理を再度行います。

種目の演奏順

種目の演奏順は、「種目」に基づいてフォルダー「MusicFiles」から取込まれます。 フォルダーの中はそれぞれの種目や競技区分のフォルダーがあります。詳しくは第5回をご覧ください。
演奏のたびに種目が変わりフォルダーも変わります。したがいましてランダムに取り込むことはほぼ無意味と言えます。 それよりもこの仕組みのように満遍なく巡回して演奏する考えのほうが良いと思います。
画像

ランダムについての考察

ランダムについてのもう少し次回の講座で述べたいと思います。

第6回アクセス講座2を終了します。

Top

第二弾、スクリーンと音楽
アクセス講座2

第7回(最終回) 09/13(金)

ランダムについての考察
画像

ランダムについての考察

Copilotに質問してみました。

自分
自分 が送信しました:
ランダムについて教えてください。
Copilot
回答を生成しています…

Copilot が送信しました:
もちろん、喜んでお手伝いします!ランダムについてお話しましょうね。🌟

「ランダム」は、確率論や統計学などでよく使われる言葉です。具体的には次のような意味があります1:

無作為にすること:何かを完全に偶然に任せること。手当たり次第にすること。例えば、ランダムに曲を再生すると、どの曲から始まるかわからないですよね。
標本をとる際の無意識性:特に確率論や統計学の文脈で使われます。標本を取る際に意志や感情を交えずに行うことを指します。つまり、規則性や目的を考慮せずにデータを選ぶことです。
例文をいくつか見てみましょうね:

「午前中は一定方向に流れていたのが、今はランダムになっている。」(出典:神野オキナ『あそびにいくヨ! 第05巻』)
「どちらが勝つか全くランダムなゲームも面白くありませんし、勝敗がほとんど決まっているゲームもつまらない。」(出典:茂木健一郎『「脳」整理法』)
類似の意味を持つ言葉としては、「無作為」「任意」「手当たり次第」「不規則」「無秩序」などがあります。

もしさらなる質問や詳細を知りたいことがあれば、どうぞお聞きくださいね!😊

つまり… の後に続く、「規則性や目的を考慮せずにデーターを選ぶこと」に要約されています。
言い換えるとランダム以外に目的があったらそれは完全なランダムではなく、条件(目的)付きのランダムと考えたほうがいいでしょう。

次に「VBA」でRnd 関数を調べてみました。ご覧ください。
Learn  VBA 
Rnd 関数
[アーティクル]
2023/04/07
8 人の共同作成者
この記事の内容
構文
戻り値
注釈
例
関連項目
擬似乱数を含む Single を 返します。

構文
Rnd [ (数値) ]

省略可能な Number引数 は、 単一 または任意の有効な 数値式です。

戻り値
数値が	Rnd が返す値
0 より小さい	シードとして Number を使用して、毎回同じ 数値 を指定 します。
0 より大きい	擬似ランダム シーケンス内の次の数値。
0 に等しい	最近生成された乱数。
省略	擬似ランダム シーケンス内の次の数値。
注釈
Rnd 関数は、0 以上 1 未満の値を返します。

Number の値は、Rnd が擬似乱数を生成する方法を決定します。

所定の初期シードの場合、同じ番号シーケンスが生成されます。これは、Rnd 関数を連続して呼び出すたびに、シーケンス内の次の値のシードとして、前の値が使用されるためです。

Rnd を呼び出す前に、引数を指定せずに Randomize ステートメントを使用して、システム タイマーに基づくシードを使用して乱数ジェネレーターを初期化します。

所定の範囲でランダムな整数を生成するには、次の式を使用します。

VB

コピー
Int((upperbound - lowerbound + 1) * Rnd + lowerbound)

ここで、upperbound には範囲の上限の値を指定し、lowerbound には範囲の下限の値を指定します。

 注意

乱数のシーケンスを繰り返す場合は、数値の引数を指定した Randomize を使用する直前に、負の引数を指定した Rnd を呼び出します。 Number に同じ値で Randomize を使用しても、前のシーケンスは繰り返されません。

例
この例では、Rnd 関数を使用して、1 から 6 までのランダムな整数を生成します。

VB

コピー
Dim MyValue As Integer
MyValue = Int((6 * Rnd) + 1)    ' Generate random value between 1 and 6.

例を実行してみましょう。

    一番下の例、Int((6 * Rnd) + 1) を MsgBox に組み込んで実行してみましょう。
    Access を開いてフォームを作成、コマンドボタンを配置してクリック時にイベントプロシージャを書きます。

コード

    コードの動作を確かめたり、説明をするのに簡単な方法です。
    Int((6 * Rnd) + 1) の部分を Rnd に置き換えたりして実感なさってください。

実行

    コマンドボタンを押すとご覧のメッセージボックスが表示されます。ランダムがゆえに早速4が続けて表示されました。
    六面体のさいころを振るのと一緒です。この方法では、ワルツを6曲演奏するとしたら同じ曲が続けて演奏されたりされなかったりします。 本来の目的は6曲を無作為の中でも重複せずに満遍なく演奏したいはずです。
    目的があるということは完全なランダムではなく、条件(目的)付きのランダムと考えたほうがよいでしょう。
    この目的を達成するには、最初に演奏順をランダムに並べ替えから演奏するか。ランダムに演奏して終わった曲は演奏しない仕組みにするか手段を講じる必要があります。

最後に

テレビでたまに観る宝くじの抽選会はどうでしょう。もしコンピューターで処理し、しかも非公開だとしたらとてもつまらなく問題が起きるでしょう。 羽根を回し矢を射るという機械的で誰が見ても疑いの余地はありません。一の位から上の位へ当選の確率徐々に下がっていきます。上の位からでもいいはずですが そうするとハズレがいっきに出てしまいます。目的を持った条件付きランダムなのです。
全国高校野球甲子園大会はどうでしょう。トーナメント方式がそもそも不公平と言わざるを得ません。優勝はまず間違いなく一番強いチームが決まりますが準優勝以下は 組み合わせによって大きく変わる可能性があります。そこで問題が起きないよう参加者自らくじを引き、その抽選会を公開するのです。プロ野球ドラフト会議も似ていますね。
さて、ダンス競技会のヒート割はどうでしょう。単独審査、スケーティングによる複数審査の違いはあっても高校野球のトーナメント方式とぼほ一緒です。 しかし、背番号は選べずヒート割の抽選会もなく主催者が決めています。もしランダムに決めるとしたら平等のような気もしますが、大きな違いがあります。
それは、決めること自体を参加者がするか主催者がするかということです。参加者がくじを引けば本人だから"良し(仕方ない)"、主催者が決めれば"勝手だ(気に入らない)"ということになりえます。 ランダムで平等にするということはあり得ないのです。常に不平等となります。同じヒートにファイナリスト、同じ県(教室)、同じランクの重複を避けることは コンピューターの操作(プログラム)でそう難しいことではありません。平均化することは可能ですが完璧すぎるといつも同じ順番で並んでしまいます。
ダンス競技会のヒート割も、条件付きランダムの考えがよさそうです。

これにて7回に渡りました「第二弾、スクリーンと音楽」アクセス講座2を終了します。
随分脱線してしまいました。それではごきげんよう…。渡辺 賢一