Access VBA 質問スレ Part2

1デフォルトの名無しさん
垢版 |
2018/12/12(水) 22:14:39.18ID:GF6Qf3Td
Access の VBA に関する質問スレです

質問テンプレ(雛形)は用意しませんが、OSとAccessのバージョンぐらいは必ず書きましょう


前回のスレッド
Access VBA 質問スレ Part1
https://mevius.5ch.net/test/read.cgi/tech/1328536426/
27デフォルトの名無しさん
垢版 |
2019/03/09(土) 21:57:04.20ID:QAZD12fZ
excel vbaとaccess vba
どっちの方が実用的ですか?
2019/03/09(土) 23:04:33.82ID:M4mulWlp
>>27
必要に合わせてどっちも実用的
29デフォルトの名無しさん
垢版 |
2019/03/10(日) 00:06:55.04ID:PvuKZe7P
T_商品というテーブルを用意し、そこには次の内容が入っており、
商品      材料1 材料2 材料3
卵かけご飯    卵   米
お好み焼き    小麦  卵   豚肉
ショートケーキ  卵   小麦  苺
アップルパイ   りんご 小麦  牛乳

フォームに、材料A、材料Bのテキストボックスを置き、
検索ボタンを押すと、材料AかつBを含む商品が検索されるというVBAの記述に苦慮しています。
単独の材料であれば、VBAにSQLを組み込み、
SELECT * FROM 商品テーブル WHERE 材料1 = ' & 材料A & ' OR 材料2 = ' & 材料A & ' OR 材料3 = ' & 材料A & ' ;
こんな感じでできるのですが、材料が2つ以上になるとどうすればよいか見当がつかなくなりました。
アドバイスいただけませんでしょうか?
2019/03/10(日) 01:11:27.75ID:W5FlChvZ
>>29
1がAかB
かつ
2がAかB
かつ
3がAかB
じゃないかな…眠くて間違ってる気もする…
あと、候補がおおすぎないなら、テキストボックスはコンボかな…(フォーム起動遅くなるなど副作用もあったりするのでこの案は無視して可)
おやすみなさい…
2019/03/10(日) 01:18:29.26ID:W5FlChvZ
>>30
間違ってます。zzz
2019/03/10(日) 13:11:16.19ID:FsgNmDsH
>>29
悪いことは言わんから、まずテーブル設計見直せ
2019/03/10(日) 15:10:38.80ID:z6hGNEnV
馬鹿の次の質問

材料4を追加した時にはどうすれぱよいでしょうか?
2019/03/10(日) 17:44:21.19ID:f/eJ/LOS
>>27
そもそもExcelでは応用効かない
2019/03/10(日) 17:46:58.02ID:f/eJ/LOS
>>15
Visual Studio ExpressでDLL作れ
2019/03/10(日) 17:55:45.50ID:hFpGjFbx
>>29
そのテ―ブルはちょっと…
商品のテーブルと材料のテーブルで結合じゃね?
2019/03/10(日) 18:51:26.88ID:hpBR8lHx
accessは大昔にやってて今は持ってすらいないけど

該当行をdynasetで取り出した後
該当fieldから値を取り出して
if分で有るか調べれば出来たりしないか?
2019/03/10(日) 18:58:03.76ID:9Z3HOdWo
いくらでも増やしていいぞ

SELECT * FROM 商品テーブル
WHERE (材料1 = ' & 材料A & ' OR 材料2 = ' & 材料A & ' OR 材料3 = ' & 材料A & ')
AND ("" = ' & 材料B & ' OR 材料1 = ' & 材料B & ' OR 材料2 = ' & 材料B & ' OR 材料3 = ' & 材料B & ')
AND ("" = ' & 材料C & ' OR 材料1 = ' & 材料C & ' OR 材料2 = ' & 材料C & ' OR 材料3 = ' & 材料C & ');
2019/03/10(日) 22:38:23.14ID:mPydjeZt
いやぁぁぁぁぁぁぁ
2019/03/10(日) 23:14:01.04ID:hFpGjFbx
だから、材料フィールドを横に並べるのは作りが悪いだろ。
フィールド1個にして縦に並べるべきじゃね?
2019/03/10(日) 23:50:20.06ID:CvNRnyCH
unionで繋げばいいんじゃね
2019/03/11(月) 00:08:26.31ID:B6nWiYCU
設計の問題だろ。
できるできないの問題じゃない。

