• ベストアンサー

エクセルでレシピ検索

エクセル2000を使って、冷蔵庫に入っている食材で作る献立を自動表示させるものを作りたいのですが、 検索条件にしたい事がたくさんあって、何から始めたら良いのかわかりません(ToT) どなたかヒマな時で結構ですのでよろしくお願いします ***何をしたいか*** (1) 冷蔵庫の中にある食材(買った日付の古いものが優先)を使った料理名を表示させたい (2) 冷蔵庫の中にある食材をフルに活用(最大公約数?)はしなくて良い。(買いものに行かなくても、あるものだけで作るという検索はしなくて良い) (3) 約300種類の料理名の中から、最近作っていないものを優先して検索したい。 (4) 「冷蔵庫の中にあるものリスト」にある、一番古い食材を使った料理名を筆頭に、一番新しい(買ったばかりの)食材を使った料理名まで表示させたい。その時、例えば冷蔵庫の中にある食材が10種類あるとして、ひとつの料理にその中から3種類使うという場合は、残りの7種類の食材のうち、一番古いものを使った料理名が次に表示されるようにしたい。 (5)足りない食材を「買い物リスト」として別の表に表示させたい。その時、何の料理に使うのかわかるようにしたい。  例)にんじん/シチュー ***すでにやってること*** (1)約300種類の料理名と、使う材料を表にしてあります。   例)肉じゃが/じゃがいも/牛薄切り肉/絹さや     ※「/」はセル1つ分を使っています (2)冷蔵庫の中にある食材は、買い物した段階で買った日付と食材名を表にしてあります。また、使い切った食材はその都度削除しています。 私のエクセルの技術は、中級くらいです。 関数は、分からないものがあれば調べて活用できる程度です。 できれば簡単でシンプルな表で作りたいです。 3年間も何度か作ってみましたが、挫折していました。 どうかよろしくお願いします

質問者が選んだベストアンサー

  • ベストアンサー
回答No.5

