Access (一般機能)

Accessの一般機能に関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(指定なし : 指定なし)
エクセルデータをインポートしてから フォームで数字を計算しレコードを増やすには
投稿日時: 17/11/17 19:16:29
投稿者: 6515

エクセルデータをインポートして
テーブルを作っています。
 
そのテーブルの中の項目:数量の数を
フォームで
一面の数、何段、一梱包の重さ
を入力し
 
一面の数×何段×ひと梱包の重さ
(およそ600キロまで)
 
計算式の結果によってレポートのレコードを増やしたいの
ですが
レポート(印刷する)時に
 
インポートした 数量が12200 ひと梱包10キロ だったら
インポートした他のテーブル項目はそのままで
数量の所を600と620とレコードを一行増やした
レポート(印刷)したいのですが
このような事は可能でしょうか?
 
インポート前のエクセルで
行数を増やしてから アクセスにインポートした方が良いでしょうか?
アクセス初心者のため 無理な事を聞いていたらすみません。
 
 

回答
投稿日時: 17/11/17 22:01:40
投稿者: sk

引用:
そのテーブルの中の項目:数量


 
引用:
フォームで
一面の数、何段、一梱包の重さ
を入力

引用:
一面の数×何段×ひと梱包の重さ
(およそ600キロまで)

の因果関係が不明瞭です。
 
(「ひと梱包の重さ」に渡される値については
 後述の説明で具体的な数値が例示されているが、
 「一面の数」と「何段」に渡される値に関しては例示されていない)
 
少なくとも、
 
引用:
インポートした 数量が12200 ひと梱包10キロ だったら

これらの数値(要素)から
 
引用:
インポートした他のテーブル項目はそのままで
数量の所を600620とレコードを一行増やした
レポート(印刷)したい

上記の結果を得られる計算の式なりプロセスなりが
(手順を追って、箇条書きするなどして)具体的に
明文化されない限りはお答えのしようがありません。
 

投稿日時: 17/11/18 08:13:11
投稿者: 6515

skさん ありがとうございます。
説明不足ですみません。
 
アクセスにインポート前のエクセルのデータが
一行ごとのデータになっているものの
中に 項目:数量 という項目があり
例えば 12200 や いろいろ な数字が入っています。
(発送物の宛先事の総数が入っています)
 
 
茶紙に包まれた状態(いち梱包の重さ) で 本、チラシ が段ボールに入っていてフォークリフトで運ぶ状態で入ってきます
一段目(一面に)に何個段ボールがあるか?(一面の数)、何段積まれて入ってきたか?(何段)
 
 
入力フォームをつくって
入荷されてきた状態の数を
一面の数 、 何段 、 ひと梱包の重さ を 入力し
 
クエリで
基準値:一面の数 × 何段 × ひと梱包 をして
入ってきた時の重さを出して
その重さを基準値にして
(入ってくる 本、チラシが都度 厚みか変わるので入荷してきた
時の状態を都度、基準値としたい)
 
入れ換え行数:数量 /基準値
 
レポート時に
入れ換え行数 ( 計算分) 一行 一データになっている
ものを 行数増やし 印刷したいのですが
出来ることでしょうか?
 
説明不足、下手 すみません
よろしくお願いします。
 
 

回答
投稿日時: 17/11/18 23:33:19
投稿者: mayu.

{ 何らかの一般機能やAccess独自のテクニック }を使って
ラベル印刷用のレコードを{ 動的に作成したい }のでしょうか。
 
テーブル設計・データ例を提示していただくと話が早いのですが
ご希望の結果を推測してみます。以下サンプル
 
■ テーブル定義

CREATE TABLE T_荷物
(
      処理ID       AUTOINCREMENT   NOT NULL  PRIMARY KEY
    , 宛先         VARCHAR( 100 )  NOT NULL
    , 数量         INT             NOT NULL
    , 梱包の重さ   DOUBLE
    , 一面の数     INT
    , 何段         SMALLINT
);

