【いい記事なのにリンク切れ】Access VBA を始めるに当たり、目を通しておくべきページ

Access VBA を始めるに当たり、目を通しておくべきページ
https://accesskid.wordpress.com/2012/01/26/access-vba-%E3%82%92%E5%A7%8B%E3%82%81%E3%82%8B%E3%81%AB%E5%BD%93%E3%81%9F%E3%82%8A%E3%80%81%E7%9B%AE%E3%82%92%E9%80%9A%E3%81%97%E3%81%A6%E3%81%8A%E3%81%8F%E3%81%B9%E3%81%8D%E3%83%9A%E3%83%BC%E3%82%B8/

# すべてリンクが切れている
一部はわからない。
<OL>
<li> 文書番号: 283878 – 最終更新日: 2007年3月20日 – リビジョン: 6.2</li>
 データベースの正規化の基礎</br>
<li>文書番号: 826763 – 最終更新日: 2007年6月14日 – リビジョン: 2.1</li>
   Access データベースでの作業時に使用すべきでない特殊文字
<li>文書番号: 286335 – 最終更新日: 2007年6月14日 – リビジョン: 12.2</li>
   Access 2002 およびそれ以降のバージョンの Access の予約語の一覧
<li> 4.文書番号: 210276 – 最終更新日: 2007年5月21日 – リビジョン: 6.1</li>
   Microsoft Access で日付/時刻型の値の格納、計算、および比較を行う方法

<li>文書番号: 246335 – 最終更新日: 2007年6月14日 – リビジョン: 5.0</li>
  オートメーションを使用して ADO レコードセットのデータを Excel に転送する方法
<li>MS Office Support：SQL リファレンス</li>
<li>文書番号: 834927 – 最終更新日: 2004年1月20日 – リビジョン: 1.1</li>
   [ACC2003] MDB のレコードの並び順について
<li>MS Office Support：Access ワイルドカード文字リファレンス</li>
<li>文書番号: 281998 – 最終更新日: 2005年6月10日 – リビジョン: 4.2</li>
   [ACC2003] Microsoft Access フォームを ADO レコードセットに連結する方法
<li>文書番号: 285822 – 最終更新日: 2007年8月10日 – リビジョン: 7.1</li>
   Access でデータベースにログオンしているユーザーを Microsoft Jet UserRoster で調べる方法
<li>文書番号: 128881 – 最終更新日: 2004年1月23日 – リビジョン: 4.0</li>
   [AC97] コンボ ボックスやリスト ボックスに”(その他)”を追加する方法
<li>文書番号: 170918 – 最終更新日: 2004年3月31日 – リビジョン: 1.0</li>
   [VB] 関連付けられたファイルを ShellExecute で起動する方法 (32 ビット)

</ol>

# 代わりになる場所（現在一部不明）
<ol>
<li><p>データベース正規化の説明 - Microsoft 365 Apps | Microsoft Learn<a href="https://learn.microsoft.com/ja-jp/office/troubleshoot/access/database-normalization-description" target="_blank" rel="noopener noreferrer">Link</a>.</p></li>


<li><p>Access データベースで特殊文字を使用するとエラー メッセージが表示される <a href="https://learn.microsoft.com/ja-jp/office/troubleshoot/access/error-using-special-characters" target="_blank" rel="noopener noreferrer">Link</a>.</p></li>
Access データベースでの作業時に使用すべきでない特殊文字からタイトルが変更されているが、おそらくこれ。

<li><p>Access 2002 以降のバージョンの Access の予約語の一覧<a href="https://learn.microsoft.com/ja-jp/office/troubleshoot/access/reserved-words" target="_blank" rel="noopener noreferrer">Link</a>.</p></li>
これはリンクが消えているがタイトルは同じなので大丈夫。ほかにも以下がある。
<p>Access の予約語の一覧 - Microsoft 365 Apps | Microsoft Learn <a href="https://learn.microsoft.com/ja-jp/office/troubleshoot/access/reserved-words" target="_blank" rel="noopener noreferrer">Link</a>.</p>
こういう風に情報が錯綜するのはよくある。


<li><p>Microsoft Access で日付/時刻型の値の格納、計算、および比較を行う方法<a href="https://web.archive.org/web/20150316022244/http://support.microsoft.com/ja-jp/kb/210276/ja" target="_blank" rel="noopener noreferrer">Link</a>.</p></li>

これもタイトルが同じで存在。

<li><p>オートメーションを使用して ADO Recordset から Excel にデータを転送する方法 - Office | Microsoft Lear <a href="https://www.freecodecamp.org/" target="_blank" rel="noopener noreferrer">Link</a>.</p></li>

