Microsoft Access 掲示板

views
4 フォロー
6,283 件中 2,081 から 2,120 までを表示しています。
1
りんご 2023/01/06 (金) 14:27:43 4d616@0e907

まず、現在のSQLを提示する事は可能でしょうか?
次に、テーブルを説明して下さい。組織1と組織2の違いは?連番1組織1と連番2組織1の違いは?旧組織テーブルに新しい連番を追加する場合と新組織テーブルに新しい連番を追加する場合がありそうだけど、使い分けのルールは?

5
武蔵 2023/01/04 (水) 11:14:51 a09dc@56a68

返事が遅くなり申し訳ありません。
意図していることが出来ました、ありがとうございました。
今後もよろしくお願いいたします

1
えいじ 2023/01/02 (月) 22:49:00

新年早々お騒がせしました。
選択していたデータベースが間違っていました。
無事接続できました。

4
hatena 2023/01/01 (日) 16:39:14 修正

クロス集計クエリを元にするのではなく、テーブルを元に作成してみてください。

画像から推測すると「モダン グラフの挿入」でグラフを挿入したのだと思いますので、下記が参考になるかと思います。

ACCESSでグラフを作る方法 - たすけてACCESS

とりあえずこちらで下記のような感じでサンプルを作成してみました。

ソースのテーブルは下記のような感じで。

画像1

フォームに「モダン グラフの挿入」でグラフを挿入して下記のように設定しました。

画像2

3
武蔵 2022/12/31 (土) 12:01:00 a09dc@56a68

追記
画像が小さくみにくいのですが、右側がExcelで1~12月それぞれ3年分のグラフになっています
左側がACCESSで、それぞれの年に12か月間のデータが入ってしまいます。
ACCESSの表はクロス集合でExcelの表と同じです。(ただしクロス集計なので1月の左に合計欄が出来ています。)

2
武蔵 2022/12/31 (土) 11:51:38 a09dc@56a68

画像1

早速ありがとうございます。サンプル作成(画像貼り付け)に手間取っています。
とりあえずアップロ-ドで上のような表示が出ました。
print screenでExcelに張り付けたファイルです

1
hiroton 2022/12/29 (木) 20:38:18 15f47@2ee8f

DateDiff 関数

IIF(DateDiff("m",[開始日],[終了日])=0,[終了日]-[開始日])

たぶんこれ(上の式)だと思うけど本当に単に同月であればいいなら

IIF(Month([開始日])=Month([終了日]),day([終了日])-day([開始日]))

7
さこ 2022/12/28 (水) 11:52:53 44a30@d1b14

先ほどもう一度入力し直してみたらできました!
入力間違えないようにしたつもりだったのですが、間違えていたようです。
ご教示いただきありがとうございました。

1

回答するには情報不足ですね。
とりありず下記の情報を提示してください。

グラフの元になるデータ例
希望とするグラフの画像(エクセルではできるということなのでその画像)
現状のAccessでのグラフの画像

6
hatena 2022/12/27 (火) 14:04:21 修正

実際に記述したSQL文を提示してもらえますか。

あと、下記のクエリを開いて、削除されない空白の先頭文字コードが何になっているか教えてください。

SELECT [Q21_71Y72Y結合]![担当者ID] AS 担当者ID, AscW(Left([Q21_71Y72Y結合]![担当者ID],1)) As 先頭文字コード
FROM Q21_71Y72Y結合
5
さこ 2022/12/27 (火) 10:04:19 44a30@d1b14

ノーブレークスペースという単語を始めて聞きました。
ご提示いただいた関数で試してみましたが、うまくいきませんでした。
別の方法を考えてみます。
ご教示ありがとうございました。

2
nanana 2022/12/26 (月) 11:25:01 e48ae@9a838

ありがとうございます。Dir関数を使えばよかったのですね!
助かりました!

4

リンク先は下記のスペースのことですね。
ノーブレークスペース - Wikipedia

だとしたら、下記でどうでしょう。

担当者ID: Trim(Replace(Nz([担当者]![担当者ID]),ChrW(160)," "))
8

おっしゃる通り、こちらの通りです。

