よろしくお願いします。

メニュー名    │料理名    │材料   │材料数
モーニングセットA│ベーコンエッグ│卵    │5
モーニングセットA│ベーコンエッグ│バター  │8
モーニングセットA│ベーコンエッグ│ベーコン │4
モーニングセットA│トースト   │パン   │2
モーニングセットA│トースト   │バター  │1

上記のようなクエリがあります。(結果をわかりやすくするため実際の材料数とは異なります)
セットはいくつかのバリエーションでA、B、C…とあり、それぞれどれだけ材料が必要かを
レポートに表記したいと思っています。
ここで、モーニングセットにはバターが9必要という結果を出したいのですが、レポートウィザードで
メニュー名→料理名→材料
とグループ化し、集計のオプションで材料の「合計」にチェックを入れても、9という数字は導き出せませんでした。
レポートデザインで直接関数を作ればいいのかと思いますが、
「メニュー名」グループ内の同名の「材料」の「材料数」を集計する
という式の作り方がわかりません。
よい方法がありましたら、よろしくお願いします。

質問者からの補足コメント

  • うれしい

    ご指摘いただいたとおり料理名をグループにせずレポートを作成したところ、思ったとおりの結果がでました。ありがとうございました!

      補足日時:2017/06/17 02:31

A 回答 (1件)

料理名が入っていると、料理ごとの材料になってしまいますので、料理名のコラムを削除すれば、メニュー名の材料の合計が出せます。

    • good
    • 0
この回答へのお礼

ありがとうございます!「料理」の部分について試してみます!

お礼日時:2017/06/15 18:01

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す

このQ&Aと関連する良く見られている質問

QACCESS vbaでレポート名の変更をプログラムでできるんでしょうか?

ACCESS vbaでレポート名の変更をプログラムでできるんでしょうか?

Aベストアンサー

DoCmd.rename "Old Report Name", acReport, "New Report Name"
で行けるんじゃないかな? 
https://msdn.microsoft.com/en-us/library/office/ff823209.aspx
docmdをvbaと呼ぶかどうかは、よくわからないけど、
そういう意味でのVBAなら、ADOXでも可能だと思う。

QAccess フォームのテキストボックスに入力した年月でテーブルのフィールド名を検索し、レコードを表

Access フォームのテキストボックスに入力した年月でテーブルのフィールド名を検索し、レコードを表示させることはできるのでしょうか?
方法があればご教授ください。
よろしくお願いします(❁ᴗ͈ˬᴗ͈)

Aベストアンサー

>Dim myDB As Databaseでコンパイルエラーで『ユーザ定義型は定義されていません。』のエラーが出るのですがどうしたら良いでしょうか…?

Dim myDB As Database → Dim myDB As DAO.Database
Dim myTB As TableDef → Dim myTB As DAO.TableDef
このように DAO. を付けてみたらどうですか?

それでもエラーが出るようでしたら、Accessのバージョンと、VBAエディタ のツールにある「参照設定」で
チェックの入っている項目を教えてください。

Access2000か2002でしたら、参照設定で Microsoft DAO 3.6 Object Library にチェックが入っていないのかも。。。。

Qaccess 今月のデータを抽出するVBA

お世話になります。
フォームの今月ボタンを押したら、納品日の今月のデータだけが抽出されるようにコードを設定したいのですが、上手くいきません。アドバイスください。よろしくお願いします。

Private Sub 今月_Click()
Me.Filter = "納品日 Between #" & Nz(DateSerial(Year(Date), Month(Date), 1), "1900/1/1") & "# And #" & Nz(DateSerial(Year(Date), Month(Date) + 1, 0), "9999/12/31") & "#"
End Sub

Aベストアンサー

Me.Filter = "・・・"

の次に

Me.FilterOn = True

を付け加えてみては?

QAccess 新規入力画面にするコード DoCmd.GoToRecord,,acNewRec を入力

Access
新規入力画面にするコード
DoCmd.GoToRecord,,acNewRec
を入力後新規ホームを開くと
一番上の顧客CDに0が表示されます。
非表示または(新規)というふうに変更するのはどうやればいいのか教えてください。

