Microsoft Access 掲示板

views
4 フォロー
6,283 件中 2,881 から 2,920 までを表示しています。
1

[ファイル]-[オプション]-[現在のデータベース]で、[ドキュメント ウィンドウ オプション]が、
「ウィンドウを重ねて表示する」になっていたら「タブ付きドキュメント」にすれば、すべてのウィンドウがアプリケーションウィンドウいっぱいに広がります。
画像1

2
明日こそは 2021/12/21 (火) 13:07:38 440a7@6f3e7

ご教示ありがとうございました!

5
hiroton 2021/12/21 (火) 09:50:39 20c7c@f966d

それぞれのテーブルの取引先ごとの集計でたし引きすればいいのかな?

その通りですよ。ただ、データベースでやるならデータベースの作法があるだけです。質問のタイトルは「特殊な売上管理をするときの構成について」ですが、内容を聞く限りデータベース的には至ってシンプルな内容です

ただし、「月ごと」の集計が必要なんですよね?となると、「日報の記録はどの月に属する配送なのか?」という問題が発生します。「日報の日付を基準」でいいのか、「取引先の受注データを基準」にする必要があるのか、2つのテーブルの間で間違いのないルール付けが必要です

現在は2つのテーブルは紐付いていません

集計してexcelにコピペしてexcelで計算しています

現実的に計算できているのだから目に見える設定が無いだけで何かしら(仕事上のルールであるとか、取引先との契約内容であるとか)で紐づいているんですよ。
関係性をうまく説明できること
データベース(ACCESS)でその関係性を設定できること
理論と実装ですね。順を追って考えていきましょう


データベースとはなにか?という話なら、難しいモノかもしれませんね

1
hiroton 2021/12/21 (火) 08:27:46 20c7c@f966d

結構テンプレネタだと思うんだけど有名どころのサイトでも解説ないよね
連結されたコンボ ボックスに値を追加する