なんで使い勝手の悪いもんをわざわざ作らなきゃならんのよ。
2019/03/11(月) 08:04:29.38ID:fslMg+hg
取り敢えず動かすなら、
材料1〜4をカンマで連結した文字列の中に、AとB両方ある
と書けば人間にはわかりやすい
2019/03/11(月) 13:56:54.71ID:IRjWKGwj
まぁリレーショナルデータベースだから設計を変えるべきだけど
access使うような所なんて零細なんだから
そんなリファクタリングだのテストファーストだのモダンだのオブジェクト指向だのも関係無いような人材しか居ないんだから
vbaベタベタというのでやるしかない
みたいな感じなんだろう
その人がそれしか出来ないならvbaベタベタしか方法が無かったりする
この人がそうなのかは知らないけど
2019/03/12(火) 00:15:11.07ID:S+rkIDbC
普通の設計にしたとして
countが3以上の〜、とかやるのが正しいの?
なんか不安なんだが
2019/03/12(火) 12:34:12.09ID:xgWEcpqA
なんでcountなんて話になってるの?
商品テ―ブルと材料テーブルで結合するなら、商品テーブルには材料IDのフィールドが1つしかないんだから、材料IDのフィールドに材料AのIDと材料BのIDを持つ商品を検索するだけだよ。
2019/03/12(火) 14:56:37.82ID:4U4zzI9j
一つの材料IDフィールドに2つの材料IDをカンマ区切りで入れるのが正解なの?
リレーショナル全否定?
2019/03/12(火) 21:15:05.16ID:0vZ7cwHu
リレーショナルデータベースを前提にするならどんな設計が一番使い勝手がよいんだろうかね
2019/03/12(火) 22:39:48.12ID:o5cGPdg/
>>46
商品テーブル、材料テーブル、商品の材料テーブルを作って、こんな感じで

SELECT [商品] FROM 商品の材料
WHERE 材料 IN (Form!材料A, Form!材料B, Form!材料C)
GROUP BY [商品]
HAVING Count([商品]) >= Form!条件数;

材料A,B,CそれぞれのサブクエリをJIONするよりは速い気がする
2019/03/13(水) 08:11:10.52ID:mGUeq4U2
>>49
うん、基本的に同じ考えだ。
以下の書き込みをしようとしてたが、放置してた。

>>47
何を言ってるんだ?
俺はカンマ区切りなんて言ってないぞ。

リレーショナルが分かってるなら>>29みたいにゃならんだろうよ。
卵かけご飯の材料1の卵と材料2の米は、材料1を米、材料2を卵と取り替えちゃいかんのか?
そんなこと無いだろ。
こういう同じ種別の物を別フィールドにすると管理出来なくなるだろ。

商品         材料
卵かけご飯のID    卵のID
卵かけご飯のID    米のID
お好み焼きのID    小麦のID
お好み焼きのID    卵のID
お好み焼きのID    豚肉のID
ショートケーキのID  卵のID
ショ−トケーキのID  小麦のID
ショートケーキのID  苺のID
アップルパイのID   りんごのID
アップルパイのID   小麦のID
アップルパイのID   牛乳のID

こういう風にして商品マスタ、材料マスタ、商品作成の3テーブルにする。
しかし、商品、材料どっちのテーブルの場合もそうだが他に管理したい情報がないならそれぞれマスタテーブルやめてIDの所を商品名や材料名にしてテーブル減らしても良い。
その場合は最小1テ―ブルになる。
なお、>>46は商品マスタをやめて2テーブルにした場合だ。
2019/03/13(水) 11:51:37.19ID:SZfR/Pu+
仕様が解らないからアレだけど
そのhaving countだと同じ材料が複数行登録されていた場合に
フォームに設定した別々な材料で検索した時に検索しても且つ条件にならないんじゃないかな?
同じ材料を登録できないように作ってあれば問題無いと思うけど
その辺どうなんだろうか?
まぁ作りと要求次第だと思うけど
的外れだったらごめんよ
ちょっと気になったんで