WebArchiveに元記事はあるようだ。[自動化を使用して ADO レコードセットから Excel にデータを転送する方法](https://web.archive.org/web/20130313054605/http://support.microsoft.com/kb/246335)

<li><p>Microsoft Access SQL リファレンス <a href="https://learn.microsoft.com/ja-jp/office/client-developer/access/desktop-database-reference/microsoft-access-sql-reference">Link</a>.</p></li>
<li>:star::star:[ACC2003] MDB のレコードの並び順について :star::star:</li>
　これが現在見つかっていない。
[mofu犬blog: [MSAccess] テーブル レコードの並び順を変更する](http://mofuken.blogspot.com/2015/02/msaccess.html)
<li><p>ADO レコードセットにフォームを連結します <a href="https://learn.microsoft.com/ja-jp/office/vba/access/concepts/activex-data-objects/bind-a-form-to-an-ado-recordset">Link</a></p></li>
タイトルがおかしくなっているが、おそらくこれ。


<li><p>Access で Microsoft Jet UserRoster を使用してデータベースにログオンしているユーザーを確認する方法 <a href="https://learn.microsoft.com/ja-jp/office/troubleshoot/access/determine-who-is-logged-on-to-database">Link</a></p></li>

<li><p>Access ワイルドカード文字リファレンス <a href="https://support.microsoft.com/ja-jp/office/access-%E3%83%AF%E3%82%A4%E3%83%AB%E3%83%89%E3%82%AB%E3%83%BC%E3%83%89%E6%96%87%E5%AD%97%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9-af00c501-7972-40ee-8889-e18abaad12d1">Link</a>.</p></li>


<li><p>コンボ ボックスまたはリスト ボックスに "(すべて)" を追加する <a href="https://learn.microsoft.com/ja-jp/office/vba/access/concepts/controls/addallto-a-combo-box-or-list-box">Link</a>.</p></li>

　以前の記事はその他なので、これかどうか。「すべて」と「その他」って全然違うよね。
英語だが以下の２つ。
[「すべて」または「N/A」オプションをコンボ ボックスに追加する方法 – iAccessWorld.com](https://www.iaccessworld.com/how-to-add-all-or-n-a-options-to-combo-box/)
[列ヘッダーを含む AddAllToList - Microsoft Access / VBA](https://bytes.com/topic/access/insights/869119-addalltolist-column-headers)
>この関数はもともと黎明期に作成されたもので、何年にもわたって多くの変更を加えてきましたが、ネットで検索しても列ヘッダーの使用を許可する関数がまだ見つからなかったので、その関数を投稿しようと思いました。

<li><p>関連付けられたアプリケーションでファイルを開く(VB6.0) - VBレスキュー(花ちゃん) <a href="http://hanatyan.sakura.ne.jp/vb6/application03.htm">Link</a>.</p></li>
公式サイトは見つからないが、おそらくこれだと思う。VBと頭にあるのでWin32APIのはず。

この過程で[Accessで秒を時間で表示させる方法って？ -こんばんわAccessで秒を時間- Access（アクセス） | 教えて!goo](https://oshiete.goo.ne.jp/qa/2307822.html)
で紹介されている、
http://support.microsoft.com/kb/881854/ja
これも現在見つかっていない。タイトルすらわからない。
特に７番はたくさんの紹介がされているが、なぜかアーカイブもなく、全くどこにあるかがわからない。
しかし、せっかくまとめたサイトがあっても、ことごとくリンクが切れてしまい、リダイレクトもしない。

# この他
## まずAccessは何をするか
[Access 2010 の基本的な作業 - Microsoft サポート](https://support.microsoft.com/ja-jp/office/access-2010-%E3%81%AE%E5%9F%BA%E6%9C%AC%E7%9A%84%E3%81%AA%E4%BD%9C%E6%A5%AD-268acfed-2484-4822-acb3-c30e58045588)
[Access のキーボード ショートカット - Microsoft サポート](https://support.microsoft.com/ja-jp/office/access-%E3%81%AE%E3%82%AD%E3%83%BC%E3%83%9C%E3%83%BC%E3%83%89-%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88-70a673e4-4f7b-4300-b8e5-3320fa6606e2)
## トレーニングビデオ
[Access のビデオ トレーニング - Microsoft サポート](https://support.microsoft.com/ja-jp/office/access-%E3%81%AE%E3%83%93%E3%83%87%E3%82%AA-%E3%83%88%E3%83%AC%E3%83%BC%E3%83%8B%E3%83%B3%E3%82%B0-a5ffb1ef-4cc4-4d79-a862-e2dda6ef38e6)
## Accessは仕様と新機能の理解が重要
[64 ビット版または 32 ビット版の Office を選択する - Microsoft サポート](https://support.microsoft.com/ja-jp/office/64-%E3%83%93%E3%83%83%E3%83%88%E7%89%88%E3%81%BE%E3%81%9F%E3%81%AF-32-%E3%83%93%E3%83%83%E3%83%88%E7%89%88%E3%81%AE-office-%E3%82%92%E9%81%B8%E6%8A%9E%E3%81%99%E3%82%8B-2dee7807-8f95-4d0c-b5fe-6c6f49b8d261)
現在の推奨は64bitとなっているが、Accessを使うには64ビットより32ビットのほうが良い。
DAOなどのJetエンジンが使用できることはBigIntより重要性が高い。

[Access データベースの構造について - Microsoft サポート](https://support.microsoft.com/ja-jp/office/access-%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E3%81%AE%E6%A7%8B%E9%80%A0%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6-001a5c05-3fea-48f1-90a0-cccaa57ba4af)
[Access の仕様 - Microsoft サポート](https://support.microsoft.com/ja-jp/topic/access-%E3%81%AE%E4%BB%95%E6%A7%98-0cf3c66f-9cf2-4e32-9568-98c1025bb47c)
[データ型とフィールド プロパティの概要 - Microsoft サポート](https://support.microsoft.com/ja-jp/office/%E3%83%87%E3%83%BC%E3%82%BF%E5%9E%8B%E3%81%A8%E3%83%95%E3%82%A3%E3%83%BC%E3%83%AB%E3%83%89-%E3%83%97%E3%83%AD%E3%83%91%E3%83%86%E3%82%A3%E3%81%AE%E6%A6%82%E8%A6%81-30ad644f-946c-442e-8bd2-be067361987c)
[データベース内のオブジェクトのデザイン設定をカスタマイズする](https://support.microsoft.com/ja-jp/office/%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E5%86%85%E3%81%AE%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%81%AE%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3%E8%A8%AD%E5%AE%9A%E3%82%92%E3%82%AB%E3%82%B9%E3%82%BF%E3%83%9E%E3%82%A4%E3%82%BA%E3%81%99%E3%82%8B-b6e0baa0-15d4-47ae-84c2-e0c46dcea23b)
[Access 2019 の新機能 - Microsoft サポート](https://support.microsoft.com/ja-jp/office/access-2019-%E3%81%AE%E6%96%B0%E6%A9%9F%E8%83%BD-f52c5317-3494-4105-9c56-5a2abb8e0f87)
[Access for Microsoft 365 の新機能](https://support.microsoft.com/ja-jp/topic/access-for-microsoft-365-%E3%81%AE%E6%96%B0%E6%A9%9F%E8%83%BD-76454345-f85d-47af-ace1-98a456cb3496)
## Accessの基本で知られていないのがインデックス
[インデックスの作成と使用によりパフォーマンスを向上させる - Microsoft サポート](https://support.microsoft.com/ja-jp/office/%E3%82%A4%E3%83%B3%E3%83%87%E3%83%83%E3%82%AF%E3%82%B9%E3%81%AE%E4%BD%9C%E6%88%90%E3%81%A8%E4%BD%BF%E7%94%A8%E3%81%AB%E3%82%88%E3%82%8A%E3%83%91%E3%83%95%E3%82%A9%E3%83%BC%E3%83%9E%E3%83%B3%E3%82%B9%E3%82%92%E5%90%91%E4%B8%8A%E3%81%95%E3%81%9B%E3%82%8B-0a8e2aa6-735c-4c3a-9dda-38c6c4f1a0ce)


## 最初はわからないが、基本パフォーマンスが落ちないような設計を目指すべき
[Access のパフォーマンスを向上させる - Microsoft サポート](https://support.microsoft.com/ja-jp/office/access-%E3%81%AE%E3%83%91%E3%83%95%E3%82%A9%E3%83%BC%E3%83%9E%E3%83%B3%E3%82%B9%E3%82%92%E5%90%91%E4%B8%8A%E3%81%95%E3%81%9B%E3%82%8B-f6827763-bb5c-4f48-8457-7a14addab6be)
[パフォーマンス最適化ツールを使用して Access データベースを最適化する - Microsoft サポート](https://support.microsoft.com/ja-jp/office/%E3%83%91%E3%83%95%E3%82%A9%E3%83%BC%E3%83%9E%E3%83%B3%E3%82%B9%E6%9C%80%E9%81%A9%E5%8C%96%E3%83%84%E3%83%BC%E3%83%AB%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%A6-access-%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E3%82%92%E6%9C%80%E9%81%A9%E5%8C%96%E3%81%99%E3%82%8B-c44619df-4248-421f-9b8b-30b86082d792)
### オブジェクト（テーブル、クエリなど）命名方法
 - 空白を入れないこと。
 - 特殊文字、予約語を使わないこと
 - 一意であること。つまりテーブル、クエリ、フォーム、レポートで、同じ名前を使うことはできない）
 - 各オブジェクトでは基本的に昇順に並ぶ。
 - 長い名前は見えないので、極力短くすること。

そこで、次のように命名方法を工夫する。これは定まったものはないが、名前がかぶらず、特にクエリやマクロアクションで異なるものが混じらないようにすること。

- テーブルには"T_"から始める。"T_00Master"など
- クエリはQ_から始めるが、アクションクエリなどを作る場合は"QA_","QD_"とする。選択クエリと削除クエリアクションクエリが混在しないようにしないと危険。
- マクロアクションボタンは、フォームに並ぶ順を意識し"M01_"などとする。またツールや設定と分けるときは"MT" "MS"から初めて通常の操作と区別する。ここも混在はさせないこと。
- フォーム、レポートは"F_"、"R_"から始める

 
## テーブル
ワークシートと似ている。というかワークブック自体が一種のデータベースとは言える。
ただ、データの自由度がない
まずはテーブルを作り、リレーションシップを作る。
[テーブル​​ - Microsoft サポート](https://support.microsoft.com/ja-jp/office/%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB%E2%80%8B%E2%80%8B-0d51ea2b-c8ae-45c4-a4ab-789c0f608b97)
[テーブルの概要 - Microsoft サポート](https://support.microsoft.com/ja-jp/office/%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB%E3%81%AE%E6%A6%82%E8%A6%81-78ff21ea-2f76-4fb0-8af6-c318d1ee0ea7)
[テーブルを作成してフィールドを追加する - Microsoft サポート](https://support.microsoft.com/ja-jp/office/%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB%E3%82%92%E4%BD%9C%E6%88%90%E3%81%97%E3%81%A6%E3%83%95%E3%82%A3%E3%83%BC%E3%83%AB%E3%83%89%E3%82%92%E8%BF%BD%E5%8A%A0%E3%81%99%E3%82%8B-8fdc65f9-8d40-4ff5-9212-80e6545e8d87)
[Access でテーブルの主キーを追加または変更する - Microsoft サポート](https://support.microsoft.com/ja-jp/office/access-%E3%81%A7%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB%E3%81%AE%E4%B8%BB%E3%82%AD%E3%83%BC%E3%82%92%E8%BF%BD%E5%8A%A0%E3%81%BE%E3%81%9F%E3%81%AF%E5%A4%89%E6%9B%B4%E3%81%99%E3%82%8B-07b4a84b-0063-4d56-8b00-65f2975e4379)
[テーブルおよびクエリを結合する](https://support.microsoft.com/ja-jp/office/%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB%E3%81%8A%E3%82%88%E3%81%B3%E3%82%AF%E3%82%A8%E3%83%AA%E3%82%92%E7%B5%90%E5%90%88%E3%81%99%E3%82%8B-3f5838bd-24a0-4832-9bc1-07061a1478f6)

## Accessの基本はSQLとそれをグラフィカルに示したクエリ
[Access SQL: 基本的な概念、用語、および構文 - Microsoft サポート](https://support.microsoft.com/ja-jp/office/access-sql-%E5%9F%BA%E6%9C%AC%E7%9A%84%E3%81%AA%E6%A6%82%E5%BF%B5-%E7%94%A8%E8%AA%9E-%E3%81%8A%E3%82%88%E3%81%B3%E6%A7%8B%E6%96%87-444d0303-cde1-424e-9a74-e8dc3e460671)
## 式(普通は関数)
[式 - Microsoft サポート](https://support.microsoft.com/ja-jp/office/%E5%BC%8F-684295d0-97c2-443c-8e0a-8c6b635bec56#ID0EAABAAA=Creating_expressions)
[式の概要 - Microsoft サポート](https://support.microsoft.com/ja-jp/office/%E5%BC%8F-684295d0-97c2-443c-8e0a-8c6b635bec56#ID0EAABAAA=Creating_expressions)
アクセスではファンクション（関数）をエクスプレッション（式）という。
あとなんでも概要ってつけて検索すると出てきそう。
### 重要な関数
:bomb::bomb::bomb::bomb::bomb::bomb::bomb::bomb::bomb::bomb:
:bomb::bomb::bomb:[Round 関数](https://support.microsoft.com/ja-jp/office/round-%E9%96%A2%E6%95%B0-921ce538-c9a6-41e2-be87-28e685b59935):bomb::bomb::bomb:
:bomb::bomb::bomb::bomb::bomb::bomb::bomb::bomb::bomb::bomb:
こいつは要注意。というか<b>この関数を使っていたらまずそのデータベースは信用ができない</b>
<b>なぜなら、これはExcelのRoundとは全く別物だから。</b>
> 注: この VBA 関数は、銀行取引の丸めと呼ばれるものを返します。 そのため、この関数を使用する前に注意してください。 より予測可能な結果を得る場合は、Excel VBA のワークシート丸関数を使用します。
ちなみに、クエリの中ではこれは使えない。じゃあどうするかというと、関数電卓みたいにABS、Int。Signを使う。

[IIf 関数 - Microsoft サポート](https://support.microsoft.com/ja-jp/office/iif-%E9%96%A2%E6%95%B0-32436ecf-c629-48a3-9900-647539c764e3)
クエリでよく使う。なぜかIf関数ではなく、IIFという。

[DLookup 関数 - Microsoft サポート](https://support.microsoft.com/ja-jp/office/dlookup-%E9%96%A2%E6%95%B0-8896cb03-e31f-45d1-86db-bed10dca5937)
指定した条件でレコードをの指定したフィールドを参照する。VlookUpに近い。
[DCount 関数 - Microsoft サポート](https://support.microsoft.com/ja-jp/office/dcount-%E9%96%A2%E6%95%B0-f6b5d78b-ad0b-4e42-be7a-11a64acbf3d3)
こちらは指定した条件でレコード数をカウントする。
[Val 関数 - Microsoft サポート](https://support.microsoft.com/ja-jp/office/val-%E9%96%A2%E6%95%B0-e5e1f21b-22f9-41c9-bd0a-fe55b767f603)
Accessでは16進数の変換にこれを使う。ExcelのEvalに相当する関数。
[Nz 関数 - Microsoft サポート](https://support.microsoft.com/ja-jp/office/nz-%E9%96%A2%E6%95%B0-8ef85549-cc9c-438b-860a-7fd9f4c69b6c)
## 失敗するとよく出る
[Access によりパラメーター値の入力が求められるのはなぜですか? - Microsoft サポート](https://support.microsoft.com/ja-jp/office/access-%E3%81%AB%E3%82%88%E3%82%8A%E3%83%91%E3%83%A9%E3%83%A1%E3%83%BC%E3%82%BF%E3%83%BC%E5%80%A4%E3%81%AE%E5%85%A5%E5%8A%9B%E3%81%8C%E6%B1%82%E3%82%81%E3%82%89%E3%82%8C%E3%82%8B%E3%81%AE%E3%81%AF%E3%81%AA%E3%81%9C%E3%81%A7%E3%81%99%E3%81%8B-0e71a1dd-e498-49a1-9e2e-356538d226ff)
簡単に言うと失敗している。

[簡単な選択クエリを作成する - Microsoft サポート](https://support.microsoft.com/ja-jp/office/%E7%B0%A1%E5%8D%98%E3%81%AA%E9%81%B8%E6%8A%9E%E3%82%AF%E3%82%A8%E3%83%AA%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B-de8b1c8d-14e9-4b25-8e22-70888d54de59)
[Access クエリで抽出条件として日付を使用する例 - Microsoft サポート](https://support.microsoft.com/ja-jp/office/access-%E3%82%AF%E3%82%A8%E3%83%AA%E3%81%A7%E6%8A%BD%E5%87%BA%E6%9D%A1%E4%BB%B6%E3%81%A8%E3%81%97%E3%81%A6%E6%97%A5%E4%BB%98%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%99%E3%82%8B%E4%BE%8B-aea83b3b-46eb-43dd-8689-5fc961f21762)
[集計行を使用してデータシートに列の合計を表示する - Microsoft サポート](https://support.microsoft.com/ja-jp/office/%E9%9B%86%E8%A8%88%E8%A1%8C%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%A6%E3%83%87%E3%83%BC%E3%82%BF%E3%82%B7%E3%83%BC%E3%83%88%E3%81%AB%E5%88%97%E3%81%AE%E5%90%88%E8%A8%88%E3%82%92%E8%A1%A8%E7%A4%BA%E3%81%99%E3%82%8B-8f1f89c4-7f86-4113-a836-291ac3ea446e)
これが一番簡単な集計方法。
[クエリを使用してデータを集計する - Microsoft サポート](https://support.microsoft.com/ja-jp/office/%E3%82%AF%E3%82%A8%E3%83%AA%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%A6%E3%83%87%E3%83%BC%E3%82%BF%E3%82%92%E9%9B%86%E8%A8%88%E3%81%99%E3%82%8B-430a669b-e7fd-4c4b-b154-8c8dbbe41c8a)
[クエリの実行時にパラメーターを使って入力を求める - Microsoft サポート](https://support.microsoft.com/ja-jp/office/%E3%82%AF%E3%82%A8%E3%83%AA%E3%81%AE%E5%AE%9F%E8%A1%8C%E6%99%82%E3%81%AB%E3%83%91%E3%83%A9%E3%83%A1%E3%83%BC%E3%82%BF%E3%83%BC%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E5%85%A5%E5%8A%9B%E3%82%92%E6%B1%82%E3%82%81%E3%82%8B-c2806d3d-d500-45a8-8507-ec6af351b6ed)
こちらはエラーではなく、本当のパラメータークエリ。
だから動的クエリとかいちいちクエリを新しく作るよりもこちらが便利な場合がある。
## 文字列を操作するというのも重要
[文字列関数とその使い方](https://support.microsoft.com/ja-jp/office/%E6%96%87%E5%AD%97%E5%88%97%E9%96%A2%E6%95%B0%E3%81%A8%E3%81%9D%E3%81%AE%E4%BD%BF%E3%81%84%E6%96%B9-965efa84-7009-4603-9765-2eb4a099ec72)
## 忘れ去られがちなフォーム、レポート
[フォームとレポート]()
[フォームまたはレポートにフィールドを追加する - Microsoft サポート](https://support.microsoft.com/ja-jp/office/%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A0%E3%81%BE%E3%81%9F%E3%81%AF%E3%83%AC%E3%83%9D%E3%83%BC%E3%83%88%E3%81%AB%E3%83%95%E3%82%A3%E3%83%BC%E3%83%AB%E3%83%89%E3%82%92%E8%BF%BD%E5%8A%A0%E3%81%99%E3%82%8B-0d5e2740-3b39-4341-8ec2-32c9f82cbfce)
これはタイトルが悪くて、フィールドリストのこと。
### フォーム
[Access でフォームを作成する - Microsoft サポート](https://support.microsoft.com/ja-jp/office/access-%E3%81%A7%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A0%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B-5d550a3d-92e1-4f38-9772-7e7e21e80c6b)
[OpenArgs プロパティ - Microsoft サポート](https://support.microsoft.com/ja-jp/office/openargs-%E3%83%97%E3%83%AD%E3%83%91%E3%83%86%E3%82%A3-c8616938-cd58-4b1a-84cf-3d043f59e13b)
[フォーム上のコマンドボタン配置基準について](http://fk-plaza.jp/acs/TIPS/waza65.htm)
この他、タブオーダーを順番にするのが重要。面倒だが、タブキーで飛ばすとめちゃくちゃになる。
また、ボタン名も工夫する必要がある。

### レポート
[単純なレポートを作成する - Microsoft サポート](https://support.microsoft.com/ja-jp/office/%E5%8D%98%E7%B4%94%E3%81%AA%E3%83%AC%E3%83%9D%E3%83%BC%E3%83%88%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B-408e92a8-11a4-418d-a378-7f1d99c25304)
[Access におけるレポートの概要 - Microsoft サポート](https://support.microsoft.com/ja-jp/office/access-%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8B%E3%83%AC%E3%83%9D%E3%83%BC%E3%83%88%E3%81%AE%E6%A6%82%E8%A6%81-e0869f59-7536-4d19-8e05-7158dcd3681c)
## アクションマクロ
[Accessのマクロのアクションとは | できるネット](https://dekiru.net/article/15604/)
[Access 2007 マクロの基本 - Microsoft サポート](https://support.microsoft.com/ja-jp/office/access-2007-%E3%83%9E%E3%82%AF%E3%83%AD%E3%81%AE%E5%9F%BA%E6%9C%AC-a39c2a26-e745-4957-8d06-89e0b435aac3)
このマクロはVBAではなく、アクションマクロ、またはアクションマクロのこと。
[Access マクロ アクション (Access 開発者用リファレンス)](https://learn.microsoft.com/ja-jp/office/client-developer/access/desktop-database-reference/access-macro-actions-access-developer-reference)
[データ マクロを作成する - Microsoft サポート](https://support.microsoft.com/ja-jp/office/%E3%83%87%E3%83%BC%E3%82%BF-%E3%83%9E%E3%82%AF%E3%83%AD%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B-b1b94bca-4f17-47ad-a66d-f296ef834200)
このアクションマクロはフォームの操作のときによく使われる。
このアクションマクロの最大の欠点は、外部に容易にエクスポートできない点。
エクスポートしても

## VBA
[Office VBA の基礎知識](https://learn.microsoft.com/ja-jp/office/vba/library-reference/concepts/getting-started-with-vba-in-office)
Accessに限らず、OfficeではVBAが使える。これはVisual Basicの簡易版として位置づけられている。
そして、マイクロソフトはVBAを売りにしていたが、セキュリティを言い訳にして現在はVBAが大嫌い。
しかし、Accessでは使用せざるを得ない時が多くある。
[Access 開発者向けドキュメント](https://learn.microsoft.com/ja-jp/office/client-developer/access/access-home)
いわゆるマクロ。そして、DAO、ADO、ADOXの説明がついているというのがAccessの独特な点。
そして、<b>AccessではVBAは必ず使う</b>
これ、停止したら会社を辞めていいレベル。
[ログ関数 (Visual Basic for Applications) | Microsoft Learn](https://learn.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/log-function)
<b><AccessにはLog10がない。また、Static Functionを使用する唯一の例。</b>

VBAが使えないとこれが使えない。Logなんていつ使うの？というと、上位３桁で丸めるときに必須になるため。
また、Docmd.RunSQLは255文字が限界で、複雑なSQLを実行できない。
さらに、テーブルを作成するときに、ハイパーリンク型を設定することができない。
また、一時的にクエリを作成するときも必要。

[Option Base ステートメント (VBA) | Microsoft Learn](https://learn.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/option-base-statement)
配列のスタートを1から始めることができる。
[Option Compare ステートメント (VBA) | Microsoft Learn](https://learn.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/option-compare-statement)
Textにすると、全角、半角の区別がなくなる。

## データのインポート、エクスポート
[Access でのデータのインポート、リンク、およびエクスポートの概要 - Microsoft サポート](https://support.microsoft.com/ja-jp/office/access-%E3%81%A7%E3%81%AE%E3%83%87%E3%83%BC%E3%82%BF%E3%81%AE%E3%82%A4%E3%83%B3%E3%83%9D%E3%83%BC%E3%83%88-%E3%83%AA%E3%83%B3%E3%82%AF-%E3%81%8A%E3%82%88%E3%81%B3%E3%82%A8%E3%82%AF%E3%82%B9%E3%83%9D%E3%83%BC%E3%83%88%E3%81%AE%E6%A6%82%E8%A6%81-08422593-42dd-4e73-bdf1-4c21fc3aa1b0)
差し込み印刷もできるが、レポートで印刷するよりExceに出力することが多い。
また、Excelをテーブルに変換することも多い。
あと、マイナーなのがOutlookのアドレス帳のインポート、エクスポートにいきなりアクセスが使われる。

## 日付と時刻
日付と時刻はアクセスは苦手。ジオロケーションも苦手。
[日付と時刻のフィールドを書式設定する](https://support.microsoft.com/ja-jp/office/%E6%97%A5%E4%BB%98%E3%81%A8%E6%99%82%E5%88%BB%E3%81%AE%E3%83%95%E3%82%A3%E3%83%BC%E3%83%AB%E3%83%89%E3%82%92%E6%9B%B8%E5%BC%8F%E8%A8%AD%E5%AE%9A%E3%81%99%E3%82%8B-47fbbdc1-52fa-416a-b8d5-ba24d881b698)
[100分の1秒のデータを扱いたい - hatena chips](https://hatenachips.blog.fc2.com/blog-entry-227.html)

# 情報追加
Googleでは出てこなかったので探したよ。
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">【アクセス関数】文字列を日付に変換する方法 <a href="https://t.co/2SARaKSCAC">https://t.co/2SARaKSCAC</a></p>&mdash; 明日へのこやし (@asuenokoyashi) <a href="https://twitter.com/asuenokoyashi/status/1488094444670767104?ref_src=twsrc%5Etfw">January 31, 2022</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> 

[適切な日付関数を選択する - Microsoft サポートAccess2013](https://support.microsoft.com/ja-jp/office/%E9%81%A9%E5%88%87%E3%81%AA%E6%97%A5%E4%BB%98%E9%96%A2%E6%95%B0%E3%82%92%E9%81%B8%E6%8A%9E%E3%81%99%E3%82%8B-377e73f4-91df-44d8-a386-a3c43f0ac99e#__toc317065599)
[Format 関数 (カスタム web アプリケーションのアクセス) のユーザー設定の日付と時刻の書式を設定します。 | Microsoft Learn](https://learn.microsoft.com/ja-jp/office/client-developer/access/custom-date-and-time-formats-for-the-format-function-access-custom-web-app)

[適切な日付関数を選択する](https://support.microsoft.com/ja-jp/office/適切な日付関数を選択する-377e73f4-91df-44d8-a386-a3c43f0ac99e#__toc317065599)

# 最初は目を通さなくていいアドヴァンス編

この辺は最初は目を通さなくていいが、こういうのがあるんだということで
## データベースの作成方法
データベースそのものの作成はあまりやらないと思うが、
<ol>
<li>正直に新規作成する
<li>Powerhell、VBSで作成する
<li>Excel等のVBAで作成する。
</ol>
がある。
これは修復とかのときに使う。

## テーブルの作成方法
現在知られている方法は、
<ol>
<li>正直に新規作成する。
<li>VBSで外側から外側から操作して作成する。
<li>リンクテーブルを作り、そのあとテーブルにする。
<li>Excelをインポートする。
<li>DoCmdを使う
<li>テキストファイルをインポートする。
<li>テーブル作成クエリを使う。もしくはそれをVBAで実行する。
<li>VBAでADOXを使う。
</ol>

このようにいろいろあるが、フィールドのデータ型をハイパーリンク型にする方法は1.が一番単純で、ADOCで作ってハイパーリンク型にするの2つしかない。なぜなら、ハイパーリンク型は長いテキスト（メモ型）の派生として扱われているからだ。

## Access特有のVBAほか
[Microsoft Access 2003 言語リファレンス [Access 2003 VBA 言語リファレンス] | Microsoft Learn](https://learn.microsoft.com/en-us/previous-versions/office/developer/office-2003/aa663079(v=office.11))
全部英語、日本語はない。
[Access 2010 | Microsoft Learn](https://learn.microsoft.com/ja-jp/previous-versions/office/developer/office-2010/ff604965(v=office.14))
[Visual Basic for Applications (VBA) の言語リファレンス | Microsoft Learn](https://learn.microsoft.com/ja-jp/office/vba/api/overview/language-reference)
Accessに限らずOffice VBA全般の知識。

[DoCmd オブジェクト (Access)]https://learn.microsoft.com/ja-jp/office/vba/api/access.docmd)
これはマクロアクションをVBAでやっているようなやつ。
またはメニューバー（現在はリボン）やツールバーの命令を実行する。（一部旧バージョンのためのものがある）Excelのコマンドコントロールに相当する。

> Access の各メニュー コマンドまたはツールバー コマンドには対応する定数があります。この値を指定して RunCommand メソッドを使うと、コードでコマンドを実行できます。
unCommand メソッドは、 DoCmd オブジェクトの [DoMenuItem](https://learn.microsoft.com/ja-jp/office/vba/api/access.docmd.domenuitem) メソッドを置換します。

それまでの[DoMenuItem](https://learn.microsoft.com/ja-jp/office/vba/api/access.docmd.domenuitem)を置換する形でAccess2000時代にはよく使われた。
なお、ヘルプで記述されている、acMeneVer70, acMenuVer20 acMenuVer1Xは一応VBEを起動し、F2から検索はできる。その際、非表示を表示するを起動させておくこと。

[Access Study Vol.4 Docmd活用リファレンス | T'sWare](https://tsware.jp/study/indexv4.htm)
[Docmd活用リファレンス 6 コマンドの実行(その3) | T'sWare](https://tsware.jp/study/vol4/docmd_6.htm)
ただし、DoCmd.TransferTextなどは挙動が違うときある。
さらに、この中にAccessのとんでもないメソッドがある。
[DoCmd.RunCommand メソッド (Access) | Microsoft Learn](https://learn.microsoft.com/ja-jp/office/vba/api/access.docmd.runcommand?redirectedfrom=MSDN)
これは[acCommand](https://learn.microsoft.com/ja-jp/office/vba/api/access.accommand)定数を実行するが、500以上の命令があり、<b>現在のバージョンでは実行できないものも存在する。</b>これは、いわゆるツールバーのタブ（ファイルとか、ホームとか）の機能を実行するものらしい。しかし、例えばヘルプを開きます、終わり。ということで、次のアクションができない。また、MicrosoftがBingを推しているので、

```vb
Sub OpenTest()
DoCmd.RunCommand acCmdOpenSearchPage
End Sub
```
これを実行すると、既定のブラウザでBingが開く。しかし、以前はMicrosoft Searchページが開いていた。<b>どう考えても必要性が全くないものが存在している。またこれらの定数の解説が存在しない。</b>
一覧表はこういうのもあるが、やはりよくわからない。
[DoCmd.RunCommand - Access VBA - Access FQA 自問自答のAccess tips!](http://softcell-japan.com/tips1002.html)
以前はこのようなサイトもあり、発掘はしたが、現在は存在しない。
https://qiita.com/Q11Q/items/c1ec070cdf3b1de41c66
フォームの操作に使うものだけ抑えておけばよい。
[アクセスの標準メニューをＶＢＡで使うRunCommand](http://fk-plaza.jp/acs/TIPS/waza37.htm)

[Office 製品のトラブルシューティング](https://learn.microsoft.com/ja-jp/office/troubleshoot/office-client-welcome)
このページは真っ先に見える。攻略ガイドには意味がない。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/126919/9bef29e3-20d3-ae3d-856f-652dbfb8f09d.png)
左側にある、Accessをクリックしてからが本番。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/126919/40e83ac0-1fdf-e718-a055-24d0c4e6473f.png)
### イベントに関して
Excelと違い、開くときと終了（データベースを閉じる）イベントがない。
https://stackoverflow.com/questions/12063404/is-there-an-on-close-event-for-ms-access-vba
### DAO AOD ADOX
お行儀よくいくと、[Access 開発者向けドキュメント | Microsoft Learn](https://learn.microsoft.com/ja-jp/office/client-developer/access/access-home) - 
[Microsoft Data Access Objects リファレンス | Microsoft Learn](https://learn.microsoft.com/ja-jp/office/client-developer/access/desktop-database-reference/microsoft-data-access-objects-reference)
これがDAO Accessのデータベース間、または単体でのデータのやり取りに使用する。
しかし、ここを見てもだいたいわからない。
ところで、VBAの概念というのは一般的にはTipsに属することが記述されている。
実はこの中にDAO、ADOの重要事項が存在する。そう、構成がめちゃくちゃなのである。
[DAO レコードセットのレコード数をカウントする | Microsoft Learn](https://learn.microsoft.com/ja-jp/office/vba/access/concepts/data-access-objects/count-the-number-of-records-in-a-dao-recordset)

[Microsoft ActiveX データ オブジェクト リファレンス | Microsoft Learn](https://learn.microsoft.com/ja-jp/office/client-developer/access/desktop-database-reference/microsoft-activex-data-objects-reference)
Excelやテキストをデータベースにする、出力するとき使う。
この中でデータベースの枠を外れて使われるのがAODDB.Stream

[ADO 接続文字列を作成する | Microsoft Learn](https://learn.microsoft.com/ja-jp/office/vba/access/concepts/activex-data-objects/create-an-ado-connection-string)
そしてADOのことがここに書いてある。なぜなら、ADO,DAOはVBAまたはVBSで使用するためである。

### Scema.iniがなぜSQLに？
[テキスト データ ソース ドライバーの初期化 | Microsoft Learn](https://learn.microsoft.com/ja-jp/office/client-developer/access/desktop-database-reference/initializing-the-text-data-source-driver?redirectedfrom=MSDN)
Accessのschema.iniはここに記載されている。ところが一般にはSQLサーバーのほうがヒットする。そちらとは違うので注意。
これはADOとつながっている。接続文字列だけできてもこの設定ができないと使えない。特にUTF-8時代のテキストファイルはそう。
## 64bitの壁 Jet
[【VBA】ADOを使用してテキストファイル（CSV）をDB操作する方法のまとめ](https://qiita.com/t-yama-3/items/8d219835018b9bad0eac)
[64bit版Windowsでの「Microsoft.Jet.OLEDB.4.0」について](https://qiita.com/yaju/items/86314412741deb806366)
[VBAでのJetとAceのメモメモ](https://qiita.com/callmekohei/items/e98466fe8bc07678c1d8)
[ODBC 管理者ツールは、32 ビットと 64 ビットの両方のユーザー DSN を 64 ビット バージョンの Windows で表示します。](https://learn.microsoft.com/ja-jp/troubleshoot/sql/connect/odbc-tool-displays-32-bit-64-bit)
なお、64bitOSで64BitAccessのときはダウンロードして、
%USERPROFILE%\Downloads\accessdatabaseengine_X64.exe /Quiet
で成功した。
[Jet compact ユーティリティはダウンロード センターで利用できます](https://learn.microsoft.com/ja-jp/office/troubleshoot/access/jet-compact-utility-download)

[Microsoft.Jet.OLEDB.4.0でCSVに実数をSQLでInsertすると小数点以下２桁未満が切られる #.NET - Qiita](https://qiita.com/zetamatta/items/5a808327f3a7fdb2d2f7)
xls(*),csvとのやり取りはどうしてもデータ型の変換がうまくいかない時がある。
とこで、なぜテキストファイルのやり取りが必要になるのか？
これは違うデータベースや、将来Accessがなくなっても、データベース本体は移管できるようにするためである。

### VBSのサンプル
[WSHで64/32bitを区別する。起動する。: Windows Script Programming](http://scripting.cocolog-nifty.com/blog/2010/11/wsh6432bit-53a9.html)
Jet.OledbやJscripを使う時、どうしてもSyswow64のWScript.exeやCscript.exeを使用する。
この時、自動で切り替えるコードが必要となる。

[Access形式データベースへの接続1 - VBScriptさんま屋](https://learn.microsoft.com/ja-jp/office/troubleshoot/access/jet-compact-utility-download)
[CX's Hello, World! » Access](https://web.archive.org/web/20150228151408/http://cx20.main.jp/blog/hello/category/access/)
### WizHook
[AccessでWizHook使ってみよう。 | すたじおこんぶ](https://scombu.com/2020/11/06/2020-11-06-205851/)
[Willkommen bei Team-Moeller.de - Wizhook-Objekt](https://team-moeller.de/?Tipps_und_Tricks:Wizhook-Objekt)
[WizHook - Isladogs on Access]()
## お役立ちサイト
リンクをたどる必要はないが、これはある程度困り果てるときに検索するとヒットする。
[魔法使いの開発工房](http://www.mahoutsukaino.com/)
Access 97からAccess2007までのテクニック。
ちなみにこのサイトを作っていたきたみ氏は、できるネットで執筆している。

[Access VBAテクニック カテゴリー：即効テクニック｜Excel VBAを学ぶならmoug](https://www.moug.net/tech/acvba/)
[Access Tips | T'sWare](https://tsware.jp/tips/)
[記事一覧 - もう一度学ぶMS-Access](https://www.accessdbstudy.net/archive)
[B.WH |ACCESS ボケ対策](http://blogwizhook.blog.fc2.com/blog-category-7-1.html)
超マニアックな裏技を集めているページ。
[ConnectionStrings.com - Forgot that connection string? Get it here!](https://www.connectionstrings.com/)