Aベストアンサー

顧客CDがテーブル上では数値型で、テーブルをデザインビューで開いた時に
規定値に「0」が入っていませんか。

QVBAか関数でできるのでしょうか?

いつもこちらで皆さんに助けていただいてます。昨日質問しましたが画像が張り付けられていなかったので再度質問です。

”仕入表”タブに入力されたデータが横並びのデータです。
例えば、商品コード/品名/価格/色/入荷数 の並び順で、入力されています。一つの品番に対して色数は1から10個あり、色/入荷数/色/入荷数という風に構成されてます。

そこでこちらでお世話になり、仕入表に入力したデータを縦並びに色別で”在庫表”タブに表を作れるようなVBAを教えていただきました。

画像の仕入表は上の表で、下の表が在庫表に転記されたときの例です。
因みにその時のVBAはこちらです。


Sub Sample4() '//この行から
Dim i As Long, j As Long, cnt As Long, lastRow As Long, wS As Worksheet
Application.Calculation = xlCalculationManual
Set wS = Worksheets("仕入表")
With Worksheets("在庫表")
'//E列で「在庫表」Sheetの最終行取得★
lastRow = .Cells(Rows.Count, "E").End(xlUp).Row
'//「在庫表」SheetにデータがあればD列2行目~I列最終行データを一旦消去
If lastRow > 1 Then
.Range(.Cells(2, "D"), .Cells(lastRow, "I")).ClearContents
End If
cnt = 1
For i = 3 To wS.Cells(Rows.Count, "A").End(xlUp).Row '//「仕入表」Sheetの3行目~A列最終行まで
For j = 5 To wS.Cells(i, Columns.Count).End(xlToLeft).Column Step 2 '//E列~i行最終列まで2行毎★
If wS.Cells(i, j) <> 0 Then '//画像で「0」が表示されているので「0」以外を追加★
cnt = cnt + 1
'//最初のデータ行のみ「仕入表」Sheetの日付をD列に表示★
If j = 5 Then
.Cells(cnt, "D") = wS.Cells(i, "A")
End If
.Cells(cnt, "E") = wS.Cells(i, "B") '//B列に「コード」を表示
.Cells(cnt, "F") = wS.Cells(i, "C") '//F列に「商品名」を表示
.Cells(cnt, "G") = wS.Cells(i, "D") '//G列に「下代」を表示
.Cells(cnt, "H") = wS.Cells(i, j) '//H列に「色」を表示
.Cells(cnt, "I") = wS.Cells(i, j + 1) '//I列に「数」を表示
End If
Next j
Next i
'//最後にD列の表示形式(日付)を「在庫表」SheetのA3セルの書式に設定★
.Range("D1", Cells(Rows.Count, 4).End(xlUp)).NumberFormatLocal = wS.Range("A3").NumberFormatLocal
End With
Application.Calculation = xlCalculationAutomatic
End Sub '//この行まで


そこで、また新たにもしできるなら教えていただきたいことが出てきました。
仕入表タブのC列に出荷した商品が出たら「出荷済」と入力していますが(画像ではA列から埋まってますが実際はA~Cは空白にしてます)、”出荷済”にしたときに在庫表タブの同じ品番の商品すべて(日付~すべての色の個数まで)を黄色の色付けにすることはできますか?
もしできるとすごく楽になるのですが・・・
それではよろしくお願いします。

いつもこちらで皆さんに助けていただいてます。昨日質問しましたが画像が張り付けられていなかったので再度質問です。

”仕入表”タブに入力されたデータが横並びのデータです。
例えば、商品コード/品名/価格/色/入荷数 の並び順で、入力されています。一つの品番に対して色数は1から10個あり、色/入荷数/色/入荷数という風に構成されてます。

そこでこちらでお世話になり、仕入表に入力したデータを縦並びに色別で”在庫表”タブに表を作れるようなVBAを教えていただきました。

画像の仕入表は上の表で...続きを読む