CREATE TABLE T_num
(
      num     INT  NOT NULL  PRIMARY KEY
);

■ データ例
< T_荷物 > ( インポート時 )
---------------------------------------------------------
 処理ID   宛先    数量   梱包の重さ  一面の数    何段
---------------------------------------------------------
    1    A物流   1,220    ( Null )   ( Null )  ( Null )
    2    B商事   1,123    ( Null )   ( Null )  ( Null )
    3    C商店   2,500    ( Null )   ( Null )  ( Null )
    4    D運送   2,000    ( Null )   ( Null )  ( Null )

< T_num > ※ 1 〜 30の連続した数値
---------
  num
---------
   1
   2
   3
   4
   .
   .
   .
  29
  30

■ ( フォームで )梱包の重さ・一面の数・何段 を入力後
< T_荷物 >
------------------------------------------------------
 処理ID   宛先    数量   梱包の重さ  一面の数   何段
------------------------------------------------------
    1    A物流    1,220      10          12       5
    2    B商事    1,123      50           3       2
    3    C商店    2,500      25           4       4
    4    D運送    2,000      40           5       1

■ SQL ( Q_ラベル と名前をつけ、クエリとして保存 )
SELECT 処理ID
     , 宛先
     , 数量
     , 梱包の重さ
     , 一面の数
     , 何段
     , 梱包の重さ * 一面の数 * 何段 As 入り数
     , -Int( -数量 / ( 梱包の重さ * 一面の数 * 何段 ) ) As ラベル数
FROM T_荷物 
WHERE 梱包の重さ Is Not Null
  AND 一面の数   Is Not Null
  AND 何段       Is Not Null ;

< Q_ラベル >
---------------------------------------------------------------------
処理ID  宛先    数量   梱包の重さ 一面の数  何段   入り数  ラベル数
---------------------------------------------------------------------
   1   A物流    1,220     10         12       5      600       3
   2   B商事    1,123     50          3       2      300       4
   3   C商店    2,500     25          4       4      400       7
   4   D運送    2,000     40          5       1      200      10

■ SQL ( レポートのレコードソース用 )
SELECT x.処理ID
     , x.宛先
     , x.数量
     , x.ラベル数
     , x.入り数 As 最大入り数
     , y.num    As 内訳番号
     , IIf( y.num <= Int( x.数量 / x.入り数 )
          , x.入り数 
          , x.数量 - x.入り数 * ( y.num - 1 ) 
       ) As 入り数 
     , CStr( y.num ) & '/' & CStr( x.ラベル数 ) As ラベル番号  
FROM Q_ラベル  x
   , T_num     y 
WHERE y.num <= x.ラベル数
ORDER BY x.処理ID 
       , y.num ;

■ 結果
-------------------------------------------------------------------------
 処理ID  宛先   数量  ラベル数  最大入り数  内訳番号  入り数  ラベル番号
-------------------------------------------------------------------------
    1   A物流   1,220     3        600         1        600       1/3
    1   A物流   1,220     3        600         2        600       2/3
    1   A物流   1,220     3        600         3         20       3/3
----------------------------------------------------------------------
    2   B商事   1,123     4        300         1        300       1/4
    2   B商事   1,123     4        300         2        300       2/4
    2   B商事   1,123     4        300         3        300       3/4
    2   B商事   1,123     4        300         4        223       4/4
----------------------------------------------------------------------
    3   C商店   2,500     7        400         1        400       1/7
    3   C商店   2,500     7        400         2        400       2/7
    3   C商店   2,500     7        400         3        400       3/7
    3   C商店   2,500     7        400         4        400       4/7
    3   C商店   2,500     7        400         5        400       5/7
    3   C商店   2,500     7        400         6        400       6/7
    3   C商店   2,500     7        400         7        100       7/7