こんばんわ。 [ブックの構成]  ・シート1(冷蔵庫にある食材を入力しておくためのシート)   B列に食品名・A列にその食材の賞味期限を入力する。    (B列には、必ず食材を入力しておくこと)   賞味期限は、古い順に必ず並べておく   1行目はタイトル行に当てています。  ・シート2(料理名と使う食材を入力しておくためのシート)   A列に調理した日付B列に料理名・C列以降にC・D・・・の順に使う食材を入力する。 ・シート3(食材の古い順に料理名・使う食材を表示させるためのシート)   空白のままにしておく まず、下記の要領でコードをコピー&ペーストして下さい。 1.新規ブックを立ち上げ、シート1・シート2に、上に書いたとおりにデータを入力する。(既存のデータをコピー&ペーストしてもよい) 2.ALT+F11キーを押して、VBE画面を開き、表示された画面の左上のVBAProjectにマウスポインターをあわせ、右クリック後出てきたプルダウンメニューの挿入をクリックし、出てきたプルダウンメニュの標準モジュールをダブルクリックする。 3.表示された右側の白い部分に、下記のコードをコピー&ペーストする。 Sub myWorkbook_Open() Dim myMsb As Integer Dim myClm As Integer Dim myRow As Integer Dim i As Integer Dim myZairyo As String Dim myRange As Range Dim myAdr As String Dim myCook As String Dim myFlg As Integer Dim myCnt As Integer Dim myCell As Range myMsb = MsgBox("献立一覧を表示しますか?", vbYesNo + vbQuestion, "作 業 選 択") If myMsb = vbNo Then Exit Sub Do myClm = myClm + 1 Loop Until Worksheets(2).Cells(1, myClm).End(xlDown).Row = Worksheets(2).Rows.Count myClm = myClm - 1 myRow = Worksheets(2).Cells(Rows.Count, 1).End(xlUp).Row myFlg = 0 For i = 2 To Worksheets(1).Cells(Rows.Count, 2).End(xlUp).Row myZairyo = Worksheets(1).Cells(i, 2).Value Set myRange = Worksheets(2).Range("A2:" & Worksheets(2).Cells(myRow, myClm).Address).Find(myZairyo, LookAt:=xlWhole) If Not myRange Is Nothing Then myAdr = myRange.Address Do myCook = myRange.End(xlToLeft).Offset(0, 1).Value myMsb = MsgBox("今日の献立は" & Chr(13) & "" & Chr(13) & " " & myCook & Chr(13) & "" & Chr(13) & "でよろしいですか?", vbYesNo + vbQuestion, "献 立 確 認") If myMsb = vbYes Then myFlg = 1: Exit For End If Set myRange = Worksheets(2).Range("A2:" & Worksheets(2).Cells(myRow, myClm).Address).FindNext(myRange) Loop While Not myRange Is Nothing And myRange.Address <> myAdr End If Next i If myFlg = 0 Then Exit Sub myClm = 0 Do myClm = myClm + 1 If myClm = 1 Then If Worksheets(3).Range("A1").Value = "" Then Worksheets(3).Range("A1").Value = myRange.End(xlToLeft).Offset(0, 1).Value Worksheets(3).Range("B1").Value = "ある材料" Worksheets(3).Range("B2").Value = "不足材料" Else Worksheets(3).Cells(Rows.Count, 1).End(xlUp).Offset(3, 0).Value = myRange.End(xlToLeft).Offset(0, 1).Value Worksheets(3).Cells(Rows.Count, 1).End(xlUp).Offset(0, 1).Value = "ある材料" Worksheets(3).Cells(Rows.Count, 1).End(xlUp).Offset(1, 1).Value = "不足材料" End If myClm = 3 End If myZairyo = Worksheets(2).Cells(myRange.Row, myClm).Value myRow = Worksheets(3).Cells(Rows.Count, 1).End(xlUp).Row Set myCell = Worksheets(1).Range("B1:" & Cells(Rows.Count, 2).Address).Find(myZairyo, LookAt:=xlWhole) If myCell Is Nothing Then Worksheets(3).Cells(myRow + 1, Columns.Count).End(xlToLeft).Offset(0, 1).Value = myZairyo Else Worksheets(3).Cells(myRow, Columns.Count).End(xlToLeft).Offset(0, 1).Value = myZairyo End If Loop Until Worksheets(2).Cells(myRange.Row, myClm).Offset(0, 1).Value = "" End Sub 次に下記の要領で下記のコードをコピー&ペーストして下さい。 1.VBE画面のVBAProgectと書いてある画面左上の下にあるSheet2をダブルクリックし、Sheet2のコードエディターを表示させる。 2.表示された右側の白い部分に下記のコードをコピー&ペーストする。 Private Sub Worksheet_Change(ByVal Target As Range) Dim myRow As Integer Dim myClm As Integer myRow = Target.Row If Target.Address <> Cells(myRow, 1).Address Then Exit Sub Do myClm = myClm + 1 Loop Until Worksheets(2).Cells(1, myClm).End(xlDown).Row = Worksheets(2).Rows.Count myClm = myClm - 1 myRow = Worksheets(2).Cells(Rows.Count, 1).End(xlUp).Row Range("A2:" & Cells(myRow, myClm).Address).Select Selection.Sort key1:=Range("A2"), Order1:=xlAscending, Header:=xlGuess End Sub 最後に、マクロを実行させるツールバーを作成します。次のように操作して下さい。 1.ALT+F11キーでエクセルの画面にもどる。 2.メニューバーにカーソルを合わせて右クリックし、出てきたプルダウンメニューの中のユーザー設定をダブルクリックする。 3.出てきたダイアログボックスの右側の新規作成ボタンをクリックし、ツールバー名を献立表と入力後OKボタンで閉じる。 4.ユーザー設定ダイアログボックスの分類の中の新しいメニューをクリックし、右のコマンドの下にある新しいメニューにマウスポインターをあわせ、マウスの左ボタンを押したまま作成したツールバーの上にマウスポインターをあわせ、そこでボタンを離す。(新しいメニュと黒枠で囲まれて表示される) 5.作成したツールバーにマウスポインターをあわせて右クリックして出てきたプルダウンメニューの中の名前を献立表作成と変更し、その下にあるマクロの登録ボタンをクリックする。 6.マクロの登録ダイアログボックスの白い部分にmyWorkbook_Open()と書かれている部分をダブルクリックしてOKボタンでボックスを閉じる。 7.OKボタンを押してユーザー設定ダイアログボックスも閉じる。 これでツールバーにマクロが登録されました。献立表作成と書かれている部分をクリックするとマクロが走り、シート3のA列に調理日が一番古い料理名C列以降の1行目に冷蔵庫にある材料名・C列以降の2行目に不足材料名が表示されます。 再度マクロボタンを押すと、上記に表示された次に調理日が古い料理名・例倉庫にある食材・買わなければならない食材が表示されます。 シート2の調理日を変更すると自動的に日付の古い順にソートされます。 一度お試しになってみて下さい。もし、お気に召さないような時は、ki-aaaさんがお書きになったような方法で詳細をお知らせ下さい。