複数列の場合に連結してから文字列検索で探すというのは
sqlが長く複雑になり難いかもしれないね

何にしても実現の仕方は色々有るね
その人の技量や置かれている状況次第だろうね
2019/03/13(水) 19:07:03.88ID:0FHnOJ4A
最初に不安だと書いているように私もCountは邪道だと思ってるんですよね
「なんでcountなんて話になってるんだ」と怒られる程度には

それで、いろいろな方法がある中で「王道」をご指導いただけないんでしょうか?
2019/03/13(水) 21:35:24.37ID:uWZ9EglX
>>51
基本的に、テーブルには誤りのあるデータは登録しない
逆に言うと、読み出したデータに誤りがあるかもしれないなら、全ての読み出し処理の後に全項目の妥当性チェックが必要になる
2019/03/15(金) 17:36:53.07ID:FQsGmuzT
製品テーブルと素材テーブルと連結用テーブルの三つつくる
あとIDいらんから消して
2019/03/15(金) 18:33:31.75ID:sIXN3DPH
idいらないのではってこと時々あるよね。
性別項目なんて"男"、"女"って直接入れてエエやんて思う。
2019/03/15(金) 18:46:17.04ID:sIXN3DPH
>>54
id使わないなら 1テーブルでええんとちゃう?
2019/03/15(金) 18:47:49.00ID:sIXN3DPH
>>56
余りにも近視眼でした
2019/03/15(金) 19:00:16.39ID:Yw8dh4/K
>>55
性別はboolでいい

ただしオカマちゃんなどに対応するため
Bool 肉体の性別
Bool 精神の性別
Bool 改造後の性別
Bool 住民基本台帳の性別
Bool 一般公開する性別
Bool セキュリティで保護された性別
などのフィールドを用意するのがベスト
2019/03/15(金) 20:17:51.87ID:GDnHo62/
SLC、MLC、TLC、QLCだな
2019/03/15(金) 21:26:19.10ID:dImV5MMR
オカマでも、男専、バイ、女専と分けないとトイレで掘られるリスクが
2019/03/16(土) 08:42:08.72ID:sYsfNqTH
Excel VBA質問スレが最後までいって終わったので、次スレ検索したらここが出てきた
Excel VBA質問スレの新スレはないのか?
2019/03/16(土) 08:43:02.89ID:sYsfNqTH
Excel VBA質問スレでもAccessの話が話題に出るので、ここと統合してもいいんじゃね?
VBAメインの話だろ
2019/03/16(土) 10:08:04.54ID:DkwCTpbs
>>29がダメな理由、データベースがわからない人にどう説明したら良いんだろ。
ウチの会社も、みんなこうやって作りたがるんだよな。

商品 1月売上 2月売上 3月売上 4月売上 ・・・
2019/03/16(土) 13:39:03.23ID:zPyGim4X
難しいだろうね
リレーショナルデータベースにおける正規化って
コンピューター的な都合でテーブルを分けてる
でも実際には依頼伝票と明細というものは
人間の感覚的には一体として扱う方が感覚的に自然だからそういう風になってしまう
何の為にリレーショナルで正規化をするのか?
というのをデータの不整合が起きないようにを集中化させる為である事を教えるしかないけど
コンピューターがどういう風に処理をすると
効率的だったり安全だったりするか
を理解しておかないと難しい
表計算の延長や通常の感覚のままだと無理だと思う
大げさに言うと
コンピューターサイエンスの知識が必要
って事になる思う
accessはリレーショナルな所を活用して効率化しているから結構難しい面が有る
どうしても無理なら

でも使うという手も有るw
2019/03/16(土) 17:31:16.60ID:3KVWdS7r
>>54
横槍ど素人でごめん。
連結用テーブルってのは>>50みたいなのでおkってことですか?
最近ACCESS初めて同じようなことしようと思ってます。
2019/03/16(土) 19:49:12.47ID:3keflQuI
>>65
そそ。
あそこに並んでる表を入れておくのが連結テーブル
あれがなぜ必要かはわかると思うので略
商品、材料テーブルの内容から、自ずと連結テーブルも必要になり、そういうテーブル構成になることは別に特殊なことではありません
2019/03/17(日) 08:42:17.71ID:n1sOdbaQ
こんなスレがあるぞ