----------------------------------------------------------------------
    4   D運送   2,000    10        200         1        200      1/10
    4   D運送   2,000    10        200         2        200      2/10
    4   D運送   2,000    10        200         3        200      3/10
    4   D運送   2,000    10        200         4        200      4/10
    4   D運送   2,000    10        200         5        200      5/10
    4   D運送   2,000    10        200         6        200      6/10
    4   D運送   2,000    10        200         7        200      7/10
    4   D運送   2,000    10        200         8        200      8/10
    4   D運送   2,000    10        200         9        200      9/10
    4   D運送   2,000    10        200        10        200     10/10

なお、サンプルのデータでは
処理ID毎に ラベルが 30枚 までしか作成できませんので
それ以上の数が必要になるようでしたら
T_Num テーブルの番号を適宜増やすようにして下さい。

投稿日時: 17/11/20 08:27:05
投稿者: 6515

mayu.さん
ありがとうございます。
 
まさに
やりたいこと!が書いてあったのですが
 
すみません。
まだ、テーブル、クエリ、フォーム、レポート
と デザインビューなどの細かな分け方はいれないで
大きく四種類ある としか
アクセスの事がわかっていなくて
 
SQLクエリ というのは
エクセルでいうとこの マクロのようなものでしょうか?
基礎がわかっていなくて すみません。
すみません。

回答
投稿日時: 17/11/20 14:05:22
投稿者: mayu.

引用:
SQLクエリ というのは
エクセルでいうとこの マクロのようなものでしょうか?

いいえ。マクロではありません。
SQLは データベース操作に特化した言語 であり
エクセルで同様の機能は存在しません。
 
エクセルでは、{ データ列 }と{ 演算列 }共にワークシート上に作成しますが
( ワークシート以外にオブジェクトとして区別するものが存在しない )
Accessでは 生データは{ テーブル }に保存し、演算は{ クエリ }で行います。
 
言い換えると、エクセルでは、一つのオブジェクトで実施していたことを
Access( データベース全般に言えることですが )では
役割毎にオブジェクトを分けて管理するよう設計されています。
 
クエリをデザインビューで作成する時は
表示対象の列を選択したり、演算フィールドを作成したり、並び替えを指定したりしますが、
これらの作業を実施すると
裏では Access によって、作業に応じた SQL が自動で記述されていきます。
 
つまり「 クエリを作る 」ということは「 SQL を記述する 」ということと同義であり
Accessで言う{ クエリ }とは、{ 記述したSQLに名前を付けて保存したもの }になります。
 
また、テーブル同士で特殊な結合を必要としたり、複雑な構造を表現しようとすると
お助け機能のデザインビューでは作れないクエリも多々ありますので
そういう場合は、直に SQL を記述してクエリを作るしかありません。
 
データベースを操作するための言語ですので
テーブルを作成したり、主キーを付与したりといった要件も SQL で実現可能です。
( 11/18 23:33:19 投稿の CREATE TABLE T_荷物 ... というのが テーブルを作成する SQL文 )
 
もし、私が掲載した SQL をどこに記述すればいいかわからないということでしたら
■< クエリ SQL文でクエリを編集する >
http://accessvba.blog.so-net.ne.jp/2013-11-11
あたりをご覧になって下さい。
SQLビューからデザインビューで切り替えて構造を確認することも可能です。
 
なお、フォームやレポートで実現したいことを尋ねる場合、
レコードソースになっているテーブルやクエリの構成を載せるようにしておくと
質疑応答が比較的スムーズに進むでしょう。

投稿日時: 17/11/20 16:42:36
投稿者: 6515

mayu.さん
ありがとうございます。
 
まだアクセスを使い始めたばかりで
エクセルなら ◯すれば行えることを
アクセスなら×で行えるなど
 
違う点がわかっていない中、
質問していたので
SQLクエリの説明がとても
役立ちそうです。
 
また、テーブル 内容を
記載して質問出来ず
分かりにくい説明を
読みといて、回答頂き
ありがとうございます。
 
こちらの質問はここで
解決とさせて頂き
SQLクエリ(張り付けて貰ったもの)を
見て、回答のをやってみようと
思います。
ありがとうございました