commune
質問者

お礼

どうもありがとうございます!! 最高です!! お金を払いたいほどです^^ 本当は自分で作れなきゃだめですよね・・・ これってVBE画面にペーストした内容を見ながら本で勉強すればいいのでしょうか・・・ kazuhiko5681さん 天才!! ありがとうございました!! ・・・・またよろしくお願いします(笑)

その他の回答 (4)

  • ki-aaa
  • ベストアンサー率49% (105/213)
回答No.4

こんにちわ。 面白そうなので、どういう風に処理するか、考えてみました。料理には、詳しくないので、はじめに断っておきます。 >(1)約300種類の料理名と、使う材料を表にしてあります。   例)肉じゃが/じゃがいも/牛薄切り肉/絹さや これを、具体的に書きます。 ■料理材料表 A1・・調理年月日 B1・・料理名 C1:M1・・主要料理材料(品名) N1:V1・・調味料等 W1:AG1・・有っても無くても良い材料 食材の、照合は、主要料理材料のみとする。 調理年月日が変化したら、自動的に古い順に並び替えをおこなうよう、マクロを実行します。また、同じ日付けのものは、上にきたものを、より古いと判断します。 >(2)冷蔵庫の中にある食材は、買い物した段階で買った日付と食材名を表にしてあります。また、使い切った食材はその都度削除しています。 これも、具体的に書きます。 ■購入済材料表 A1・・購入年月日 B1・・品名 C1・・数量 D1・・賞味日数 E1・・作業用セル F1・・賞味期限 入力するのはA1,B1,C1,D1です。F1はA1とD1を加えたものです。これも、同じ日付けだったら、上にあるほうが古いものとします。 ■実行手順 1 購入済材料表から、E列にフラグのたっていない一番古い、賞味期限のものを選ぶ。 2 1で選んだ品名を料理材料表の、古いものから、照合すル。 3 2で合わなかったら、E列にフラグを立てて、1に戻る。 3.1 ひとつも、合致する料理が無かったら、その旨表示して、9へ飛ぶ。 4 2で合うものがあったら、その料理名を書き出す。 5 このとき、他の、主要料理材料も、品名と照合する。 6 4で書き出した料理名の中で、合致した、主要料理材料の、セル(文字)の色を変える。 7 合致した、購入済材料表の品名のE列にフラグを立てる。 8 前に、すでに選んだ料理があることを記憶して1にもどる(追加の料理を選ぶ)かどうか、判断する。 9 購入済材料表のE列に立てたフラグを消して、処理を終わる。 一応、こんな処理手順を考えました。kazuhiko5681さん、私に教えてくださったように、この方にも、教えてくださいな。

commune
質問者

お礼

どうもありがとうございます む、、、ムズカシイですね。。。 勉強が必要のようです^^;

回答No.3