VBAに関する質問はこちらへどうぞ
Excel、Access、Outlook分ける必要ないだろ

VBAなんでも質問スレ Part2 [転載禁止](c)2ch.net
https://mevius.5ch.net/test/read.cgi/tech/1432173164/
2019/03/17(日) 10:57:55.94ID:j70B1v+S
>>66
ありがとうございます。
実際は、製品のそれぞれの材料をどれくらい使ったかを管理する必要があるのですが、その場合、
製品テーブル
材料テーブル
製品と材料の連結テーブル
連結テーブルと使用量の入力用テーブルが必要になるイメージですかね?
VBAスレでしたね。テーブルの作り方はここではないのはわかってるのですが、何かこのあたりのテーブルやフォームの作成のヒントになる書籍とかあれば教えていただけませんか?
2019/03/17(日) 13:57:54.89ID:2pkDyHvs
excelとaccessはアプリケーションとして随分違うから分けた方が良い
excelの方が進みが速いし
access相談系ってここ以外に案外質問スレが見当たらないし(自分が知らないだけで実際には有るかも知れないけど)

分量で分けるなら
excel
access,word,outlook,その他?
みたいに二つに分けた方が良い

excelは利用している人の数が段違いだろうし
上の質問みたいに
材料1,材料2,...
みたいにするのはaccessでは合い難いけど
excelでは割とそういう風に使うから
違いは大きい
それにexcelvbaの方は見てないけど
accessとexcel勢で何か悶着有ったみたいだし

基本は分けた方が良い
2019/03/17(日) 17:33:15.64ID:5mJrF7aW
>>63
Excelに慣れて表を想像するから。
DBはリレーションを想像すべきで表を想像すべきじゃない。

>>64
リレーションに慣れてれば自然に正規化しようとするようになる。
2019/03/17(日) 23:33:28.89ID:L17xYYyd
>>68
まず、製品、材料、連結テーブルの中で使用量を格納できる(格納するのがふさわしいか)のはどのテーブルかを考える。
ふさわしいテーブルがなければ新テーブルを追加するが、使用量は連結テーブルに格納すればいいのではと理論建てて考えられるようになりましょう。

書籍は近所に大きめの書店があれば、自分の好みで選びましょう。図が多いとかカラフルなのが見やすいとか。
初級本は2、3回見ればあまり出番なくなると思いますが、どんなことができるのかとか効率よく知るのに有効です。
他は、逆引きとか、テクニック本とかがいろいろな処理を書く上で有効で、長く役立ってくれるでしょう。
2019/03/17(日) 23:53:15.91ID:L17xYYyd
>>63
データベースに限ったことではないが、最小限の入力(手間)で最大限の結果(伝票だけでなく売上集計や分析など)を得ることが目標。
平たく言えば、楽(効率アップ)しようと思わない人、そのために努力しようと思わない人には伝わらない。

オレは説得するのは諦めた。残業代増やしたい奴ばっかりだから
2019/03/18(月) 00:03:45.33ID:01/djhoo
馬鹿には無理

これが真実
2019/03/18(月) 19:45:55.30ID:WjETnlu5
構造ならSQLとかDBのアンチパターン解説本
>>65
他にも連結用テーブルはプライマリをフィールド二つの複合にして
それぞれに元テーブルとの外部キーつくること
2019/03/19(火) 06:30:11.40ID:4N2t7FIS
みんなこっちにいるよ
https://mevius.5ch.net/test/read.cgi/tech/1432173164/
76デフォルトの名無しさん
垢版 |
2019/03/19(火) 23:41:14.03ID:PLWGdEFL
馬鹿でも仕事をしなきゃならない
そういう人は材料1,材料2,...でやれるなら
それでやってもらうしかない
頭いい奴だけで後は生活保護で構わない
とかで良いなら話は別だけど?
その辺を理解出来ないアホが多くて困る
正規化を理解しないでaccess使っている人間と種類的には同じ
自分がやれる事が一番と思って他を考えていない
2019/04/25(木) 10:33:32.47ID:I6sE8Jku
32bitのAccess2016を使っています。
いままではinteger型で済むものはlong型にしてはいけない。メモリーの無駄遣いと思ってきました。
しかし、ベンチマークをとるとlong型の方が速いという主張を頻繁に見るようになりました。
数字は全部long型にした方がいいのでしょうかね?
2019/04/25(木) 11:52:04.10ID:vKKospK1
>>77
昔々はそうだった
しかし、今はあり余るメモリをたらふく使って、高速にとか、プログラム書きやすくとかになってる。
(もちろん限度ってものはある)