そのフィールドのデータ型はYes/No型でしょうか。
ルックアップの表示コントロールは「チェックボックス」でしょうか。

会社のOffice365でも、自分で所持しているAccess2016でもほぼほぼは再現できています。
なるほどです。テキストボックスにするという方法も試してみます。

3
さこ 2022/12/23 (金) 16:10:28 44a30@d1b14

http://yamav102.cocolog-nifty.com/blog/2016/11/trim-735b.html

この記事に書かれているWEB上のデータ、というのが悪さをしている可能性もあるかもしれません。
その場合、記事内ではエクセルでの関数紹介でしたが、アクセスに転用する方法があればご教示いただきたいです。

2
さこ 2022/12/23 (金) 16:07:20 44a30@d1b14

ご提示いただいた方法で試しましたが、フィールド値がそのまま表示されました。

SQL文は以下の通りです。
外部エクセルデータリンク71Y、72Yのデータをユニオンクエリで結合し、
結合したQ21のクエリデータから担当者IDをTRIMしたい、という意図で組んだものです。

SELECT LTrim([Q21_71Y72Y結合]![担当者ID]) AS 担当者ID, Q21_71Y72Y結合.出向先CD, Count(Q21_71Y72Y結合.契約NO) AS 件数
FROM Q21_71Y72Y結合
GROUP BY LTrim([Q21_71Y72Y結合]![担当者ID]), Q21_71Y72Y結合.出向先CD
ORDER BY Q21_71Y72Y結合.出向先CD;

1

Trimを入れずに、
担当者ID: [担当者]![担当者ID]
としたときはフィールド値がそのまま表示されますか。

あと、そのクエリのSQL文を提示してもらえますか。

2
えいじ 2022/12/23 (金) 11:01:24

hatena様

遅くなり申し訳ございません。

できました。
ありがとうございました。

1

「F_2」フォームは開いた状態て実行してますか。
テキストボックス名は「テキスト0」で間違いないですか。
Debug.Print でイミディエイトウィンドウには正しく出力されてますか。

コードとしては、Forms![F_2]![テキスト0] =  Rs![部署]だと上書きしますので、最後の1件のみの表示になります。
下記のようにすれば、改行されて追加されます。

Forms![F_2]![テキスト0] = Forms![F_2]![テキスト0] & Rs![部署] & vbCrLf
7
hatena 2022/12/22 (木) 10:04:54 修正

テーブル・クエリ等をレコードソースにした普通のサブフォームコントロールです。

ソースオブジェクトにテーブル・クエリを設定したということですね。

そのフィールドのデータ型はYes/No型でしょうか。
ルックアップの表示コントロールは「チェックボックス」でしょうか。

上記設定で、当方のバージョン(Microsoft365)のAccessでは現象を再現できませんでした


テーブルのデザインビューでYes/No型のフィールドを下記のような設定にするとそれらしくはなります。

ルックアップの表示コントロールを「テキストボックス」にして、書式を下記のように設定する

;□;

画像1

5

前者の通りのご認識通りです。
テーブル・クエリ等をレコードソースにした普通のサブフォームコントロールです。
実際に大きさが変更できます。
画像はこちらです。

5

hatena様

ありがとうございます!ダイナセットでなく、スナップショットに設定という方法がありましたか!
新規入力フォームのご説明もありがとうございました。

再度、チャレンジしてみます。

4
hiroton 2022/12/20 (火) 21:18:22 a0cdc@2ee8f

サブフォームコントロール中のチェックボックスです。

チェックボックスコントロールそのものが何なのかを調べましょう。標準のチェックボックスはフォントは弄れませんよ
画像1

フォントで弄れるというのであれば、なにか外部の機能を組み込んで使っているのでしょう

Web検索すると、たとえば次のようなものがあるようです
エクセルのチェックボックスの大きさや文字サイズを変更する方法(Office Hackさん)

3

「サブフォームコントロール中のチェックボックス」とは何のことでしょうか。

サブフォームコントロール自体にはチェックボックスは配置できないので、
サブフォームコントロール内に埋め込んでいるフォーム内の詳細セクションに配置したチェックボックスのことだとして回答しましたが、そうではないのかな。

