Access総合相談所 30
■ このスレッドは過去ログ倉庫に格納されています
ACCESSに関する質問はこちらへ
▼━ 質問のしかた ━━━━━━━━━━━━━━━━━━━━
★ 質問内容は具体的に書いてください。
業務上の守秘義務も大事ですが、貴方の所属組織を特定できるほど、特異な業務・システムは滅多にありません。
作りたいものの内容を隠しすぎないようにし、列名、データ値を適当に変更して例示するなどしましょう。
★ 事前にGoogle等で調べられる範囲は調べてください。
★ 完全初心者はまず、新規作成テンプレから「NorthWind」を開いて、一通り触ってみてください。ACCESSの概念を理解する
もっとも簡単な方法です。
★ お金の管理でシステム設計ミスが会社経営に重大な支障が予見される場合は、パッケージソフトに誘導する場合があります。
格安なソフトもあるので設計に取りかかってから悩む前に、市場調査も行なってください。
★ アドバイスを貰ったら、必ず経過・結果の報告をして下さい。
ギブアンドテイクで情報を共有しましょう。
▼━初心者用質問テンプレ ━━━━━━━━━━━━━━━━━
【Windows】 7, 8,10 【Access】 365,2013,2016,2019
【作りたいものの業務分野】
販売管理,買掛管理,営業予算管理,営業実績管理,生産管理,財務管理,労務管理,学術研究統計,文字格納を主体としたDB,その他()
【あなたのスキル】
LV1:完全初心者,
LV2:ACCESSの基本要素(テーブルやクエリーなど)の役割を知っている
LV3:VBAが打てる
【どのオブジェクトに関する質問か】
テーブル,クエリー,フォーム,レポート,サブフォーム(サブレポート),リレーション,VBA
【やりたいこと】
(質問によっては各テーブル名と列名を例示)
(クエリーの場合は、左上の「表示」を押し”SQLビュー”に変更して表示される”SQL文”を貼り付けると回答者がわかりやすい)
(得たい出力結果や挙動)
【エラーメッセージに関する質問】
・エラーメッセージの内容 ・windowsは32bit版か64bit版か
前スレ
Access総合相談所 29
https://mevius.5ch.net/test/read.cg/bsoft/1569236545/ >>170
どうやってインデックスするのかよくわからん テーブル内にある重複レコードを削除したいんですが、どうすればいいんですかね? countが2以上のfirstなkey以外はdelete マクロでやれば?
配列に順番に入れてく感じで
入れるたびにこれまでの配列に同じものがあるか確認して、あれば入れない、なければ入れる
最後に配列の値をテーブルにする すまんcountはいらないか
先にダブりを確認したければ数えればいい
そして削除するより新しいテーブルに吐き出すほうがクエリ的には簡単
グループ化するだけで重複してないデータがとれるから クエリなら>>177の通り、グループ化すれば一発
もしくはカウントして2以上のやつを全部削除して1つ入れるか、1つ残して全部削除すればいいんじゃないの
それがわからないならマクロでもできると 俺は全くわからないけどな
情報が全く提示されていないから回答のしようがない
作りやすさ・答えやすさより実行コストを考えたいからな 情報がなくても一般的に
select 必要な項目 from テーブル group by 重複させたくない項目
でできるだろ >>183
元テーブルの整理をせずに常時グループ化するなら参照回数が多いと無駄だし
大量のテーブルに少量追加して重複チェックするのなら新規テーブルにコピーするのは無駄だ
そもそも主キーがあるのかすら分からない Accessのインストールに関してもここで質問していいですか? 解決するかどうかは別にして、どんどん質問書いてみて。 フォーム上のテキストボックスのフォントカラーを変えるために
コンボボックスで色の一覧を表示させ選択した色で対応したいのだけど
コンボボックスに表示する色の一覧をカラーパレットのようなものにできますか?
または一覧は「赤、黒、青...」などの文字でもいいけどその一覧の文字に
それぞれの色をつけて表示することは可能でしょうか? できるか、可能かと聞かれれば、できる、可能と答える
ではどうやってと聞かれれば、一言で説明できないレベルなので答えない 【Windows】10 【Access】 365
【作りたいものの業務分野】
主に顧客管理
【あなたのスキル】
LV2:ACCESSの基本要素(テーブルやクエリーなど)の役割を知っている
LV3:VBAが打てる
【どのオブジェクトに関する質問か】
フォームオープン時のID指定によるデータ抽出
【やりたいこと】
顧客一覧から顧客を選択した後、当該顧客の対応履歴や販売商品をボタン切替等でフォーム表示したいと思っています(対応履歴等に表示するのは全顧客のデータではなく当該顧客のみのデータです)。
このような場合、ボタン押下のフォームオープン時に顧客IDをもとにしたデータ抽出(顧客IDによるwhere)を行う必要がありますが、その方法について迷っています。
(方法1) DoCmd.openFormのWhereConditionを利用しフォームを開く
(方法2) DoCmd.openFormのOpenArgsで顧客IDを渡し、開いたフォーム側のレコードソースに(顧客IDによるwhere条件の)SQLを設定
書籍等で紹介されていたり手軽なのは方法1と思いますが、この場合は開いたフォームに「フィルタ」がかかっているのが気になります(open時にレコードセットを作り、更にフィルタをかけたレコードセットを作成するのでしょうか?だとしたら方法2に比べ遅くなる?)
個人で使う小さいシステムですのでどちらの方法でも良いのかもしれませんが、後学のためにも皆さんのおすすめの方法やご意見を伺えれば嬉しいです。 >>192
素早いご返信をありがとうございます。
要約すると、Where条件を付けてフォームオープンする場合はどの方法がおすすめでしょうか?
(方法1だとフィルタがかかるため速度が遅くなるのかな?と気になっています。)
(方法1) DoCmd.openFormのWhereConditionを使用
(方法2) DoCmd.openFormのOpenArgsでIDを渡し、開いたフォーム側のレコードソースのSQLでwhere指定
(方法3) 好きにしなさい じゃあ速度を測定すればいいでしょ
データがないならダミーデータでも作ればいい それはそうなのですが、Accessを触り始めて数カ月で経験が浅いため、
皆さんがどういう方法を採っているのかや使い分けなども
参考にしたくて投稿しました。 できるんなら何でもいいんじゃないの
それで重くなったらその時考えればいい openFormとかでSQL指定するくらいなら
Form開く前にクエリ稼働させる方が実用的だよ >>197
ありがとうございます。そうですよね、余り深く考えない方が良いのかもしれません。
>>198
ありがとうございます。クエリを使用する方法は思いつきませんでした。
その場合ですが、例えばクエリ「Q_対応履歴」を作って、
クエリの顧客IDフィールドの抽出条件に「forms!F_顧客!顧客ID」等を記述。
ボタン押下時にそのクエリーを元にしたフォームをopenするようなイメージでしょうか? >>199
ボタン押下のVBA部分で
クエリ実行
openForm
を記述すれば良い >>200
ありがとうございます。
しかし、私の知識・経験不足でご教授の方法のイメージが湧かず理解ができていません。
お手数をおかけしてすみませんが、もう少し詳しくお聞き出来れば嬉しいです。 >>201
ボタンの付いてるFormをVBAデザイナで開いてボタンをダブルクリックしたらVBAエディタが出るから、そこにコーディングするだけ >>202
ありがとうございます。流石にそこは承知しています。
お聞きしたいのは、「クエリ実行 openForm」という部分です。
「Form開く前にクエリ稼働させる」と関係すると思うのですが、
考え方や具体的な命令がイメージ出来ておりません。 完全外部結合を作りたいのですが、結合プロパティだけじゃ設定できず、SQL直接かかないと実現できないでしょうか? >>203
いきなりVBA出来ないなら
マクロ組んで見れば良い
それをVBA化すれば良い そのレベルはもう出来てるだろ
どーやってパラメータ渡すのがいいかを聞いてるんだからさ
ACCESSの場合テーブルデータにはダイレクトにアクセス出来るから
後でフォームフィルターをかけてもほとんど遅くはならない
ただしSQLサーバーのクライアントとして使うなら「フザケンナ」って言われるだろう
フィルター状態が嫌ならformのRecordSourceにSQLぶち込んでやってもいいんじゃない? 各フォーム入力用のテーブル(1行だけ)を作っておけばSQLがシンプルになる
複数人で単一MDBの使いまわしは出来ないけとね
ボタン押した時にレコード保存するのを忘れずに >>205
失礼なのですが話がどうもかみ合っていない気がします。
>>191 や >>194 を見て頂いて、方法1や方法2のレベル感で
教えていただけないでしょうか?
興味がありますし、こういった情報の共有は皆さんにも有用と思います。
(>>199 のやり方とも違うようですし、「クエリ実行 openForm」の情報だけだと
大雑把すぎて理解できません。VBAやマクロ、SQLは一通り扱えます。) >>206
コメントいただいてありがとうございます。
フィルタ状態は正直ちょっと気持ち悪いのですが、
速度がほとんど遅くならず、SQLサーバへの移行も当面考えられないので
方法1が手軽で良さそうですね。
教えていただいてありがとうございます。 >>208
DoCmd OpenQueryでVBAに書き込むだけでしょ
FormのフィルタにするとForm開くの遅くなる >>204
クエリデザイナ?画面にテーブル2つ表示して
結合線を引かなければいい 横からだけど 210 の人は説明を端折りすぎ。質問者の方は理解できないなら拘らなくていいよ。
実用上の差はほとんどない。 >>211
意外!そういう事でしたか、ありがとうございました >>214
クエリーの中身が分からないので
ユーのやりたいことが分かりません 生年月日から年齢を求める計算で、
年齢: IIf(Format(Date(),"mmdd")<Format([生年月日],"mmdd"),
DateDiff("yyyy",[生年月日],Date())-1,DateDiff("yyyy",[生年月日],Date()))
みたいな例をwebで見かけますが、
Datediff(略)−IIF(略,1,0)で問題ないと思いますが何故前者の例が多いのでしょうか?
視認性でしょうか?速度? このスレで質問するのもどうかと思うけど
今から作るならaccessよりもシェアポイントにデータ上げて
powerappでやる方がよさそうですかね? おだって作り替えた1の文言、
大不評だったから
やっぱ元に戻してって言ったのに。
針のムシロだわ。
今は、少しaccess離れて、webアプリを作るためにphpやらjavascriptと格闘中。
powerappsを使う経費も貰えない。 集計フィールドで氏名を分割したいのですが、left関数とInStr関数を使うと構文エラーが出て困っています。
そもそも集計フィールドでこのようなことができないのでしょうか? instrって使えたっけ?
使えるなら引数の順番とか個数かな AccessってFXのローソク足グラフ作れね〜じゃん なんか水を差すようで悪いが、運送業向け勤怠管理用パッケージソフトウェアじゃダメなんか?
内製しなきゃあかんなら、Accessなりなんなりで作らなきゃいかんが... こちらで質問するのは初めてになります。不備がありましたらすみません。
【Windows】10 【Access】 365
【作りたいものの業務分野】
評価出力
【あなたのスキル】
VBAは勉強しています
【どのオブジェクトに関する質問か】
クエリー、レポート
【やりたいこと】
評価が3人行っているデータベースがあります(一次、二次、三次とします)
DB上
配属 氏名 種別 評価
△△ ○○ 一次 A
△△ ○○ 二次 B
△△ ○○ 三次 B
△△ ■■ 一次 A
△△ ■■ 二次 A
△△ ■■ 三次 B
これをクエリ上で整形してレポートで出力したいと考えています
クエリーで行いたい整形は以下の形です
配属 氏名 一次 二次 三次
△△ ○○ A B B
△△ ■■ A A B
クロス集計にするための部分は数値じゃないため使用できないのですが、
このような形にするには、一次、二次、三次のクエリーをまずいったん作成して
統合するクエリーを作成するしかないでしょうか さらに追加ですみません
上で述べた形に整形したときに
抜け(null・空欄)があっても表示するようにしたいと思っています
配属 氏名 一次 二次 三次
△△ ○○ A B B
△△ ■■ A B
accessでクエリーを作成するとき、値が空欄でも全て表示させるというところでいつも躓いてる気がします… 評価も1,2にすればクロス集計にしなくとも間に一つクエリを噛まして選択クエリでできるな ありがとうございます!
種別や評価なんかはリレーションシップ使用して
見た目は文字列だけど内部は数値のようにしていくのが本来は良いんでしょうね
今DB自体はシェアポイントにぶち込んでて、リンクをアクセス内に持ってきてたのですが
一度リレーションシップがエラーになってしまって…
上記の問題はレポートにラベルで疑似的な表を作って、VBAでDBから該当場所に値を設定していくように無理やりしました
レポートやクエリーが本当難しくて、VBAに逃げてしまいます…
https://imgur.com/c3YFYeq.jpg >>VBAに逃げて
一番ダメなパターンだな
クエリー駆使してデータ加工するのがAccessのキモなのに >>233
ありがとうございます
本当にいい加減脱却したいです
年、期、種別、部門、氏名、評価内容、評価というようなフィールドがあったとして
https://imgur.com/c3YFYeq.jpg
種別、評価を数字に変更したとして、
クエリでを駆使して上のような画像のような一覧を作成させるには
どのように整形させればよいのでしょうか ピボットはアクセスでもできる
マクロをコピペすりゃいい 列方向の2ペインってアクセス内ではVBA噛ませないと無理かも。
フィールド項目はそれで合ってると思うので
開発時間をかけたくないなら、EXCELに外部接続で流して
あとはピボットテーブル処理にしたほうが、見た目の手直ししやすい。
項目設定もビジュアル操作で完結するし。
ACCESS上からすぐ呼び出したいなら、
シェアポイントなりonedriveなりEXCELファイルの
URL仕込んで、ハイパーリング挙動にしたら良い。
個人的には、これって一覧表にする必要ある?という気もするが。
評価項目も多いだろうし、評価者が3段階もあれば
もはや「一覧」の域を逸脱しているというか。
やれ、と言われたからやってるんだろうけど。
あとTRANSFORMでは基本的に、X軸方向は有限的かつ固定的項目、
Y軸方向は無限的項目が普通なので、評価項目が20項目程度で
済む場合、XY逆だろうな、という気もする。(3人なら
別にいいんだけど)
そういうデータ設計論をぶっとばす優しい機能てんこもりなのが
EXCELのいいところです。 docmd.saveてバグってないか?
俺はフォームを開いてるのに、docmd.saveするとフォームが開いてないと怒られる。
おかしな挙動はここにも書いてある。https://tsware.jp/study/vol4/docmd_7.htm
>>'"frm社員マスタ"を上書き保存します
>>DoCmd.Save acForm, "frm社員マスタ"
>>と、オンラインヘルプの「使用例」にならって書いてはみたものの、実行するとエラーになってしまいます。
>>フォームのデザインを変更してフォームを閉じようとすると「変更を保存しますか?」というメッセージが出ますが、
>>フォームの読み込み解除時イベントなどでこのメソッドを実行してみても、やはりそのメッセージは出てしまいます。このメソッド、どのような使うかよく分かりません。 VisualStudio, MSSQL Expressをただで配ってるだろ
好きなUI使え 初めて質問させていただきます。
初歩的な内容で大変恐縮ですがお知恵をお借りできれば幸いです。
【Windows】10 【Access】 2016
【作りたいものの業務分野】
勤務記録
【あなたのスキル】
Lv2
【どのオブジェクトに関する質問か】
テーブル、クエリ
【やりたいこと】
Mod演算子を使用すると小数点以下が自動的に四捨五入されてしまいますが、四捨五入せずに元の数値をそのまま取得することはできないのでしょうか。
他にも\を使い
A - (A \ B) * Bのような式を作っても上手くいかず…
たとえばA=9.5、B=10
で計算すると-0.5となってしまいます。
何か良い方法がないものかと色々調べてこちらにたどり着きました。
お力添えのほど何卒よろしくお願いいたします。 >>247
何をしたいのかは知りませんが Mod 演算子の仕様です
小数部分はすべて切り捨てられます 皆様お返事いただきありがとうございます。
仕様ということであれば諦めるしかないですが、一応何がしたいかだけ申し上げたいと思います。
長文になってしまい大変恐縮ですが、中途採用社員の過去の経歴に基づき、給料を決めるためのデータベースを作成しております。
@DateDiffで他社に居た時の雇用期間を算出し、所定の換算率を乗じます。
A換算率を乗じた年月を年と月に分けて算出、という事をやりたいです。
より具体的に言うと、例えば他社にH31.4からR3.3まで勤めていた者が、R3.4に弊社に採用となった場合、勤めていた2年間(24月)に90%を乗じて、1年と9.6月(21.6月)という期間を算出したいです。
上記の例で言えば、Int関数で21.6月を12月で割り→1(年)、21.6月をMod演算子で12月で割り→9.6(月)という風にしたいのですが、四捨五入されて10月になってしまいます。
年 月 年 月
正:1 9.6 → 誤: 1 10
説明が下手ですみません。
あまり外部に情報が漏れないようにざっくりとした説明しかできないですが、概要としては以上です。
長文失礼しました。 >>251
上の方で誰かが書いていますが
n倍して Mod の結果を 1/n で戻せば良いんじゃないでしょうか?
n は 10 とか 100 とか必要な少数桁数分で お返事いただきありがとうございます。
なるほど、そんな事にも気付かず大変恥ずかしいです。
それで試してみたいと思います。
お忙しいところ、ご教授いただきありがとうございました。 最近のアップデート後だと思うが、添付データのダイアログボックスが
英語になってしまった
実用上は問題無い
他のコントロールオブジェクトでも同様の問題が発生しているかも アカウントの所で表示されるバージョン情報で
2104/2015は問題無かったが2016で英語になってるな Windows11対応AccessになってUI変わるのかw 今朝、Windows11のベータチャンネルが使用出来る案内が来たので入れてみました。
ACCESSのコマンドボタンが若干変わって見える以外は今のところ問題無いようです。 いや、Windows11用のUI版になるらしい、office全部が そうですか。ACCESS365ですが今のところ大した違いは無いみたいです。 Microsoftは米国時間6月28日、「Windows 10」と「Windows 11」向けのデスクトップ版「Office」アプリのデザインを「刷新」したバージョンを「Office Insider」プログラムのテスター向けにリリースしたと発表した。
この刷新はWindows 11で「最大限の効果を発揮する」が、Windows 10にも対応している。 アカン
おっきいのはSQLサーバーかアズール使ってください 2GBは知らなかった。
データファイル分離で使ってて
ファイルサイズ自体は4GBくらいになっても問題ないけど
実データサイズが2GB越えられないのかな。 win11でフォーム開くと、コマンドボタンの他にスクロールバーが変わってますね。マウスオーバーで上下矢印が表示されてバーが太くなります。 >>260
どういうのになるんですか?
AccessのUIには辟易していたので改善されるならうれしいです レポートでフィールドの文字をきっちりまんなかに表示させて、余計な隙間つくりたくないんですが目分量歯科できませんよね?
■ このスレッドは過去ログ倉庫に格納されています