昔は8bitや 16bit CPUだから、長い桁は時間かかった。今は 64bitなので、それ以下に収まれば充分高速。
(数億回ループするのは稀なので、あるなら都度ベンチ取ってロジックなど決めるといい)
SIMDにより多く詰め込めるとかもあるけど、VBAでは多分使われてないから気にしなくていい

わざわざ longに直す必要はない。これからは気にせず long使っていい
2019/04/25(木) 15:22:48.68ID:I6sE8Jku
>>78
でも、longに直したくなりますよねw
標準モジュールは一括置換→保存で問題ありませんでしたが、
フォームでやってみたら、すぐにメモリー不足やら、フォーム破損が生じてしまいましたw
2019/04/25(木) 17:43:41.51ID:ImBWEqP9
馬鹿に教えるとロクなことをしない例
2019/04/25(木) 18:18:18.21ID:I6sE8Jku
実験用のコピーだよ。
楽しく実験するのがプログラミング上達の近道だと思うんだよね。
2019/04/25(木) 20:40:48.35ID:JpEf0ZAX
>>81
実験は大切。失敗もベンチ取るのも身になる。
実験ソースや結果も Accessのテーブルに分類して残しとくんだぞ
(オレは、ソースはモジュールに置いて、コメントに結果を書いてたりもする。もちろん他言語などはテーブルやプロジェクトにしてなど)
カンペ作ったときみたいに忘れないもんだが、将来の追試や数値が役に立つ(まれに)
2019/04/25(木) 22:25:13.99ID:CJM7ooRn
>>81
後付けの言い訳乙
実験するよう連中はこんなところで質問なんかせんわ
2019/04/26(金) 05:09:51.54ID:ebeJOjHo
>>83
Access界隈っこういう人が多い気がするなあ。
実験用コピーじゃなかったら真っ青になってるだろうなw
2019/04/26(金) 13:04:47.02ID:azgsbPV3
新人の頃は良く失敗した
数値フィールドをテキスト型で定義したり
データ、システム分離しなくてmdb破損させたり
手元の最新版壊して顧客PCまで最新版取りに戻ったり
2019/04/26(金) 14:38:58.61ID:xEyS3kHo
>>85
オレも最初の頃壊れ(し)まくって、Accessなんて使いもんにならんやんと思った
dbだから、排他とかできるんだし、別々のフォーム触るなら、皆で開発できるやろと 1つの共有mdbで開発やってたw

規模によるけどシステム分離はわざわざしないな
分離するのは、sqlserverとかにするときだけだ
2019/04/28(日) 22:30:01.14ID:h9q8OTE0
システム分離ってなんですか?
私もファイルが壊れてばかりで困ってます。
2019/04/29(月) 11:11:13.24ID:3KqibFAl
>>87
データベースでデ−タをどうこうする部分と、デ−タそのものを分離するということでしょ。

テーブルとクエリやフォーム、レポートを別ファイルにするという意味だと思う。
2019/04/29(月) 11:33:05.46ID:lr8PSWgy
>>87
>>88
テーブルとそれ以外に分けることです。
それ以外の方にはリンクテーブルを置いておけば、同じように処理できます。
複数人で同時にテーブル読み書きするときは定番のやり方です。
(一人でしか使わないなら、わざわざ分ける必要はありません)
テーブルの方はファイルサーバに、その他は各ローカルに置いて使います。

