Access VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


1166 / 2272 ツリー ←次へ | 前へ→

【8480】レポート作成 EMI 06/8/17(木) 22:56 質問[未読]
【8481】Re:レポート作成 飛ばない豚 06/8/18(金) 9:30 回答[未読]
【8482】Re:レポート作成 小僧 06/8/18(金) 9:40 回答[未読]
【8484】Re:レポート作成 EMI 06/8/18(金) 19:31 お礼[未読]
【8485】Re:レポート作成 YU-TANG 06/8/19(土) 14:59 回答[未読]

【8480】レポート作成
質問  EMI  - 06/8/17(木) 22:56 -

引用なし
パスワード
   アクセスを初めて、半年の初心者です。
VBAは、色々本を探しながら自分が使えそうだと思ったコードを入力しては試すの繰り返しです。
でも、どうしても分からないのですが

テーブル名 在庫

品番  色  サイズ 点数
AA  BK  S   3
AA  BK  M   2
BB  WH  M   1

上記のテーブルでレポートを作成する際に

品番  色  サイズ 点数
AA  BK  S   1
AA  BK  S   1
AA  BK  S   1
AA  BK  M   1
AA  BK  M   1
BB  WH  M   1
点数の欄は非表示でも構いません。

この様にレポートを作成する事は、可能なのでしょうか?
それとも、他に方法があるのでしょうか?
本当に初心者丸出しの質問かもしれませんが、御指導ください。

【8481】Re:レポート作成
回答  飛ばない豚  - 06/8/18(金) 9:30 -

引用なし
パスワード
   ▼EMI さん:
案です。

「点数_行」テーブルを作ります。
点数













この「点数_行」テーブルと、「在庫」テーブルを「点数」でリレーションすれば、
希望のレポートのレコードソースが出来ます。

点数が何点まであるかにもよりますが、VBAで加工していくより簡単かと思います。


「点数_行」テーブルへのデータの追加は、以下のコードを使用すると簡単です。

Private Sub sub_データ作成()
  Dim myTENSU As Long
  Dim myLooP As Long
  Dim mySQL As String
  
  For myTENSU = 1 To 100   '点数の下限と上限
    For myLooP = 1 To myTENSU
      mySQL = "INSERT INTO 点数_行 SELECT " & _
          myTENSU & " AS 点数 "
      DoCmd.SetWarnings False
      DoCmd.RunSQL mySQL
      DoCmd.SetWarnings True
    Next myLooP
  Next myTENSU
  
End Sub

以上、案です。参考までに。

【8482】Re:レポート作成
回答  小僧  - 06/8/18(金) 9:40 -

引用なし
パスワード
   ▼EMI さん:
おはようございます。

在庫管理は難しいですよね。

在庫管理をどの程度まで正確にやるかによるのですが
1つ1つの出庫日、入庫日や単価の管理を正確にやるには

>品番  色  サイズ 点数
>AA  BK  S   1
>AA  BK  S   1
>AA  BK  S   1
>AA  BK  M   1
>AA  BK  M   1
>BB  WH  M   1

という形でテーブルにはデータを持ち、

>品番  色  サイズ 点数
>AA  BK  S   3
>AA  BK  M   2
>BB  WH  M   1

という様にユーザに見せる、という方が一般的だと思われます。


現在のテーブルのままでレポートを作成するには、
ワークテーブルを使うのが効果的でしょうか。

テーブル名:W_在庫
フィールド:品番、色、サイズ

を作成して、このテーブルを基にレポートを作成します。

レポートを発行するコマンドボタンに

Private Sub cmd印刷_Click()
'※要参照 Micosoft DAO x.x Object Library
Dim DB As DAO.Database
Dim RS As DAO.Recordset
Dim strSQL As String
Dim i As Long

  Set DB = CurrentDb
  
  strSQL = "DELETE FROM W_在庫"
  CurrentDb.Execute strSQL, dbFailOnError
  
  Set RS = DB.OpenRecordset("在庫", dbOpenForwardOnly)
    Do Until RS.EOF
      For i = 1 To RS![点数]
        strSQL = "INSERT INTO W_在庫 (品番, 色, サイズ) " _
            & "VALUES('" & RS![品番] & "', " _
               & "'" & RS![色] & "', " _
               & "'" & RS![サイズ] & "')"
        DB.Execute strSQL, dbFailOnError
      Next
      RS.MoveNext
    Loop
  RS.Close
  DB.Close
  Set RS = Nothing
  Set DB = Nothing
  
  DoCmd.OpenReport "レポート名"
End Sub

のように記述する事でお望みの様な事はできるかと思われます。

【8484】Re:レポート作成
お礼  EMI  - 06/8/18(金) 19:31 -

引用なし
パスワード
   飛ばない豚さん 小僧 さん
本当にありがとうございます。
お二人のご意見を頂いて、
自分が難しい事ばっかり考え過ぎていたと痛感しました。
飛ばない豚さんのテーブルの作成方法をみて
正直、目から鱗が落ちるとともに赤面です。
小僧さんも親切にコード迄書いて頂いて本当に感謝です。
周りにアクセスを知っている人が誰も居ず、こんな簡単なも
実は1ヶ月も悩んでいました
色々な考えを教えて頂いて本当に嬉しかったです。
馬鹿にされる覚悟でここに投稿して本当に良かったです。
人の意見はとても大事な事を痛感しました。
他にも方法がありましたら教えてください。
本当に本当にありがとうございました。

【8485】Re:レポート作成
回答  YU-TANG WEB  - 06/8/19(土) 14:59 -

引用なし
パスワード
   こんにちは、YU-TANG です。

> 他にも方法がありましたら教えてください。

こちらは VBA質問箱なので、場違いとは思いますが、
VBA を一切使わない方法もありますので、ご参考まで。

http://x7net.com/~access/AcTipsRptHowToPrintRabelSpecificNumber.html

上記ページの下の方にある
「宛名ラベルを個別に枚数を指定して印刷する方法」
というのが使えるような気がします。
これ別に宛名ラベル専用の方法ではないので。

それでは。

1166 / 2272 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
1078215
(SS)C-BOARD v3.8 is Free