Aベストアンサー

No6です。
以下の箇所を修正しました。前回のマクロをこれで入れ替えてください。
1)エラー13で型が一致しません。・・・この対策
色の箇所が0以外なら処理しているのを、空白以外なら処理するようにしました。
2)今更ですが黄色の色付けを日付の列だけにすることは可能でしょうか。
日付の列だけ黄色にしました。
-------------------------------------------------------
Sub Sample4() '//この行から
Dim i As Long, j As Long, cnt As Long, lastRow As Long, wS As Worksheet
Dim wns As Worksheet
Application.Calculation = xlCalculationManual
Set wS = Worksheets("仕入表")
Set wns = Worksheets("納品仕訳")
Worksheets("在庫表").Activate '追加
With Worksheets("在庫表")
'//E列で「在庫表」Sheetの最終行取得★
lastRow = .Cells(Rows.Count, "E").End(xlUp).Row
'//「在庫表」SheetにデータがあればD列2行目~I列最終行データを一旦消去
If lastRow > 1 Then
.Range(.Cells(2, "D"), .Cells(lastRow, "I")).ClearContents
.Range(.Cells(2, "D"), .Cells(lastRow, "I")).Interior.Pattern = xlNone
End If
cnt = 1
For i = 3 To wS.Cells(Rows.Count, "A").End(xlUp).Row '//「仕入表」Sheetの3行目~A列最終行まで
For j = 5 To wS.Cells(i, Columns.Count).End(xlToLeft).Column Step 2 '//E列~i行最終列まで2行毎★
If wS.Cells(i, j) <> "" Then '//画像で「0」が表示されているので「0」以外を追加★ '修正
cnt = cnt + 1
'//最初のデータ行のみ「仕入表」Sheetの日付をD列に表示★
If j = 5 Then
.Cells(cnt, "D") = wS.Cells(i, "A")
End If
.Cells(cnt, "E") = wS.Cells(i, "B") '//B列に「コード」を表示
.Cells(cnt, "F") = wS.Cells(i, "C") '//F列に「商品名」を表示
.Cells(cnt, "G") = wS.Cells(i, "D") '//G列に「下代」を表示
.Cells(cnt, "H") = wS.Cells(i, j) '//H列に「色」を表示
.Cells(cnt, "I") = wS.Cells(i, j + 1) '//I列に「数」を表示
If wns.Cells(i + 2, "C").Value = "出荷済" Then
.Range("D" & cnt).Interior.Color = 65535 '修正
End If
End If
Next j
Next i
'//最後にD列の表示形式(日付)を「在庫表」SheetのA3セルの書式に設定★
.Range("D1", Cells(Rows.Count, 4).End(xlUp)).NumberFormatLocal = wS.Range("A3").NumberFormatLocal
End With
Application.Calculation = xlCalculationAutomatic
End Sub '//この行まで
-------------------------------------

No6です。
以下の箇所を修正しました。前回のマクロをこれで入れ替えてください。
1)エラー13で型が一致しません。・・・この対策
色の箇所が0以外なら処理しているのを、空白以外なら処理するようにしました。
2)今更ですが黄色の色付けを日付の列だけにすることは可能でしょうか。
日付の列だけ黄色にしました。
-------------------------------------------------------
Sub Sample4() '//この行から
Dim i As Long, j As Long, cnt As Long, lastRow As Long, wS As Worksheet
Dim wns As Works...続きを読む

Qエクセルのバージョンアップによるマクロ不調

エクセル2007にて、for...next構文を含むマクロをフォームボタンに登録し使用していました。
カウンタ変数に3から25を代入しています。
(3行目から25行目を処理するため)

しかしエクセル2016にパソコンが変わり、ボタンを押すと3行目だけ処理しマクロが終わってしまいます。
ボタンを押す代わりに、VBEから直接実行すると問題なく最後まで繰り返し処理されます。

バージョンアップにより何か不都合があるのでしょうか。お教え下さい。

Aベストアンサー

#2の回答者です。
長文でまとまっていませんが、私の考えたレポートです。