状況がよく分からないので、
現状のフォームのスクリーンショットを貼り付けてもらえますか。
チェックボックスの大きさが異なるものを2つ貼り付けてください。

2

hatena様

タイトルには入れましたが、対象としているのはサブフォームコントロール中のチェックボックスです。
こちらは、レイアウトビューの書式メニューのフォントに直接数値を設定すれば、大きさが変更可能と思います。

ただ、サブフォームコントロールによって?は、チェックボックスの大きさだけが変わらないものもあり、
ご相談させていただいた次第です。

4

フォームに入力する → 入力テーブルに保存される → 再利用時にこのテーブルのデータを一覧表示 →
再編集(これだと元のデータを変更してしまう)

履歴確認用の一覧フォーム
 帳票フォーム
 レコードセットプロパティを「スナップショット」に設定(これで更新不可になります)

新規入力フォーム
 単票フォーム
 データ入力用プロパティを「はい」に設定(新規レコードのみ表示させる)

 このフォームに履歴確認用フォームを呼び出すボタンを配置するか、サブフォームとして履歴確認用フォームを埋め込む。

 履歴確認用フォームの詳細セクションにコマンドボタンを配置しておいて、これをクリックしたら、カレントレコードのデータを新規入力フォームに転記するようにする。

以上で、いいのでは。

3

りんご様

>送り状業務支援システムを探して購入するべきです。難しければ、外注が最低限。

素直に市販の送り状作成ソフトで補うことにしました。
諸々アドバイス頂き、誠にありがとうございました。

2
りんご 2022/12/19 (月) 20:01:30 4d616@0e907 >> 1

 送り状業務支援システムを探して購入するべきです。難しければ、外注が最低限。
 うーん、正直、白い目で見られると思います。下手をすれば裁判沙汰になってもおかしくないでしょう。老後の趣味ならば微笑ましいですが。
 それはそれとして、遅かれ早かれサービス終了も忘れてはいけません。

1
りんご 2022/12/19 (月) 19:01:04 4d616@0e907

 取り敢えず、各テーブル構造とフォームの概要をきちんと提示するほうが、回答がつきやすいと思います。

レコードを引っ張ってくるという方法が一番シンプルなのでしょうか。
 その通りだと思います。

1
hiroton 2022/12/19 (月) 14:20:00 ed9bb@f966d

Dir 関数

Dim strPath As String
strPath = フォルダパス

strPath = strPath & Mid(Dir(strPath & "*", vbDirectory), 6)

Application.FollowHyperlink strPath
1

チェックボックスにはフォントプロパティがないので、フォントサイズの指定はできないと思いますが、どのようにしましたか。

当方のAccessではできません。チェックボックスの大きさも固定です。

仕方がないので、下記の方法でテキストボックスを利用してチェックマークを表示するようにしてます。

チェックボックスのサイズを大きくする
年配の方をユーザーとするシステムを作るとき、コントロールのサイズとかフォントとかを大きくして見やすいインタフェイスを作る必用があります。テキストボックスとかコマンドボタンは簡単にできるのですが、チェックボックスはサイズを大きくしてもボックス自体の大きさは変わりません。 そこで、テキストボックスをチェックボックス風にみせて、お好みのサイズにするTipsを紹介します。レポートでも同様の方法で大きく見せるこ...
Fc2

2

hatena様

なるほどです。こんなやり方、思いつきませんでした。
ありがとうございます。

4

ご説明いただきありがとうございます。
Shift + F9 はRerueryと同じ処理なので、そういうことですね。
公式ページの説明にきちんと書いてあるのを見落としていました。申し訳ございません。
ただ仰る通りタイミングによっては重複の可能性がありますね。

採番用のテーブルを別に用意して・・・

こんな方法があるんですね!確かにこの方法であれば重複は回避できるかもしれません。
でも1年に一回あるかないかの話なので(今回も4,5年運用して初めて起こりました)、
あまりにも頻繁に起こるようでしたら、こちらの方法を試してみたいと思います。

「すべて更新」についてのご説明ありがとうございました。おかげさまで腑に落ちました。
また、代替案についても非常に参考になりました。

