人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

先日からACCESSでのデータベース作り方の質問をしています、が、
要はレストランからの注文書をそのまま入力でき、EXCELで一覧になって、そこから集計、検索などできればよいのです。
特に入力フォームなどEXCELとVBAで可能なのでしょうか?
VBAでの入力フォームの作り方と、EXCELでの表の作り方などを具体的なアイデアをお教えください。EXCELは若干使っているのですが、○月○日?○月○日に受注した注文書の内容を店ごとに抜き出すというような、日にちでの抜き出しってEXCELのフィルタ機能でできたでしょうか?
長くなってしまったので、注文書の内容(入力フォーム→集計表 に必要な項目)は以前の質問に書いてあるのを見ていただけるとありがたいのですが・・・よろしくお願いいたします。

●質問者: Platini
●カテゴリ:コンピュータ
✍キーワード:access Excel VBA アイデア データベース
○ 状態 :終了
└ 回答数 : 4/4件

▽最新の回答へ

1 ● りくっち
●23ポイント

過去の質問を拝見させていただきました。

ざっと拝見した感想なのですが、受注「管理」と銘打たれているので、

回答者のみなさんはある程度データをキチンと運用されることを前提でアドバイスされていると思います。

ですが、今回の質問文や、過去のコメントレスなどを拝見している限りでは運用面がどうこうというより、

とりあえず現在のアナログ文書がデータになって、検索したり集計できればいい、ということのようなので、

まずは簡素にデータシートを作成するところから始められてはどうでしょうか。


データシートの作成はおそらく既知の情報で十分だと思います。

ただし、データベースソフトのようにテーブル分けをして管理する出来るわけではないので、

発注書一枚単位での入力でなく、発注書に書かれている商品単位で入力しなければなりません。

逆に、あくまで発注書単位での入力フォームを作成されたいのであれば、

ExcelVBAで入力フォームを作ることはAccessの通常機能で作成するより専門的な知識が必要になってくると思います。

ここでスクリプトを聞かれてもそれを設定していく段階でVBAの知識がある程度必要だと思うからです。

商品の売上データを発注書単位で管理するのは、あくまで「計算ソフト」であるExcelにはかなり無理をさせる仕様なのです。


上記を前提に、できるだけ入力項目を少なくできるようなシート作成について手順を書いていきます。

まずは、アクセスで言うテーブルに相当するものをシート別に作成します。

各固有名詞の情報を統一することと、入力支援の機能を使用するためです。

厳密には

http://q.hatena.ne.jp/1173433520#a691098

でkn1967さんが提示されている位の設計があればかなり柔軟に対応ができる内容になると思いますが、

ここではもう少しゆるめに設計して、入力負担が多めになる方向で考えます。

(設計が密であるほど入力は簡略化され、データの精度もアップします)


顧客一覧Sheet

レストラン名

レストラン運営会社名

レストラン発注担当者


商品一覧Sheet

商品名

規格(サイズ)

仕様(備考)

単位

単価


仕入先一覧Sheet

仕入先名


受付担当一覧Sheet

担当者名


この4Sheetの情報は手入力で最初に作成することになります。

もし、この時点で難しい、ということであれば、

例示で出されている項目を単純に並べて一つ一つ入力してから、

改めて情報をグループ化し、正規化するという手順になりますので、

これ以下の手順はその作業が終わってから、ということになります。

(この点については、他のデータベースソフトなどにしても同じだと思います。)



受注一覧Sheet


発注書番号直接入力

入力日直接入力(日付型)

レストラン名顧客一覧Sheetより情報取得し、入力支援(入力規則/リスト)

運営会社顧客一覧Sheetより情報取得し、VLOOKUPで算出表示

納期直接入力

現場担当者顧客一覧Sheetより情報取得し、VLOOKUPで算出表示

自社担当者受付担当一覧Sheetより情報取得し、入力支援(入力規則/リスト)

仕入先仕入先Sheetより情報取得し、入力支援(入力規則/リスト)

商品名商品一覧Sheetより情報取得し、入力支援(入力規則/リスト)

商品単価商品一覧Sheetより情報取得し、VLOOKUPで算出表示

数量直接入力

金額商品単価*数量

・・・


といった感じで入力Sheetを作成し、実際の伝票を商品単位で入力する形になります。

このシートにフィルタをかければ各項目ごとに条件抽出できますし、

レストラン単位の月間売上などが必要であれば、

ピボットテーブルを利用することで集計結果を得ることが出来ると思います。