こちらは、Excel 2013ですが、一応、通して動かしてみて完結はするのですが、途中、何か良くわからない動きがあります。このコードには、どちらかというと「気になる」の部分はあります。しかし、それ以上に、ハングしたかなって思わせるような状態で、マクロが終了しているのです。それが何か今のところは分かりません。
どうも、ステップで進める分には、まったくその問題はみられません。

そのコードで問題になる部分は、2つですが、結論からすると、直しても変わりませんでした。
> Dim h As Integer 'データ集積シートの最終行
これは、Integer ではなくて、Long 型のほうがよいです。
ついでに、Dim i As Long '入力表シートの行数 もLong型のほうがよいのは、PCの扱うデータは、32bit が主なので、Integer 型は、一旦、Long型に変換しているので、なるべく、Integer 型は使わないほうがよいとしています。

>h = Worksheets("集積_税制").Range("A65536").End(xlUp).Row + 1
これは、最初、ループの外で行って、書き込みが完了したら、
h = h+1

とします。ただ、それでも、問題はほとんど改善されませんでした。
ふつうは、マクロが抜けるという現象からしても、私の試した感じでは、どうやらメモリリークの現象に似ています。アンタッチャブルな部分に触れると、マクロは急停止してしまいます。

なお、Select Case  [値]  ←ここの値は、文字列でも数値でも構わないです。ただ、コードを見る限りは、数値になっているようですので、それ自体は問題なかろうと思います。

ボタンは、フォームオブジェクトのボタンをお使いになっているものだとは思いますが、ActiveX ですと、そのコードですと、少し問題が出る可能性はあります。

それで、私なりの書き方でコードを書いてみましたので、そちらで診ていただけませんか?

'// 基本的には、標準モジュールです。
Sub Integrated_Taxes()
 Dim i As Long '入力表シートの行数
 Dim h As Long 'データ集積シートの最終行
 Dim j As Long '新しく加えた変数
 Dim acSh As Worksheet '現在の表
 Dim iTaxSh As Worksheet
 '***設定****
 Set acSh = ActiveSheet 'このシートは「入力表_税制」か?
 Set iTaxSh = Worksheets("集積_税制")
 
 Application.ScreenUpdating = False
 h = iTaxSh.Cells(Rows.Count, 1).End(xlUp).Row + 1
 With acSh
  For i = 3 To 25 '入力表の入力可能行数
   If .Cells(i, 3).Value > 0 And .Cells(i, 3).Value < 4 Then
    j = .Cells(i, 3).Value + 3
    iTaxSh.Cells(h, 1).Resize(, 3).Value = .Cells(i, 7).Resize(, 3).Value
    iTaxSh.Cells(h, j).Value = .Cells(i, 10).Value
    h = h + 1
   End If
  Next i
 
 End With
 Application.ScreenUpdating = True
 
 iTaxSh.Select
 MsgBox "取り込みが終了しました!"
 Worksheets("入力表_税制").Select
 Range("B1").Select

End Sub
'//

以上です。

#2の回答者です。
長文でまとまっていませんが、私の考えたレポートです。

こちらは、Excel 2013ですが、一応、通して動かしてみて完結はするのですが、途中、何か良くわからない動きがあります。このコードには、どちらかというと「気になる」の部分はあります。しかし、それ以上に、ハングしたかなって思わせるような状態で、マクロが終了しているのです。それが何か今のところは分かりません。
どうも、ステップで進める分には、まったくその問題はみられません。

そのコードで問題になる部分は、2つですが...続きを読む

Qマクロの「SaveAs」でエラーが出るのを解消したいです

下記の↓↓↓↓↓↓部分でエラーが出ます。

「実行時エラー '1004':

'SaveAs' メソッドは失敗しました: '_Worksheet' オブジェクト」

ちょろちょろマクロ組んでたのですが単純な
エラーで解決が出来ない状態です。
どなたかマクロ先生に教えて頂ければと思いますので
よろしくお願いします。