こんばんわ。 [ブックの構成]  ・シート1(冷蔵庫にある食材を入力しておくためのシート)   B列に食品名・A列にその食品を買ってきた日付を入力する。    (B列には、必ず食材を入力しておくこと)   日付は、古い順に必ず並べておく  ・シート2(料理名と使う食材を入力しておくためのシート)   A列に料理名・B列以降にB・C・・・の順に使う食材を入力する。 ・シート3(食材の古い順に料理名・使う食材を表示させるためのシート)   空白のままにしておく このような設定で、サンプルマクロを組んでみました。ブックを立ち上げると同時に、メッセージボックスが表示され、ハイを押すとシート3に料理名と使う食材が食材の古い順に表示されます。いいえを押すとシート3が空白のまま立ち上がってきます。これを実行させるためには、次のように操作します。 1.新規ブックを立ち上げ、シート1・シート2に、上に書いたとおりにデータを入力する。(既存のデータをコピー&ペーストしてもよい) 2.ALT+F11キーを押して、VBE画面を開き、表示された画面の左上のVBAProjectと書かれている下のThisWorkbookをダブルクリックし、ThisWorkbookのコードエディターを表示させる。 3.表示された右側の白い部分に、下記のコードをコピー&ペーストする。 4.ブックを名前をつけて保存終了する。 5.再度ブックを開く。 これで、確認してみて下さい。もしご不明な点・不具合等がありましたらご遠慮なくお知らせ下さい。 Private Sub Workbook_Open() Dim myMsb As Integer Dim myAdr1 As String Dim i As Integer Dim myZairyo As String Dim myRange As Range Dim myAdr2 As String Dim j As Integer Dim myFlg As Integer Dim myRow As Integer Dim Adr3 As String Dim k As Integer myMsb = MsgBox("献立一覧を表示しますか?", vbYesNo + vbQuestion, "作 業 選 択") If myMsb = vbNo Then Exit Sub myAdr1 = Worksheets(2).Range("A1").CurrentRegion.SpecialCells(xlCellTypeLastCell).Address With Worksheets(2).Range("B1:" & myAdr1) For i = 2 To Worksheets(1).Cells(Rows.Count, 2).End(xlUp).Row myZairyo = Worksheets(1).Cells(i, 2).Value Set myRange = .Find(myZairyo, LookAt:=xlWhole) If Not myRange Is Nothing Then myAdr2 = myRange.Address Do If Worksheets(3).Range("A1").Value = "" Then Worksheets(3).Range("A1").Value = myRange.End(xlToLeft).Value Else Worksheets(3).Cells(Rows.Count, 1).End(xlUp).Offset(2, 0).Value = myRange.End(xlToLeft).Value End If For j = 2 To Range(myAdr1).Column If Worksheets(2).Cells(myRange.Row, j).Value <> "" Then myFlg = 0 myZairyo = Worksheets(2).Cells(myRange.Row, j).Value myRow = Worksheets(3).Cells(Rows.Count, 1).End(xlUp).Row For k = 2 To Worksheets(1).Cells(Rows.Count, 2).End(xlUp).Row If Worksheets(1).Cells(k, 2).Value = myZairyo Then myFlg = 1: Exit For End If Next k If myFlg = 1 Then If Worksheets(3).Range("B1").Value = "" Then Worksheets(3).Range("B1").Value = myZairyo Else Worksheets(3).Cells(myRow, Columns.Count).End(xlToLeft).Offset(0, 1).Value = myZairyo End If Else If Worksheets(3).Range("B2").Value = "" Then Worksheets(3).Range("B2").Value = myZairyo Else Worksheets(3).Cells(myRow + 1, Columns.Count).End(xlToLeft).Offset(0, 1).Value = myZairyo End If End If myFlg = 0 End If Next j Set myRange = .FindNext(myRange) Loop While Not myRange Is Nothing And myRange.Address <> myAdr2 End If Worksheets(3).Cells(Rows.Count, 1).End(xlUp).Offset(2, 0).Value = "×" Next i End With For i = 1 To Worksheets(3).Cells(Rows.Count, 1).End(xlUp).Row If Worksheets(3).Cells(i, 1).Value = "×" Then Worksheets(3).Rows(i & ":" & i).ClearContents End If Next i End Sub

commune
質問者

お礼

どうもありがとうございます!! マクロってすごいですね~ 質問ですが、一部の食材でシート3に反映されないものがあります。なぜでしょう・・・ シート1と2は、1行目はタイトルにした方がいいですか? それと・・・贅沢を言えば・・・^^; シート3に反映される献立を、その料理を最後に作った日が古いものを優先にして、ひとつだけ表示させたいです。 〈今は、たぶんその食材を使う献立全てが表示される〉 そして、不足している食材をシート4に買い物リストとして表示させることはできますか? もしお時間がありましたら よろしくおねがいします。m(__)m ・・・ここまで作っていただいて、、、わがまま言ってすみません。。。 わたしもマクロ勉強します!! できるひとはかっこいいですね!

回答No.2

初めまして。サンプルマクロを組んでみたいと思います。少し時間を下さい。マクロを実行すれば、貴方様の思い通りの動作を簡単に実行することができると思います。

