データベースからフィールド/クエリ値の区切り文字付きリストとその他の情報を取得する必要が生じたことがある方なら、それがどれほど困難な作業であるか、そしてほとんどの人が不可能だと考えていることをご存知でしょう。例えば、年間を通して各月の売上上位5名(降順)や、各顧客に最も近い3店舗をまとめたレポートを作成するよう依頼された場合、クロス集計クエリを扱ったり、Access以外で手動で結果を結合したりする必要が生じる可能性があります。しかし、VBAコードを少し使うだけで、次のような結果を数分で作成できます。
| XNUMX月 | ジョン、サリー、ビル |
| 2月 | サリー、アダム、ジョン |
| 3月 | アダム、サリー、ビル |
より大きなクエリの一部として結果の区切りリストを表示できると便利な場合がよくあります。これは、各営業担当者の上位3人の顧客のリストであり、最も支出の多い顧客のそれぞれに最も近い5つの店舗です。 、リストは続きます。
レポートをつなぎ合わせるのをやめる
この種のレポートを作成するための詳細を取得することは可能ですが、通常、スプレッドシートまたはレポートの一部として、Accessの外部で結果を手動でつなぎ合わせる必要があります。
次のコードは、Accessの外部でクエリ結果をいじる必要性を排除し、代わりに、上記のような結果を簡単に生成できるようにします。
まず、コードで実行できるようにすることの概要を説明しましょう。
「クエリを実行すると、x個の結果が返され、yで区切られた単一の文字列に結合されます」
始める前に
コードを見る前に、より汎用的でクエリの組み合わせを処理できるVBA関数を作成することは可能ですが、そうするとコードがかなり長くなるため、この記事で行うことに注意してください。ケースの例を定義し、そのケースを処理する関数を作成することです。 このようにすると、特定のニーズに合わせてコードを再作成するのがはるかに簡単になります。
サンプルケース
顧客の購入の詳細と、購入が属する製品のカテゴリを格納する販売データベースがあります。 上位3つのカテゴリを月ごとに降順で表示するレポートを作成します。
簡単にするために、例を単一のテーブルに保持しますが、プリンシパルはセットアップに関係なく機能します。 使用するテーブルは次のように設定されています。
| 営業 |
| 顧客名 |
| 取引日 |
| 取引価値 |
| カテゴリー |
明らかに、これは過度に単純化されたセットアップですが、あなたはその考えを理解します。
今–コード
Public Function CategoryList(Month As String, NumResults As Integer, SortAscending As Boolean, Delimiter As String) As String
Dim sSql, resultString As String
Dim rst As Recordset
Dim firstLine As Boolean
'Create our SQL string using the supplied parameters
sSql = "SELECT TOP " & NumResults & " [category] FROM sales GROUP BY Format([TransactionDate],""mmm""), sales.Category HAVING (((Format([TransactionDate], ""mmm"")) = """ & Month & """))"
If SortAscending Then sSql = sSql & " ORDER BY Sum(sales.TransactionValue) DESC;"
Set rst = CurrentDb.OpenRecordset(sSql)
firstLine = True
'Loop through the results, and create the string to return
With rst
Do While Not .EOF
If Not firstLine Then
resultString = resultString & Delimiter & .Fields("category")
Else
resultString = resultString & .Fields("category")
firstLine = False
End If
.MoveNext
Loop
End With
Set rs = Nothing
CategoryList = resultString
End Function
コード–説明

文字列に区切り文字を追加する必要があるかどうかをチェックすることに気付くでしょう。このチェックを行わないと、結果文字列の形式が不適切になるか、不要な区切り文字を削除するコードを追加する必要があります。このようにして、最初から物事をきれいに保つことができます。
もちろん、関数自体は、クエリ、レポート、またはAccess内の好きな場所から呼び出すことができます。
破損したAccessデータベースを修正する
あなたが遭遇した場合 破損したAccessデータベース 上記のコードを実行するときは、特殊なツールを使用してそれらを修復し、破損したデータベースからすべてのテーブルを回復することをお勧めします。
著者紹介:
Mitchell Pondは、のデータ復旧の専門家です。 DataNumen、Inc。は、以下を含むデータ復旧技術の世界的リーダーです。 SQLの問題を修復する と優れた回復ソフトウェア製品。 詳細については、次のWebサイトをご覧ください。 WWW。datanumen.com