'指定額の抽出
Private Const MESSAGE_FINISH = "予算出力処理が完了しました"

Sub 予算データテキスト出力()
Dim ws1
Set ws1 = Worksheets("チェック一覧")
Dim m As Long
m = 3
Dim ws2
Set ws2 = Worksheets("予算データ")

Dim sm As String

Dim ws3

Dim sn

'チェック一覧シートのNo.が無くなるまで処理する
Do Until ws1.Cells(m, 1) = ""

Application.ScreenUpdating = False


If ws1.Cells(m, 4) = "" Then
'ナンバーがある場合は部門等をチェック一覧(ws1)→フォーム(ws2)に転記する
Else
ws2.Cells(2, 2) = ws1.Cells(m, 4)

'各部署のシート名をsmにセットする
sm = ws1.Cells(m, 2)
Set ws3 = Worksheets(sm)

'予算フォーム(ws2)の行変数「s」と各部署シート(ws3)の行変数「n」
Dim s
s = 4
Dim n
n = 9
Dim cnt
cnt = 1

Do Until n = 44
If ws3.Cells(n, 23) = 0 Then

'各数値等を各部署のシート(ws3)→フォーム(ws2)に転記する
Else

ws2.Cells(s, 1) = cnt
ws2.Cells(s, 3) = 6100
ws2.Cells(s, 4) = 0
ws2.Cells(s, 5) = ws3.Cells(3, 4)
ws2.Cells(s, 6) = ws3.Cells(5, 8)

ws2.Cells(s, 7) = ws3.Cells(n, 4)
ws2.Cells(s, 8) = ws3.Cells(n, 24)
ws2.Cells(s, 9) = ws3.Cells(n, 25)
ws2.Cells(s, 10) = ws3.Cells(n, 26)
ws2.Cells(s, 11) = ws3.Cells(n, 27)
ws2.Cells(s, 12) = ws3.Cells(n, 28)
ws2.Cells(s, 13) = ws3.Cells(n, 29)
ws2.Cells(s, 14) = ws3.Cells(n, 31)
ws2.Cells(s, 15) = ws3.Cells(n, 32)
ws2.Cells(s, 16) = ws3.Cells(n, 33)
ws2.Cells(s, 17) = ws3.Cells(n, 34)
ws2.Cells(s, 18) = ws3.Cells(n, 35)
ws2.Cells(s, 19) = ws3.Cells(n, 36)
s = s + 1
cnt = cnt + 1

End If

n = n + 1

Loop
'予算データに転記されたので出力する

ws2.Copy

' ↓↓↓↓↓この下の「SaveAs」がエラーになります。↓↓↓↓↓

ActiveWorkbook.SaveAs Filename:="D:\Library\Desktop\新しいフォルダー\" & ws2.Cells(s, 5).Value & ".xlm"

ActiveWindow.Close

ActiveWorkbook.Close savechanges:=False


'フォームに転記した情報をクリア
ws2.Select
Range(Cells(4, 1), Cells(44, 19)).Select
Selection.ClearContents


End If

m = m + 1


Loop

ws1.Select

MsgBox MESSAGE_FINISH

End Sub

下記の↓↓↓↓↓↓部分でエラーが出ます。

「実行時エラー '1004':

'SaveAs' メソッドは失敗しました: '_Worksheet' オブジェクト」

ちょろちょろマクロ組んでたのですが単純な
エラーで解決が出来ない状態です。
どなたかマクロ先生に教えて頂ければと思いますので
よろしくお願いします。

'指定額の抽出
Private Const MESSAGE_FINISH = "予算出力処理が完了しました"

Sub 予算データテキスト出力()
Dim ws1
Set ws1 = Worksheets("チェック一覧")
Dim m As Long
m = 3
Dim ws2
Set ...続きを読む

Aベストアンサー

試していませんが、
ActiveWorkbook.SaveAs Filename:="D:\Library\Desktop\新しいフォルダー\" & ws2.Cells(s, 5).Value & ".xlm"

のファイルの拡張子は、".xlsm"が正しいかと。

