• ベストアンサー

Excelで文入力の登録、短縮機能は?

糖尿病コントロールのため、Excelで糖尿病食の献立を毎日入力管理する表を作っていますが、同じ食品名やカロリーを日替わり毎に何度も入力する必要があります。コピー、貼り付けをすればよいのですが、項目を探すのが面倒です、各食品名の頭に整理番号を打っていますが、番号を入力すれば項目が表示できる登録、短縮機能のような事ができる方法があれば教えて下さい。

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

  • ベストアンサー
  • shinkami
  • ベストアンサー率43% (179/411)
回答No.2

整理番号を使わなくともよいと思います 方法は2通りあります 第一の方法 入力するセル上で右クリック「リストから選択」を選びますとそれまでに入力した一覧が重複を排除してリストされます。 (ごはん、ご飯、御飯は別物として表示されます) 第二の方法 事前準備として、食品の一覧を登録しておきます 入力するセルをクリックして、メニューバー上のデータ→入力規則→設定タブで入力値の種類をリストにして、元の値を範囲指定(絶対アドレスで)で設定します。 これで入力時セルの右端の▼でリスト表示されます カロリーが食品毎に特定されるなら食品の一覧に単位当りカロリーも登録しておき「Vlookup関数」を活用すれば入力効率が良くなる?

guttiotaka
質問者

お礼

回答を頂いていながら、御礼が遅くなっていまして申し訳有りません。土日しかパソコンに向かう時間がなくて、今日も(糖尿病食管理表)完成に頑張っています。ご回答で短縮機能が出来るという事が分り、完成に意欲が増しました。遅くなりましたが、厚くお礼申し上げます。未だ、この段階にはいっていませんが、現在、食品のカロリー、栄養素の参考書等で研究しながらの入力中で、自分にあった1日の献立、運動等の指示書がパソコンを使って簡単に出来るというのが目的です。今のところは毎日食べたものを記録し、朝、空腹時血糖を計っていますが手書きは大変です。ちなみに、今までの食材を交換したり、運動したりと工夫して一時は空腹時血糖300mg/dl ヘモグロビンA1c9.8と即入院状態のところ、現在のところ120mg~160mg/dl ヘモグロビンA1c6.2に改善していますが、まだまだです。これが完成して毎日便利に活用でき、食養生も無理なく継続できれば更に良い結果が出るかなと思っています。本当に有難うございました、まだまだ、疑問のところが出てくると思いますが、今後もご教授宜しくお願いいたします。

その他の回答 (1)

noname#140971
noname#140971
回答No.1

エクセルは操作したことのない門外漢ですので、次のようなアイデアしか思いつきませんでした。 そういうことで参考程度にされて下さい。 foods.txt F0001:AAA F0002:BBB F0003:CCC それは、このようなテキストファイルを利用する方法です。 先ず、メモ帳でF0001~F9999の整理番号を付けてコロン(:)に続けて食品名を入力して下さい。 次に、それを保存して下さい。 <ブック起動時に読み込む仕掛け> 次のコードを標準モジュールに登録して下さい。 Public strFoods() As String Public Sub Auto_Open() On Error GoTo Err_Auto_Open   Dim fso    As Object   Dim strTexts() As String      Set fso = CreateObject("Scripting.FIleSystemObject")   strFoods() = Split(fso.OpenTextFile("C:\Temp\Foods.txt").ReadAll, vbCrLf) Exit_Auto_Open:   Exit Sub Err_Auto_Open:   MsgBox Err.Description & "(Auto_Open)", vbExclamation, " 関数エラーメッセージ"   strFoods() = Split("")   Resume Exit_Auto_Open End Sub Public Function CutStr(ByVal TEXT As String, _             ByVal Separator As String, _             ByVal N As Integer) As String   Dim strDatas() As String      strDatas = Split("" & Separator & TEXT, Separator, , 0)   CutStr = strDatas(N * Abs((N <= UBound(strDatas)))) End Function Public Function LenH(ByVal TEXT As String) As Integer   LenH = LenB(StrConv(TEXT, vbFromUnicode)) End Function <シート入力を翻訳する仕掛け> シートモジュールに次のコードをコピペして下さい。 Private Sub Worksheet_Change(ByVal Target As Range) On Error Resume Next   Dim I    As Integer   Dim N    As Integer   Dim strValue As String   Dim strKey  As String      strValue = Target.Value   strKey = CutStr(strValue, ":", 1)   If UCase(Left$(strKey, 1)) = "F" And (LenH(strKey) = 5 And Len(strKey) = 5) Then     N = UBound(strFoods())     For I = 0 To N       If StrComp(strKey, Left$(strFoods(I), 5), vbTextCompare) = 0 Then         Target.Value = CutStr(strFoods(I), ":", 2)         Exit For       End If     Next I   End If End Sub 見たら判りますが、先頭がFで長さ5文字が入力されると翻訳ルーチンが働きます。 登録データに合致するまで翻訳を試みます。 ですから、 F0001:AAA F0003:CCC F0004:CCC と非連番であっても構いません。 ※なお、食品名列の隣にカロリーを表示するように改造することも簡単だと思います。