もう少し細かく言うと、ワークテーブルはそれ以外の方に含みます。
2019/04/29(月) 11:38:37.49ID:d82tlvl6
>>89
横からすんみません。
一人でしか使わない場合もフォームのコントロールを弄くるのが好きな人は分離した方が良いと思います。
コマンドボタンの位置を変更しただけでフォームが消えてしまったことが何度もありますから、
一人で使用する場合もカスタマイズ好きならデーターは分離した方がいいと思います。
9189
垢版 |
2019/04/29(月) 11:43:25.91ID:lr8PSWgy
>>89
ネットワークが遅い場合は、定数テーブルもローカルにとか、その辺は臨機応変に。
9289
垢版 |
2019/04/29(月) 12:16:08.84ID:lr8PSWgy
>>90
最近は個人的な作成しかしなくなったので教えて下さい。
そのファイルはmdb、accdbどちらですか?
(拡張子が変わって壊れにくくなったかとか、何が変わってどう影響するか細かくは調べてないです)
そのdbファイルはローカル/ファイルサーバどちらに置いてましたか?

ここ数年はツール的な小さなものを、accdbをローカルで作成してますが、壊れた経験はないです。
1つのフォーム内で、各処理をフレームで分けてあり、フレーム内にはテキストボックスやボタンなどがあります。
フレーム単位で、あっちやこっちに頻繁に移動はしてます。
(それでも、過去の壊れてた経験から、数日に一回最適化とバックアップはとってます)
2019/04/29(月) 12:36:13.73ID:d82tlvl6
>>92
mdbです。dbファイルもmdbでローカルです。
フロントエンド?(と言っていいのかしら?)が巨大で、100MBくらいあります。
業務用ソフトで中身は使用されていないゴミ変数やゴミプロシジャーが大量にあります。空のプロシジャーもある上に、それをcallしている謎のプロシジャーもあります。
str型の変数なのに、タイプするのが面倒くさかったのか、var型で宣言されている変数がこれまた大量にあります。
9489
垢版 |
2019/04/29(月) 13:14:19.98ID:lr8PSWgy
>>93
ありがとうございます。
今でもmdbで作り込みが大きいのは壊れやすいんですね。
以前は、新mdbに全部インポートして、リフレッシュ(ゴミ除去)とかやってました。
(最適化より小さくなるから、何か効果はあるんじゃないかと思って。)

accdbに全部インポートして、参照設定修正という方法もあるけど、業務用だと完全に同じ動きするかと問われると保証できないので、難しいだろうし。
時間やお金出るなら(これからも使い続けるなら)、機能(部署)ごとに分割とか、accdbに徐々に移行(プロシージャ修正整理)とかやっていきたいところですね。
2019/04/29(月) 13:47:50.96ID:QxflDRVF
SQLserver使おうぜ
2019/05/04(土) 18:38:16.45ID:ZGbBU4Ge
Accessはフロントエンドに使う
DBはMySQLでも良い
97デフォルトの名無しさん
垢版 |
2019/05/05(日) 01:45:20.23ID:PgstIp0W
一度に大量で複雑な更新をすると落ちやすかった印象は有るかなぁ
2019/05/07(火) 11:01:49.04ID:S4maxKz5
>>96
帳票とかからむと、手軽だもんな
2019/05/08(水) 19:00:39.16ID:PD4Nn61H
Accessは何たって帳票の作成が超簡単!
これがあるから離れなれない。
LibreOfficeやOpenOfficeにも帳票作成ツールはあるけど、
Accessほど使い易くはないのが、移行できずにいる大きな要因の一つなのは間違いない。
2019/05/11(土) 13:23:24.99ID:J8lUk67b
Office365でアプリアイコンが刷新されたがAccessは変わらない悲しみ
2019/06/03(月) 01:57:41.37ID:vn/O8vit
access2016使ってて2013のランタイム入れたらaccessが使えなくなってびびったわ
あわててシステムの復元して直ったけど
2019/07/17(水) 21:40:08.49ID:/Hg4fKFx
サブフォームのソースオブジェクトに、SQLを直接記入することはできないのでしょうか?
SQL文というものがそもそもオブジェクトでないから記入できないのでしょうか?
2019/07/17(水) 22:16:32.17ID:5Qt+TnNF
Formのオープン時にそのサブフォームのおソースを放り込めばできる
あとはメインフォーム上でサブフォームをいぢるイベント時に書くとか 例えばボタン押した時など
サブフォームはソース無し にしてるけど、自分は  そこへ放り込むやり方だと出来てる
104デフォルトの名無しさん
垢版 |
2019/07/17(水) 22:25:51.54ID:eXUk1Aqq
>>102
ビュー定義してソースに設定したら?
2019/09/28(土) 01:30:49.78ID:XSiAgIby
id  部門 販売品目
1  A  りんご
2  A  バナナ
3  A  りんご
4  B  バナナ
5  B  ぶどう
6  B  ぶどう
というテーブルから、
部署と販売品目が同じレコード数
(Aかつりんご、Aかつバナナ、Bかつバナナ、Bかつぶどう の数)をカウントしたいのですがうまくいきません。