また、入力フォームに関しては、簡易版として、「フォーム」という機能があります。

↑の受注一覧Sheetのデータ上にカーソルを置いてから、

ツールバーの「データ」→「フォーム」をクリックすると、

データベースに対応した簡易な入力フォームが表示され、

実際にレコード単位で入力作業をすることができます。



以上ご参考まで。


尚、先の質問でポイント配分についてお尋ねだったようですので、

下記のURLを貼っておきます。

http://hatenaquestion.g.hatena.ne.jp/keyword/%e8%b3%aa%e5%95%8f%...

ポイントの振り分けは直接数字を書き換えるか、横のスライダーで数字が変更されます。

◎質問者からの返答

ありがとうございます。

まったくの勉強不足なのですが、

このようなテーブル分けにはどのような利点

というか・・・があるのでしょうか?

・・・すいません、勉強して出直します。


2 ● たけじん
●23ポイント

http://www.moug.net/tech/exvba/

とりあえず、力技でEXCELを駆使するなら。

シートは2枚。

データ表として、1枚。全データを記載しましょう。

フィルタは、オートフィルタを使って、日付の欄と店の欄でフィルタします。日付の範囲はオプションで指定しましょう。

新規の入力用にシートを一枚使います。

1、VBAのテキストボックスを適当に配置します。

2、このシートの第二列をデータ表と同じ配置にします。

3、テキストボックスのプロパティのlinkcellを、このシートの第二列の各セルとします。

※ここで、この入力フォームに入力すると、このシートの第二列に、データが書き込まれるはずです。

4、釦をひとつ設けます。

5、VBAといきたいところですが、ここはマクロ記録で処置しましょう。→ツール→マクロ→新しいマクロの記録、で新規のマクロを記録します。動作は、このシートの第二列を切り取り、データシートの第二列に切り取った列を挿入する、です。マクロの記録を終了します。

6、釦を右クリックして、コードの表示を選択。

7、マクロで記録したVBAをコピーして、釦の動作部分に貼り付ける。

8、VBA画面を閉じる。

9、デザインモードを終了する。

※これで入力→釦を押す→データ表の一番上に新規データが記載されるはずです。

※※簡単ですが、これはいかがでしょうか。わからないところは解説します。

◎質問者からの返答

ありがとうございます。

ところで、ここでの例でいうと、

レストラン名が分かれば、発注者が

コンボボックス?で選択できるような…

そんな仕掛けって難しいでしょうか?

それから、ここでのマクロで、

入力フォームを未入力の状態に戻す、

っていうのも動作に組み込めるのでしょうか?


3 ● たけじん
●22ポイント

http://www.moug.net/tech/

1、入力フォームのリセットは、

上記5の部分を、入力シート第二列をコピー→データシートにコピーした列を挿入→入力シート第二列を選択してDEL→これで、入力用テキストボックスは空白になるはずです。(リンクセルとテキストボックスは同値になるので。)この動作をマクロの記録に加えればOKです。

2、コンボボックスに表示されるデータは、入力シートのどこかに表にしておき、リンクすると表示されます。しかし、この条件付となると、できないことはありませんが、関数を駆使しての力技となります。VBAやACCESSの方が簡単です。

◎質問者からの返答

linkcellが・・・ない?

どうすれば…


4 ● rararayujinkun
●22ポイント

データ件数にもよりますが、それほどデータ数が多くないのであれば、エクセルのみを使って、下記のようなやり方はどうでしょうか?

1.Sheet1に入力フォームに見立てたシートを作る。

おそらくは「注文書」通りに表示したいと推測しますが、

ここでは入力し易ければどんな形でも良いです。

2.Sheet1の入力値をSheet2へレコードとして貼り付けるマクロを 作成する。具体的には下記のようなコードで、"A"とか"B"とか○の部分を適宜修正する。

また、このマクロをシート上に配置したコマンドボタンのクリックイベントに割り当てると便利です。

Sub Test

Dim LastRow as Long

With Sheet2

LastRow=.Cells(65536,"A").End(xlUp).Row+1

.Cells(LastRow,"A").Value=Sheet1.Range(○).Value

.Cells(LastRow,"B").Value=Sheet1.Range(○).Value

.Cells(LastRow,"C").Value=Sheet1.Range(○).Value

End With

End Sub

3.Sheet2のデータを元にピボットテーブルにて集計を行う。

(フィルタでは役不足と思います。)

http://dammy.jp

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