commune
質問者

お礼

ありがとうございます!! マクロは、食わず嫌いのように避けて通ってきたのですが^^; この機会に克服したいと思います! ・・・ということは、この質問は締め切らない方が良いですね^^ お手数おかけします よろしくお願いします

回答No.1

作ってできないことはないと思いますが、ご質問の中で挙げられたご要望に関して、 多くの不明点があります(下記)し、明確にされたとしても、かなり煩雑なものになる と思います。また、運用面でも難しいのではないでしょうか。 > 1.冷蔵庫の中にある食材(買った日付の古いものが優先)を使った料理名を表示     ・いくつ表示するのか。     ・該当する料理が複数ある場合は何を優先させるのか。     ・前回使ったが使いきれずに残っている一番古い食材を使った料理は表示      対象にするのか。 > 2.冷蔵庫の中にある食材をフルに活用(最大公約数?)はしなくて良い。 >    (買いものに行かなくても、あるものだけで作るという検索はしなくて良い)     ・本体以外すべて買わなければならないというものまで表示してよいのか。 > 3.約300種類の料理名の中から、最近作っていないものを優先して検索したい。     ・次のような記録はどのようにして残すのか。      a)料理リスト:料理した日付(場合によっては朝食、昼食、夜食の別まで)      b)食材リスト:余った食材ごとの使用した日付(同上)     自動的に記録する手法をとったとしても、このシステムに頼らず当日の思い     つきで料理を作った場合は、前記 a) b) に関するデータを手作業で入力する     必要がある。 > 4.冷蔵庫の中にあるものリスト にある、一番古い食材を使った料理名を筆頭に、 >    <中略>冷蔵庫の中にある食材10種類の中から3種類使うという場合は、 >    残りの7種類の食材のうち、一番古いものを使った料理名を次に表示。     ・上項1と同じ問題あり。 総合的に判断しますと、単純に「食材を指定して料理リストを表示させ、不足食材を 確認する」程度の内容でよいような気がしますが‥‥。

commune
質問者

お礼

ご回答ありがとうございます! おっしゃる通り、手入力が発生するなら、不足食材を確認する程度のもので良いかもしれませんね^^; 一応、挙げて頂いた不明点についてお答えします。 >いくつ表示するのか。 ●ひとつです。 >該当する料理が複数ある場合は何を優先させるのか。 ●このシステムをはじめに使う時だけ、前回料理した日を適当に1月1日から入れていって、古い日付を優先にしてもよいと考えています。 >前回使ったが使いきれずに残っている一番古い食材を使った料理は表示対象にするのか。 ●対象にします。残っているものも、最後に使った日付ではなく、買った日付をいかしたいとおもっています。 >本体以外すべて買わなければならないというものまで表示してよいのか。 ●よいです。 >次のような記録はどのようにして残すのか。 >    a)料理リスト:料理した日付(場合によっては朝食、昼食、夜食の別まで) >    b)食材リスト:余った食材ごとの使用した日付(同上) ●aは、手入力です。bは、使用した日付は入力せず、買った日をいかします。今日の段階で一番古い食材が、使ったけれども残った場合、明日もそれは一番古い食材になります。 >4.〈中略〉上項1と同じ問題あり。 ●ひとつです。