3

harePointのリンクテーブルを使ったことがないので、あくまで推測ですが、下記によると、
[ホーム] タブの[レコード]グループで [すべて更新] とマクロの再クエリ 、VBAの Requery は同じ処理のように読めます。

データの更新または再クエリを実行する - Microsoft サポート

ただし、

しかし、たとえばAさんが登録後、タイミングよくBさんが1,2秒後にすぐ登録しようとすると、T_入力元の最新情報がまだBさんのAccessファイル上では反映されておらず、Aさんと同じID番号を取得してしまう現象が起こります。

2人のユーザーがほとんど同時に、
再クエリして最大IDを取得して、それを利用してレコード保存した場合、再クエリとレコード保存のわずかな時間でも重なる場合がありえますので、その時は重複する可能性はあります。

その辺を厳密にするなら、採番用のテーブルを別に用意して、そこに最大ID番号を格納しておきます。
更新処理の最初にその採番用テーブルは排他的に開き(他ユーザーが開けないようにロック)、ID番号に1加算して、それを元にレコード保存して、採番用テーブルを閉じるようにします。
もし、他ユーザーが更新処理に入っていたら、採番用テーブルは開けないので、開けるようになるまでまって更新処理に入るという処理にする、という方法があるようです。

私自身はそこまでしたことはないですが、そういう方法もあるということで状況によってはその必要もあるかもしれません。

2

説明不足で申し訳ございません、使いたい背景を含め、補足させていただきます。

現在、SharePointのデータをリンクテーブル(T_入力元 とします)として置き、そのAccessファイルを複数人に配布して使用しています。

入力フォームで必要事項を入力後、登録ボタンを押すと「T_入力元」IDフィールドのMAX値+1を取得し、新しいIDで更新されるようにしています。

しかし、たとえばAさんが登録後、タイミングよくBさんが1,2秒後にすぐ登録しようとすると、T_入力元の最新情報がまだBさんのAccessファイル上では反映されておらず、Aさんと同じID番号を取得してしまう現象が起こります。

Aさんが登録直後、Bさんのほうで「すべて更新」をクリックするか、「T_入力元」リンクテーブルを開いて閉じる作業をすれば、すぐに最新の状態になることは確認済みです。

リンクテーブルの情報を最新に更新したいという希望でしたので、Refresh や Requeryではないのかな?という予想でした。

もちろんそれで対応できるなら全く問題ありません。

長くなり申し訳ございません、よろしくお願いいたします。

1

テーブル構造が正規化されていないので、データベースで処理するには非効率的になります。まずは、正規化してから処理すべきだと思います。

このままでするなら、演算フィールドの式を下記のようにすることになります。

項目合計: Nz(項目A)+Nz(項目B)+Nz(項目C)+Nz(項目D)+Nz(項目E)+Nz(項目F)+Nz(項目G)+Nz(項目H)

該当フィールド: IIf(Nz(項目A)=0,"","項目A") & IIf(Nz(項目B)=0,"","項目B") & IIf(Nz(項目C)=0,"","項目C") & IIf(Nz(項目D)=0,"","項目F") ・・・以下略 

正規化すれば集計クエリで簡単にかつ高速にご希望の結果が得られます。

5
チョコ 2022/12/13 (火) 17:54:19 7a4e5@dab18

なるほど、そり記事は見たのですが思いつきませんでした。
ありがとうございました。

1

そのコマンドは使ったことがないのでよくわかりませんが、
Refresh や Requery だと、どの点がご希望の動作と異なりますか。

1

タブコントロールのValueプロパティで、アクティブなページのインデックスの取得、設定ができます。

Public Sub cmdbutton1_Click()()
    DoCmd.OpenForm "フォーム1"
    Forms!フォーム1.タブ0.Value = 0
End Sub
Public Sub cmdbutton2_Click()()
    DoCmd.OpenForm "フォーム1"
    Forms!フォーム1.タブ0.Value = 1
End Sub
Public Sub cmdbutton3_Click()()
    DoCmd.OpenForm "フォーム1"
    Forms!フォーム1.タブ0.Value = 2
End Sub