コンボボックスのリスト外入力処理(システムコマコさん)
コンボボックスから値集合ソース編集画面を表示する方法(T'sWareさん)

2
tanappe 2021/12/21 (火) 01:57:55 a7122@43b82

ご回答ありがとうございます。

>これはどうやって?
元になるテーブルをインポートしたあと、そのテーブルを選択しつつ作成リボンのフォームボタンを押し、
その後フォームレイアウトのデザイン、のリボンでボタン作成し、
コマンドボタンウィザードで新しいレコードの追加を割り当てたらできました。

この場合、ボタンを一回押すとレコード追加はできるのですが、
ボタンを一回押すだけでレコード追加だけでなくSub hoge~End Subも一気に実行されるようにしたいです。
(機能追加したい)
どこにSub hoge~End Subを記述すればよろしいでしょうか?
→(自己解決したのでメモ代わりに)
レコード追加で作ったボタンにSub hoge~End Subだけでなく、レコード追加のコードも入れたらできました。

また質問させていただくこともあるかもしれませんが、よろしくお願いいたします。

4
チる 2021/12/20 (月) 20:11:38 0dbf4@65764

現在は2つのテーブルは紐付いていません
集計してexcelにコピペしてexcelで計算しています
たんに、テーブルにデータをいれているだけでほぼexcelのシートに保存しているのとかわらない状態です
取引先ごとの利潤が分かればいいので
それぞれのテーブルの取引先ごとの集計でたし引きすればいいのかな?とか思ってましたがそんな単純なものでもないみたいてすね

3

取引先だけでは一意に特定できないですよね。
取引先と日付で特定できるのですか。

それで配達員ごとの配送件数と枚数を把握して歩合給を計算します

現在はどのような手順で2つのテーブルを紐づけて、計算しているのでしょうか。

まずは、2つのテーブルのデータ例を提示して具体的に、そこからどのように計算しているか、
説明してもらえませんか。

2
チる 2021/12/19 (日) 18:49:26 58219@65764

売上テーブル
配送テーブルに
共通しているフィールドは”取引先”があります
(売上テーブルではどこに請求するか把握するため、配送テーブルでは給与明細にどのどこからの配送をどれだけ配送したかを把握するためです)
これと日付でリレーションすると、11月のA社の売上はいくら、そのうち従業員への歩合はいくら、と計算できるでしょうか?

4

帳票フォームにすればいいでしょう。
同じ値が連続する場合が多いフィールドはVBAで規定値プロパティを設定すればいいでしょう。

同じ値のデータを連続して入力したいなら、連続入力のVBAをショートカットキーなどに割り当てるなど工夫します。

テーブル構成や詳細な仕様が不明なので、とりあえずのアドバイスはこんなところです。

1

売上テーブルと配送テーブルを紐づけするフィールドはありますか。

あるなら、クエリでそのフィールド同士で結合すればいいだけです。

ないなら、各テーブルにどのようなフィールドがあって、現状はどのように対応させているかの説明してください。

3
かもめ 2021/12/18 (土) 19:08:11 58219@a5fb8

画像
に近いようなものはできています。上記のようなものは紙の伝票をベースにしたものだと思うのですが
複数の日付が連続して存在するデータの入力には適していないような気がします
今日のデータを入力しているときでも、その上には昨日のデータが表示されているようなレイアウトのほうが適している気がするのですが、どのようにしたらよいかまではわからなくて質問しました

2
りんご 2021/12/17 (金) 22:02:30 c564b@0e907

 データベースがやりたいのであれば、とりあえず、Excelに新しいシートを作り、日付、取引先、商品名を手入力して下さい。この時、組み合わせが同じものは1つだけとします。
 画像のシートにデータを登録する際は、まず、新しいシートに画面を切り替えます。登録したい日付・取引先・商品名の組み合わせがあるか探して下さい。なければ登録した後、画像のシートに戻ります。日付・取引先・商品名、その他のフィールドを手入力したら、新しいシートに切り替えて次の組み合わせを探します。以後、繰り返します。
 ちらつく、視覚的にわかりにくい、Excelインポートのほうが早い、これらを土台にデータベースは成り立ちません。今までのExcelの何倍も手間暇かけたら、やっとデータベースが始まると思います。

1

Accessではどこまで出来ていて、どこからが分からないのでしょうか。
それとも、Accessの方はまったく手を付けていない状態ですか。

とりあえずは、Accessで構築するなら下記のような手順になります。

  1. テーブルを作成する。(トランザクションテーブル、マスターテーブル)
  2. テーブルのデータを入力する、あるいは、エクセルからコピー、インポートなど。
  3. テーブルをレコードソースとする入力フォームを作成する。

どこまで出来ていますか。

17
りんご 2021/12/14 (火) 22:46:09 c564b@0e907 >> 15

 オブジェクト指向の流行はピークを過ぎたんじゃないでしょうか?得意分野と伸び代の目処がついたという意味で。少なくとも、データベースの設計にはイマイチみたいですよ。

3
りんご 2021/12/14 (火) 22:40:03 c564b@0e907

 詳しくないですが、無いという事で特に問題ないと思います。流行り廃れの過渡期にあるだけでしょう。あとから振り返ると、正しくなかった、発展性しなかった、なんてね。古くなったからリセットして海外モノに飛び付こう。お察しな感じですね。
 『オブジェクト指向やSQL99はもう古いしナンセンス、新クラシック回帰の時代に乗り遅れるな』

16
hideki 2021/12/14 (火) 11:34:18 7cbc1@96514

hatena様
詳しい回答ありがとうございました。

2

まずはテーブル設計をどうするか、から考えましょう。

一例ですが、

科目摘要金額
修理費部品5000
修理費技術料5000
保守点検分解費5000
保守点検技術料3000

※とりあえず質問で出ているデータのみでテーブル化した場合の例です。
実用的には科目マスターとかいろいろ必要になります。

上記テーブルから入力フォームを作成する場合、
帳票フォームを作成して入力する、科目はコンボボックスで選択できるようにする。
とか、
メイン/サブフォーム形式にして、メインフォームで科目を選択して、サブフォームのにその科目の詳細を入力する。
などになりますが、運用実態で適切なものを選択します。

レポートで
修理費     10000円
  部品      5000円
  技術料    5000円

保守点検     8000円
  分解費     5000円
  技術料     3000円

というような出力するなら、レポートのグループ化の機能を使えば簡単です。
hirotonさんの紹介しているできるネットさんのリンク先などが参考になるでしょう。

15
hideki 2021/12/14 (火) 11:23:49 7cbc1@2aadf

hatena様

クラスモジュールを勉強しようと、思ったのは、オブジェクト指向という言葉に出会ってからです。
今思えば、ACCESSが、まったく理解できていないとき、yahooの知恵袋で、本当に丁寧に回答してくれたのが、hatena様でした。

hatena様は、どのようにスキルを習得したのか?
きっと、hatena様なら、色々な技で、スマートな短いコードで、やりたいと事を実現できるんだろうなと、
今も、そう考えながら、コードを書いています。
クラスモジュールを理解できたら、きっと、また、違った世界が見えるかもしれないと思い、勉強しようと思いました。
クラスモジュールは、今の私には、難しく、yahooの知恵袋で、クラスモジュール、hatenaで検索したら、HITしたので、その回答を、何度も読んで、ブログも読んで、紹介していただいたリンク先のブログも読んでいました。

また、わかないところがあれば、図々しく、質問させていただきます。

また、この掲示板で、回答してただいた、hatena様、りんご様をはじめ、全ての方に、感謝申し上げます。
ありがとうございました。

14

ToExcelでなぜエラーが出るかを解説(コメント)しておきますと。

Public Sub ToExcel()
    Dim ex As Excel.Application

    Set ex = CreateObject("excel.Application")
    ex.Visible = True
    '↑ここでエクセルアプリケーションが新規に開く
    'ただし、ブックは開いてないので空っぽの状態。
        
    DoCmd.OpenQuery QryName, , acReadOnly
    DoCmd.RunCommand acCmdOutputToExcel
    '↑エクセルへクエリデータを出力するが、上で開いているエクセルではなく
    '別に新規のエクセルを開いてそこに出力する。
    DoCmd.RunCommand acCmdClose
    
    If SaveBookName <> "" Then
        ex.ActiveWorkbook.SaveAs SaveBookName
        'exは最初に開いた空っぽのエクセルで、ブック自体存在しないので、エラーになる
    Else
        MsgBox "保存するブック名をSaveBookNameプロパティで設定してください"
    End If
    
    Set ex = Nothing
End Sub

対処法としては、CreateObjectで新規エクセルを開くのではなく、
GetObjectで開いているエクセルを取得して操作することになると思います。

前にも言いましたが、DoCmd.TransferSpreadsheetメソッドで1行でできることをわさわざクラスモジュールですることはないし、上記のような間違いもあるし、古い記事なので、クラスモジュールの学習サンプルとしては適切ではないです。

13
hideki 2021/12/14 (火) 10:45:18 7cbc1@2aadf

りんご様
ありがとうございます。
参考にさせていただきます。

12

そのリンク先、確かに私の回答ですね。
「ざっと検索してみました」といっているように中身までは検証していません。

その時は紹介しましたが、今、サンプルファイルをダウンロードしてみましたが、2010以降のバージョンではサポートされていないデータアクセスページを使用していて、動作を確認できないものなので今から学習するサンプルとしては適切でないです。記事内のコードだけでは完結しないのでサンプルで確認する必要もありますので。

なぜ、クラスモジュールの勉強しようと思い立ったのか分かりませんが、Accessはデータベースとしての強力な機能を持っていますので、クラスモジュールを使う場面はほとんどありません。
かなり、大きなシステムを構築するなら活用できる場面があるかも知れませんが、このような質問で出てくるようスキルレベルでは必要な場面に出会うとこもないし、使いこなせないと思います。

私自身も、テーブル数、フォーム数、レポート数がそれぞれ2桁以上の大がかりてシステムを作成しましたが、クラスモジュールは使ってません。

1
hiroton 2021/12/14 (火) 08:44:31 a274f@f966d

サブフォームの関係でレコードをつくる

なかなか聞かない言い回しですね。データ構造としてはイメージしているモノかもしれませんが、データ登録でその部分にサブフォームが使われることはないと思います。「テーブルの設計」という視点を持ちましょう

それをレポートで上記のようにするにはどうしたらよいでしょうか?

Accessのレポートでグループごとに金額の合計を印刷する方法(できるネットさん)

2
ln111 2021/12/14 (火) 04:28:08 6a7f3@ab9a9

レスありがとうございます。
booleanにNullが無いことから、お察しな感じはありますね。
本格的なDBMSのエンジニアから軽く見られるのは悔しいですが、
ともあれありがとうございました。

11
りんご 2021/12/14 (火) 02:05:45 c564b@0e907

>> 3
>> 7>> 9>> 10
ごめんなさい、私の勘違いと力不足がありました。
もしかしたら、こちらが参考になるかもしれません。

ACCESSからのExcel操作について|teratail
ACCESSからExcel操作のVBAは初めてで躓いております。どうかよろしくお願い致します。 ◆やりたいことACCESSのフォームからチェックボックスで選択した取引先データをCopyFromRecordsetで書き出し、横長のクエリを切り分けExcel上で見やすい帳票に加工したい ◆できている
teratail[テラテイル]

Application.Workbooks.Add.SaveAs “ほにゃらら”みたいな感じになるのかしら?

10
hideki 2021/12/14 (火) 01:10:30 7cbc1@96514

"C:\Users\Desktop\20211201\Desktop\QryData.xlsx"です。
指定したデータを、出力できないというような、エラーがでました。
ACCESS2003でしたし、Excelの保存形式も違っていたので。

9
りんご 2021/12/13 (月) 23:51:50 c564b@0e907 >> 8

 SaveBookNameを使ってあれこれやりたいと書いているのに、肝心の中身が表示されないってどういう事でしょう?
 >> 8
 QryData.xlsxって、急に何処から出してきたの?

8
hideki 2021/12/13 (月) 23:21:52 7cbc1@96514

りんご様

QryData.xlsxが、おかしいと思いました。

7
りんご 2021/12/13 (月) 22:02:15 c564b@0e907 >> 6

イミディエイトウィンドウには、何も表示されませんでした。
えっとですね、貴方はそれをどう評価・考察しましたか?

6
hideki 2021/12/13 (月) 21:48:40 7cbc1@96514

りんご様

回答ありがとうございます。
イミディエイトウィンドウには、何も表示されませんでした。

5
hideki 2021/12/13 (月) 21:47:02 7cbc1@96514

リンク

この記事です。

多分、丁寧な回答を読んでいるとhatena様かと思います。

紹介されたURLのExcelは、リンク切れでした。

hatena様のブログは全部読みました。
時間のある時は、分からなくても読んでいます。

ACCESSに関しての、クラスモジュールは、DAOや、ADOのものが少しNETにあるだけでした。

このyahoo知恵袋で、hatena様が、紹介されているなら、間違いない教材と思って勉強してました。

ご提示していただいた、コードは知っています。

単純にクラスモジュールで記載したらどうなるのかと思い、ご無礼を承知で、質問しました。

13
りんご 2021/12/13 (月) 17:39:20 c564b@0e907

 
T伝票
売上日 取引先名(複合主キー) 請求日 支払日

T売上
売上ID   売上日 取引先名(複合主キー) 商品名 個数 単価ID

>> 10
>> 11
 
T伝票
伝票ID(主キー) 日付 …
1 12/13
2 12/14
 Excelから取り込んだテーブル(仮)を作ります。
日付 商品名 個数 単価ID …
12/13 …
12/14 …
 新しいクエリを作って、日付で紐付ければ、
Q売上(仮)
伝票ID(主キー) 日付 商品名 個数 単価ID …
1 12/13 …
2 12/14 …
 これを追加クエリに変更、T売上に追加。

1
hatena 2021/12/13 (月) 09:28:12 修正

「中身の個人情報を含むデータ」と言うのが何を指しているのか不明瞭ですが、
テーブルデータということなら、テーブルを空にすればいいと思います。

あと、
[ファイル]-[情報]-[データベースのプロパティの表示および編集]の
[ファイルの概要]に作成者とか管理者とか会社名の項目がありますので、
そこを削除しておくか仮名にしておくといいでしょう。

1
hiroton 2021/12/13 (月) 08:52:42 025b2@f966d

yes/no型なら実体は-1/0(/Null)でホンモノの真理値ではないですね
DataType プロパティ

12

エクセルのデータはどうなっているのですか。
エクセルのデータには伝票IDはないのですか。
ない場合、伝票と売上はどのように紐づける仕様になっているのですか。

売上日 取引先名 の組み合わせで一伝票という仕様なら、売上日 取引先名 の組み合わせで、複数フィールド主キーを設定すればいいですね。

その辺りの情報を提示してもらわないと、、、、

11
ろうにん 2021/12/12 (日) 18:26:01 58219@8661c

インポートとの兼ね合いでどうしたものかと悩んでおります

10
ろうにん 2021/12/12 (日) 18:25:36 58219@8661c >> 7

おっしゃるとおり
インポートするときにそれがないから悩んでます
EXCELにあるならそれぞれのテーブルにインポートすればいいんですけど

4

提示のコード、試してみましたが、いろいろおかしいですね。
参考にした下記の記事、

Access 2003 VBAではじめるクラス入門 (1/4):CodeZine(コードジン)

Access 2003とあるようにかなり古い記事のようです。
私自身、この記事を紹介した記憶がないのですが、どの掲示板で紹介しましたか。
そのURLを提示してもらえますか。

とりあえず、ACCESSのクエリを、Excelに保存するだけなら、クラスモジュールを使う必然性はないです。
DoCmd.TransferSpreadsheetメソッドで簡単にできますので。

DoCmd.TransferSpreadsheet acExport, _
                          "商品区分別商品リスト", "C:\Users\Desktop\20211201\Desktop\QryData.xlsx"

クラスモジュールの勉強なら、他にもっと適切なものがありそうです。

4
りんご 2021/12/12 (日) 15:24:37 c564b@0e907

>> 3
 いいね、と言いたいところですが、なんだかなぁ。単独主キーの是非、発注名の定義域が気になります。

9
りんご 2021/12/12 (日) 14:07:00 c564b@0e907 >> 7

もしかして、伝票IDがExcelの元データに無いから、T売上に直接インポート出来ないって悩んでます?

3
りんご 2021/12/12 (日) 13:49:32 c564b@0e907 >> 2

 とりあえず、これくらい試しましたか?

 If SaveBookName <> "" Then
        ex.ActiveWorkbook.SaveAs SaveBookName
     Debug.Print SaveBookName
     MsgBox SaveBookName
    Else
        MsgBox "保存するブック名をSaveBookNameプロパティで設定してください"
    End If