🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

Q&A

解決済

2回答

4551閲覧

Access 空白を詰めて表示したい

退会済みユーザー

退会済みユーザー

総合スコア0

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

0グッド

0クリップ

投稿2020/11/26 04:11

編集2020/11/26 04:33

下記のようなデータがあります。
区分はa~zまであり、IDによって存在する区分数が違います。(1つのIDで最大24区分存在する)
ID |区分
001 |a
001 |b
001 |c
001 |d
001 |e
002 |c
002 |d
002 |f

それを、下記のようなテーブルを作成したいのですがどうすればよいでしょうか。
①IDごとに区分を列方向に表示させる※詰めて表示する
②詰めて表示させ、区分24までに満たない場合は「""」を表示させる
ID |区分1|区分2|区分3|区分4|区分5|・・・|区分24
001 |a  |b  |c  |d  |f  |・・・|""
002 |c  |d  |f  |"" |""  |・・・|""

クロス集計クエリを検討したのですが、それだと空白を詰めて表示ができない為
困っています。
エクセルVBAであれば、空白を左詰めできるのですがAccessで実行したいです。
宜しくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

②詰めて表示させ、区分24までに満たない場合は「""」を表示させる

クロス集計クエリーでは「クエリ列見出し」プロパティを指定する事で列を固定する事が出来ます。

クロス集計クエリの列見出しを固定するには?
Accessのクロス集計で列を固定する

但し、固定するためには値の指定が必要になりますので、その目的用の項目を追加する事になります。

ID 区分区分名
001a区分1
001b区分2
001c区分3
001d区分4
001e区分5
002c区分1
002d区分2
002f区分3

追記

縦を横に結合した文字列という目的であれば、yu-tangさん謹製のDjoin関数があります。
※旧サイトは閉じられているので、上記はアーカイブです。
但し、速度は期待できませんが。
また、空の部分に詰めるのは改造が必要ですけど、一から行うよりは楽でしょう。

投稿2020/11/26 04:59

編集2020/11/26 07:35
sazi

総合スコア25327

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/11/26 06:28

ありがとうございます!区分名(区分ごとに連番)で作成してみます。
退会済みユーザー

退会済みユーザー

2020/11/30 16:31

Djoin関数を理解しようと試みたのですが、難しく断念しました。 が、クロス集計での対応策をご教示くださり大変参考になりました。 ありがとうございました。
guest

0

ベストアンサー

最終目的はなんでしょうか。
印刷出力が目的なら、レポートの設定でできるのでそちらでした方が簡単です。

そのようなレイアウトのテーブルはデータベース的には無意味なのものなので、標準ではそのような機能はないです。
やろうとすると複雑なクエリになるか、VBAを使うかなど面倒なことになります。

一応レポートでする場合の回答を提示します。

テーブルをもとにレポートを作成して、[ID]フィールドでグループ化してグループヘッダーを表示させます。グループヘッダーセクションに[ID]フィールドを配置します。
グループヘッダーセクションの「改段」プロパティを「はい」にします。

詳細セクションには、[ID]フィールドを配置します。

レポートの幅は1列分の幅にします。

リボンのページ設定→ページ設定→レイアウトタブで「列数」を最大列数に設定します。

以上です。

投稿2020/11/26 04:33

hatena19

総合スコア34073

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/11/26 04:42

最終目的はレポートではありません。 エクセルで更新していたものを、容量が大きく時間がかかるためAccess化しようとしているためです。 ですが、やはり向いていないですよね。。 空白を詰めて表示するのはエクセルVBAをつかい、後の更新作業をAccessで作業したほうがよいのかもう少し考えてみます。
hatena19

2020/11/26 05:03

エクセルのデータをAccessに移行するなら、エクセルでのデータの扱い方はいったん忘れた方がいいです。 Accessはリレーショナルデータベースでのそれに合わせてデータの持ち方(テーブル構成)にする必要があります。エクセルでのデータのままではデータベースの機能が活かせません。 「データベース 正規化」でWEB検索すると解説ページがいろいろ見つかりますのでそれで勉強してから移行に取り組んでください。 一応Accessでの正規化の実例として下記リンクがあります。 正規化の実例 - もう一度学ぶMS-Access https://www.accessdbstudy.net/entry/20140925/p1
hatena19

2020/11/26 05:08

レポートでなければ、質問のような横展開のテーブルを作成して、それをどのようにつかうのでしょうか。
hatena19

2020/11/26 05:28

saziさんの回答にあるようにフィールドを追加してID毎の連番を入力すればクロス集計クエリでご希望のレイアウトは可能です。下記で連番を自動入力する方法を紹介しています。 グループ毎連番を自動入力する関数 - hatena chips https://hatenachips.blog.fc2.com/blog-entry-428.html
退会済みユーザー

退会済みユーザー

2020/11/26 06:42

連番の自動入力の仕方をご教示いただき、ありがとうございます。 仰る通り、データベースの機能を生かせていないですね。 連携されるデータ自体が横展開となっており(ここは変えられず)、苦戦しております。 やりたいことは、IDごとに区分を繋げていきたいのです。 001→「a,b,c,d,e,"","","",""」※最大区分24が埋まるまで”” 002→「c,d,f,"","","","","",""」最大区分24が埋まるまで”” ID別に「」を作りたいため、区分を横展開して&で繋げようと考えていました。エクセルではVBAを使って空白を左詰めして作業できていたのですが、Accessで同じ結果を出すのに試行錯誤しております。。
退会済みユーザー

退会済みユーザー

2020/11/26 06:48

ちなみに、連携される横展開のデータを正規化したのが質問したリストになります。
hatena19

2020/11/26 07:13

1フィールドに「a,b,c,d,e,"","","",""」を格納したいということでしょうか。 ならば、saziさんの回答のリンク先の方法でクロス集計クエリて列数を固定していったん保存して、それをもとクエリを作成してそこの演算フィールドで&でつなげる式を設定することになりますね。 VBAが使えるならVBAでやる方法もあります。
退会済みユーザー

退会済みユーザー

2020/11/26 07:21

はい、1フィールドに「a,b,c,d,e,"","","",""」を格納するかたちです。 VBAはエクセルだと簡単ですが作成できるのですが、初心者ですと難しいでしょうか。
退会済みユーザー

退会済みユーザー

2020/11/30 16:33

なんとかできました。いろいろとアドバイスいただき有難うございました。 この後の手順もあり、まだまだ先は長いのですが完成まで頑張りたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問