関連するQ&A

  • エクセルで一覧表から検索リストを作成したい

    検索日付を入力して検索日より前の日付と名前をリストにしたいのですがわかりません。 やりたいのは、まずA1からA50に日付 B1からB50に名前を入力したリストから検索一覧表を作りたいです。 月別の表も作りたい

  • レシピのデータベース

    食材(材料)を入力すると、その食材を使ったレシピが出てくるといったようなデータベースってありませんか? 例えば、冷蔵庫の中で余っている野菜とお肉を入力すると、それらを上手く組み合わせた料理のレシピが出てくるというものです。

  • 節約ダイエットレシピ教えてください

    明日まとめて買い物いきます。 20日くらい何の食材があればやっていけますか? 料理するのは、昼と夜だけです。一人暮らしです。 あと簡単なレシピもお願いします。 今冷蔵庫にある食材は、キャベツぐらいです。白ご飯、パスタ、味ポン、料理酒、オリーブオイル、油、砂糖、塩コショウぐらいです。

  • エクセルで検索

    エクセルシートに商品名が1000種類くらいあります。 そのなかからaaaの文字列を持つものをすべて検索し、検索結果の中からaaa-xxを特定のセルに表示させたいのです。 現在は、編集→検索→aaaを入力→すべて検索→aaa-xxを選択→上の入力欄に表示されたものをコピーして特定のセルにペースト という手順でやています。 この操作をもっと単純にできないでしょうか。 ご存知の方よろしくお願いいたします。 (特定のセルに商品名をペーストすると、その商品の月別売上が表とグラフになるようになっています。)

  • Excel VBA 条件検索について

    ExcelVBAで 「データ検索後リスト表示をして、そのリストから該当するシートを選べば表示される」 というユーザーフォームを作成したいのですが、やり方がよく解りません。どなたか教えて下さい。 具体的には 「コマンドボタンが押された時に、ユーザーフォーム内のテキストボックスに入力された値(名称、日付等)と、複数のシート内のセルの値(名称、日付等)を比較して、一致(全一致、一部一致)した場合、ユーザーフォーム内のリストボックスに表示させる」 というものと 「リストボックスに表示されたものの中から見たいシートを選択すると、そのシートを表示する」 というものです。 リストの表示形式は シート名   名称  日付等 Sheet1    りんご  2013.01.01 Sheet2    りんご  2013.01.02 という具合にしたいと思っています。 ちなみに複数のシートと言いましたが、マスターシートを作りコピーして使用しますので、同一形式のものになります。 以上になります。 色々やってみましたが、うまくいきませんので、どなたか解る方は教えて下さい。 よろしくお願いします。

  • 残り物食材

    冷蔵庫の中の残っている食材を 入力したら、その食材でできる料理を リストアップしてくれるホームページは ないでしょうか。

  • EXCELで検索用のリストBOXを作りたいのですが

    お世話になっております。 EXCELで検索用のリストBOXを作りたいのですが、作り方を教えていただけないでしょうか? 現在、以下のような表がありまして、 顧客番号 会社名 都道府県 住所  TEL 001    A社   東京    ○○   ×× 002    B社   静岡    △△   □□ この表の上にツールボックスのリストボックスかコンボボックスを作って検索をかけたいのです。 リストボックスに会社名を入力すると(会社名の一部でも可)ヒットしたリストが出てきて、選択した会社の行がフィルタリングされて表示するようにさせたいのですが、そのような事が出来るのでしょうか? 宜しくお願いします。

  • Excelでの検索

    Excelの使い方についてですが、例えばA表の1万品目のプライスリストがあり、B表の500品目をその中から探したい場合、何かすぐに検索できる方法、式はありますか?

  • 5日分の料理のレシピ

    5日分の料理のレシピを教えてください!! 事情で、週に1回しかスーパーへ買い物に行けなくなりました。 大人2人。弁当も毎日2人分作ります。 冷蔵庫の容量は小さめで、単身者用の大きさです。 週に1回しか買い物にいけないので、どばっとまとめて購入になりますが、今までは週に3日、また、足りない食材が出る都度買い物に行っていたため、不安でたまりません。 教えてください。 レシピは、質素な料理でも慣れているので大丈夫です。 よろしくお願いいたします!!!!!

  • エクセルVBAマクロ検索について

    エクセルで検索してフラグを立てるマクロを教えてください。 A列  B列   C列   D ・・・・・ NO.  日付1  日付2  というリストがあり、A列からNOを検索してB列に日付のフラグを立てる作業をしたいのですが、 まず日付を入力するボックスで設定させてから、A列のIDを検索し、 該当IDのB列にその日付をフラグ入力させるというものです。 このときフラグ入力された該当IDのある列が表示されるようにします。 もしも既に日付フラグが立っているものがあれば、「重複です」等のメッセージボックスが出るか、 またはC列に新たな日付フラグが立つようにしたいです。 それと、上記マクロでA列を参照してB列にフラグという内容を違う列に変える場合(同類の違うリストでもこのマクロを活用したいため)、参照列とフラグ列はマクロでどこを直せばいいのか教えていただけると助かります。 いろいろ自力で調べては見たのですが、知識不足でお力を貸していただけると幸いです。 よろしくお願いいたします。 

専門家に質問してみよう