販売品目単独では
SELECT 販売品目,Count(id)
FROM テーブル名
GROUP BY 販売品目
のようにすれば思うようにいくのですが、複数条件になると思うようにいきません。
お知恵を貸していただけないでしょうか。
2019/09/28(土) 02:03:10.80ID:hdiBTyMe
SELECT 部門, 販売品目, Count(ID) AS IDカウント
FROM テーブル1
GROUP BY 部門, 販売品目
HAVING (((部門)="A") AND ((販売品目)="りんご")
OR ((部門)="A") AND ((販売品目)="バナナ")
OR ((部門)="B") AND ((販売品目)="バナナ")
OR ((部門)="B") AND ((販売品目)="ぶどう")) ;
2019/09/28(土) 02:08:15.90ID:hdiBTyMe
もしくは
SELECT 部門, 販売品目, Count(ID) AS IDのカウント
FROM (
SELECT * FROM テーブル1 WHERE (((部門)="A") AND ((販売品目)="りんご")
OR ((部門)="A") AND ((販売品目)="バナナ")
OR ((部門)="B") AND ((販売品目)="バナナ")
OR ((部門)="B") AND ((販売品目)="ぶどう"))
) GROUP BY 部門, 販売品目
108デフォルトの名無しさん
垢版 |
2019/09/28(土) 02:22:14.79ID:hdiBTyMe
//シンプルにこれでもできたけどwhereの位置とか括弧とか間違えてない?
select 部門, 販売品目, count(ID) as カウント
from テーブル1
where (((部門)="A") AND ((販売品目)="りんご")
OR ((部門)="A") AND ((販売品目)="バナナ")
OR ((部門)="B") AND ((販売品目)="バナナ")
OR ((部門)="B") AND ((販売品目)="ぶどう"))
group by 部門, 販売品目
2019/09/28(土) 06:33:14.21ID:XSiAgIby
>>106
ありごとうごぞいます。
説明が不十分でした。
たしかにそのとうり記述すればできるのですが、部門や販売品目が増えていった場合に、全組合せを書き出さないでやる方法はないものかと考えております。
2019/09/28(土) 09:36:23.69ID:hdiBTyMe
まだ説明不足かと
組み合わせを指定しないと絞り込みはできないし
クエリビルダーでちゃちゃっと作った最小形が>>106
絞り込み条件のテーブルを他に作ってリレーションとる方法もあるけど
111デフォルトの名無しさん
垢版 |
2019/09/28(土) 21:47:53.70ID:w31BDneZ
>>105
要件定義すらまともに書けない馬鹿だからSQLの基本もわかっていないのかね?
どこにも部署なんてないのだが
2019/09/28(土) 23:50:31.47ID:Bvcc+55+
Ruby なら、

require 'csv'

str = <<"EOT"
id 部門 販売品目
1 A りんご
2 A バナナ
3 A りんご
4 B バナナ
5 B ぶどう
6 B ぶどう
EOT

# 空白区切りで、ヘッダー有り
options = { :headers => true, :col_sep => " " }

# Hash.new で、初期値は、{ }
hash = CSV.parse( str, options ).each_with_object( Hash.new { |h,k| h[ k ] = { } } ) do | row, hash |
dep = row[ '部門' ] # department
item = row[ '販売品目' ]