Qサブクエリの使い方を教えて下さい。

下記のsqlをサブクエリーで記述したい。
SELECT Header.*
FROM Header
WHERE (((Header.from) Like "*YouTube*") AND ((Header.subject) Like "*イージス*"));

宜しく回答願います。

Aベストアンサー

答えを先にいうと「ifをネストするようなSQLはかけます」
(ただしくはサブクエリで絞り込んでから更に絞り込む)
ただしそれはやってはいけません。
「できる」と「やったほうがいい」は違います

SQLが速く検索できるのはインデックスを利用するからです
命題のようなサブクエリで一度絞り込むと、その先にインデックスはききません
結果としてサブクエリを使うと遅くなるだけです

Qクエリをエクセルファイルへの出力

保存先を任意に選択して、クエリをエクセルファイルで出力したく、見よう見まねで以下のモジュールを作成しました。

ホームページのサンプルだと「xls」のところが、「CSV」になっていたので、今回、「xls」に直しました。

これを、実行すると「データベースまたはオブジェクトは読み取り専用なので、更新できません」の
メッセージが出力します。

「xls」を「CSV」に戻すと、正常にCSVファイルが出力できます。

原因が分かりません。どなたか助けてください。



Public Function GetFileName() As String

Const ENABLE_WIZHOOK = 51488399
Const DISABLE_WIZHOOK = 0

Dim CurrentPath As String: CurrentPath = Application.CurrentProject.Path
Dim StrFile As String: StrFile = "ベンチマーク_" & Format(Date, "yyyymmdd") & ".xls" ' 選択するファイルの絶対パス格納用
Dim myFilter As String: myFilter = "xlsファイル(*.xls)|*.xls" ' 選択可能ファイルのフィルタ

WizHook.Key = ENABLE_WIZHOOK

INTREXULT = WizHook.GetFileName(0, "", "", "", StrFile, CurrentPath, myFilter, 0, 0, 0, OpenOrSaveFlg)
If INTREXULT <> 0 Then '「ファイルを保存」ダイアログで[キャンセル]を押下した場合
GetFileName = ""
Exit Function
End If
WizHook.Key = DISABLE_WIZHOOK
GetFileName = StrFile

End Function

保存先を任意に選択して、クエリをエクセルファイルで出力したく、見よう見まねで以下のモジュールを作成しました。

ホームページのサンプルだと「xls」のところが、「CSV」になっていたので、今回、「xls」に直しました。

これを、実行すると「データベースまたはオブジェクトは読み取り専用なので、更新できません」の
メッセージが出力します。

「xls」を「CSV」に戻すと、正常にCSVファイルが出力できます。

原因が分かりません。どなたか助けてください。



Public Function G...続きを読む

Aベストアンサー

マクロを下記の様に作ります。

1. クエリを開く
クエリ名は、Excelに出力するクエリの名前を指定する
ビューは、データシートビューを指定する
データモードは編集を指定する。

2. コマンドの実行
Excelに出力を指定する。

これを実行すると、新規のExcelが開きます。ここに、クエリの内容が
入ります。ここから、先の操作はExcelの通常の操作になります。

これで、ユーザーに保存をさせるのが良いのではないでしょうか。
マクロとしては、単に上記に書いた様に2つのステップだけです。

やって見て下さい。

Qアクセス2010 クエリが遅い 300万行ほどの1tblがあり、これだけで1.5GBくらい容量を食っ

アクセス2010 クエリが遅い

300万行ほどの1tblがあり、これだけで1.5GBくらい容量を食っています。
オートIDを振っています。
このテーブルを年月などを基準に分割して行数を減らさないとダメでしょうか?
よい方法がありましたら、教えてください。

Aベストアンサー

最適化はしてますよね。
で、クエリですが、300万のデータ全てに毎回計算させたら時間がかかるのは当たり前ですよね。
計算させるならその時必要なデータにのみするとか、工夫次第で処理は全然違います。
なんなら都度必要なデータのみをワークテーブルにしてもいいと思います。


人気Q&Aランキング