if hash.dig( dep, item ) # Ruby 2.3 から
hash[ dep ][ item ] += 1
else
hash[ dep ][ item ] = 1
end
end

p hash
#=> {"A"=>{"りんご"=>2, "バナナ"=>1}, "B"=>{"バナナ"=>1, "ぶどう"=>2}}
2019/09/29(日) 07:32:11.18ID:V4rAOO4u
>>111
いきってないで答えてやれよヴァカw
2019/09/29(日) 09:35:48.11ID:l54OkWQk
AccessならGurupByしたクエリを名前を付けて保存しておくのが正解
サブクエ遅いから
2019/09/29(日) 19:47:04.97ID:mdCYdpYZ
普通に部門販売品目でソートしてから
dynasetからvbaでカウントしたら駄目なの?
sql文を捏ね繰り回すよりその方が簡単な気がするけど?
116デフォルトの名無しさん
垢版 |
2019/09/30(月) 00:02:54.58ID:ELYMfL9+
質問者が一番馬鹿だが答える方も馬鹿ばっか
2019/09/30(月) 00:24:58.55ID:K8zar7Eh
なのでこのカウントの質問、ここで終了!
2019/09/30(月) 10:47:04.29ID:6yDcPDBq
どうしてもsql文でやりたいなら
他のsql系統のスレで聞いたほうが良いと思う
accessはsqlとvbaを組み合わせて使えるので
込み入り難いからやり易い面が有る
自分は割りとそういうやり方をしてしまう
けど他のリレーショナルデータベースはsqlを駆使しないといけない場面が多いだろうから
その手の方面の人の方がsql文に詳しい人が多いと思う
sql文の質問をしても構わないと自分は思うけど一応vbaスレなんで
2019/09/30(月) 23:29:21.37ID:GbU6Rrgw
他のリレーショナルデータベースはもっとましな言語で使うんだよ
2019/10/05(土) 14:25:32.14ID:pEFp3YWl
""とclearcontentsの違いが明らかになったな
2019/10/05(土) 14:25:47.70ID:pEFp3YWl
誤爆です
2019/10/22(火) 14:54:31.07ID:Si05vw2X
俺なら
SELECT [部門] & [果実] AS 式1, Count("HOGE") AS DUMMY
FROM テーブル1
GROUP BY [部門] & [果実];
123デフォルトの名無しさん
垢版 |
2019/10/30(水) 06:50:33.11ID:q0119UkA
普通の関数を使ったSQLがコンパイルエラーで通らなくなるのは、ずっとあるバグなの?
文字列中に含まれるスペースをなくした列同士を比較したいだけなのに
2019/10/30(水) 08:05:14.44ID:QrHO4Al6
DBに上げる前のデータ加工はExcelとPowerBIについてくるPowerQueryで完結させる
DB自体は何でも良い
Accessはフロントエンド

こういう感じの運用が一番融通が利いて楽
2019/10/31(木) 14:53:16.10ID:3aW6/Vt0
>>123
通ってたのが通らなくなったなら参照設定確認が最初の一歩
2019/10/31(木) 16:05:52.19ID:IlVblaPX
optionala argumentについて教えてください。
https://tsware.jp/tips/tips_119.htm では 引数を Optional かつ バリアント型で宣言する と書いてありますが、
総本山の https://docs.microsoft.com/ja-jp/office/vba/language/concepts/getting-started/understanding-named-arguments-and-optional-arguments では
あっさりと string型 で宣言しています。どっちが正しいのでしょうか?

それと、プロパティーシートから 関数を呼び出すときに引数を省略できますか?エラーばっかり出てしまうので,不可能という気がしてきますが、実際はどうでしょうか?
2019/10/31(木) 16:14:24.18ID:IlVblaPX
ひとつ解決しました。
ここ https://bettersolutions.com/vba/macros/optional-arguments.htm に Remember that IsMissing will only work with the Variant datatype. と書いてあるので、
IsMissingを使いたい場合にvariant型である必要があるだと思います。

プロパティーシートからcallするときに省略可能かどうかはまだわかりませんね。
レスを投稿する

5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況