VBA初心者が医薬品データを管理する方法とは?

このQ&Aのポイント
  • 薬局で医薬品データと患者使用量を管理するために、VBA初心者が考えている方法について教えてください。
  • 具体的には、医薬品名や来局期間を指定して必要なデータを抽出する方法や、新しいデータの警告を行う方法についてのアイデアを求めています。
  • 具体例を交えて、VBA初心者がどのように組み立てれば良いのかについて詳しく教えてください。
回答を見る
  • ベストアンサー

VBA初心者です。宜しくお願いします。

VBA初心者です。宜しくお願いします。 薬局で医薬品データと患者使用量を管理しています。 Sheet1(条件指定&抽出画面) A:医薬品名称 B:患者ID C:来局日   あ錠      001     4/1   うカプセル   002     4/28 Sheet2(データベース)→約5000行 A:医薬品名称 B:患者ID C:来局日   あ錠      001     4/1   あ錠      001     5/2   うカプセル   002     4/28   うカプセル   002     7/14   うカプセル   002     9/15 シート2にデータベース、シート1で条件指定(医薬品名や来局期間など)して必要データを抽出しています。 例えば、4/1~4/30の間に来局する患者一覧を出すと、上のシート1の様に抽出されるわけです。 期間指定した場合、5/1以降のデータは抽出されないわけで、これをユーザーに警告できるようなアイデアを模索中です。 【案1】データベース自体を加工する・・・つまり医薬品名称と患者IDが同一で、来局日が複数ある場合、来局日が古い行にフラグを付けるまたは削除する 【案2】上の例のように抽出された結果について、医薬品名称と患者IDが同一の行をデータベースから再検索し、抽出結果よりも日付が新しいものがあれば、先の抽出結果の行にフラグ、または色をつける な どなど考えてみましたが、具体的なVBAの組み方が分かりません。 具体例があればご教授ください!

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

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.6

質問のようなことをやる必要性を、読者・回答者に示さずに、考えさせコードを教えろというのは、考える方にとって馬鹿らしい。特殊業界については回答者も慣行や必要性は説明してもらわないと判らないものだ。 ーー 期間を指定して検索すれば、その期間以外のデータは出てこないのは当たり前。 期間の指定がまずくて、最近の投薬等を見過ごすと思うなら、 ・期間中の該当結果 ・それ以後の現在までなどの該当をだして、注意喚起してはどうです。 >具体的なVBAの組み方が分かりません それ以前の設計の問題でしょう。薬などの生命にかかわる事項の処理のシステムつくりを>VBA初心者です、がやって良いのだろうか。餅は餅屋にまかせ、プロに頼むべきだ。 エクセルは共用(他の人に使ってもらうのも含め)は適当ではないとおもう。何も手を打たないと、データ丸見え、変更自由、複写自由、バックアップも不完全と言った脆弱な面がある。 ーー 【案1】と【案2】を考える意味がわかりません。 期間条件に合ったものの抽出はそもそも何のためにするのですか。 >医薬品名称と患者IDが同一で、来局日が複数ある場合、来局日が古い行にフラグを付ける 目的は。

その他の回答 (5)

回答No.5

はじめまして、通るすがるともうします。 上記要件についてなのですが、今現在マスター化しているデータ量は 5000件ということなのですがこのデータ量は今現在のものであって 今後増えていくことがありえると考えてよいのでしょうか? もし、そうならどの程度の容量で見積もっているのでしょうか? というのは、現在お使いのexcelのバージョンにより最大約6万5千件 が限度(office XP以前だと)ということを意識しておいたほうが よいと思います。また、検索用データベースに対して加工を行うとそれ相応 の資源(メモリ)が必要となり、処理を組み込み後運用に耐えられない結果 を生み出す可能性もでてくるかと思います。 そのような結果となるまえに今から、専用のデータベースとそれに対応した 開発言語などを使用して必要なツールを構築したほうがよいと思います が如何でしょうか? 開発環境としては以下のような組み合わせがあるかと思います。  postgress + ,net(vb、c#、j#など)  oracle+.net(同上)  など データ抽出方式も上記データベースを使用することにより代四世代言語 (SQL)が利用でき生産効率も上がるかと思います。

  • nattocurry
  • ベストアンサー率31% (587/1853)
回答No.4

#3です。 訂正があります。 E2に =IF(COUNTIF(D:D,D2)=COUNTIF(D$1:D2,D2),1,0) と入力し、列D全体にコピペ。 ↓ E2に =IF(COUNTIF(D:D,D2)=COUNTIF(D$1:D2,D2),1,0) と入力し、列E全体にコピペ。

  • nattocurry
  • ベストアンサー率31% (587/1853)
回答No.3

4/1~4/30の間に来局する患者一覧を抽出したなら、5/1以降のデータは抽出されないのは当たり前ですよね。 なぜ警告が必要なのでしょうか? ところで、現時点で、抽出はどのようにしているのでしょうか? VBAですか? 【案1】なら、VBAを使わずとも実現できますよ。 たとえば、列Dと列Eを作業列にして、 D2に =A2&B2 と入力し、列D全体にコピペ。 E2に =IF(COUNTIF(D:D,D2)=COUNTIF(D$1:D2,D2),1,0) と入力し、列D全体にコピペ。 そうすると、列Eは、医薬品名称と患者IDが同一なもののうち、最後のものだけ1、最後ではないものは0、になります。

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.2

先ず、データベースはデータの蓄積に意味があるので、 案1にあるように削除してはマズイでしょう。 そこで、「警告」なんですが、不明点があります。 警告する単位は何でしょう? (1)医薬品名称 (2)患者ID (3)医薬品名称と患者ID 蓄積を考えると、Excelではなく、Accessを使った ほうが大量にデータを蓄えられると思います。 Accessが無ければ、フリーのDBとしてPostgresや MySQLもあります。 簡単なのはPostgresです。GUIも付いています。 勿論、操作はExcelで実行します。

  • kmetu
  • ベストアンサー率41% (562/1346)
回答No.1

ある日以降のデータが抽出されない場合、警告を出して再検索するくらいなら、最初から○月○日以降のデータを全て表示すれば良いのではないでしょうか… 【案1】と【案2】もフラグをつけたり削除したりして何の意味があるのか不明ですが…

関連するQ&A

  • Excelでデータを抽出

    エクセルでデータベースを作成しました。 このデータベースから目的のものだけを別のシートに抽出したいです。 データベース A ID1 B ID2 C 内容 この内容が100行書かれているとします。 ある20個のIDの内容だけを別のシートに抽出したいのです。 ID1を昇順にならべるとID2は昇順にならないようなIDになっています。 なので、VLOOKUPがつかえません。 ID1から抽出したいもの20個を選んで、シート2へ選んだ内容のID1と内容を抽出 ID2から抽出したいものを20個選んで、シート3へ選んだ内容のID2と内容を抽出 どの様にしたら出来ますか? うまく説明できなくてすみません。 宜しくお願いします。

  • Excel VBA2007について

    sheet上の 行で指定した一部のセルを抽出する方法があったら教えてください。

  • エクセルのマクロは超初心者のため、難しいことは全く分かりません。

    エクセルのマクロは超初心者のため、難しいことは全く分かりません。 よろしくお願いいたします。  m(_ _)m 同じbook内に複数のsheetがあります。 そのsheetは同じ型式のデータベースなのですが、sheetによって行が違います。 そのsheetのデータを一つのシートにコピー(一番上の先頭行はデータベースの名称でコピーしたくありません) をして一覧でまとめたいのですが、方法がわかりません。 sheet数が多いので、一つずつコピー→ペーストをするのが大変なので…どうぞよろしくお願いします。

  • クエリの作り方はこれでよいでしょうか

    Access2010で以下のことをやりたいのですが、助言ください。 ・元データはExcelに入っている。 ・sheet1のA列のみに抽出用の番号(商品番号000000001とか)が入力されています。(数千行) ・sheet2はデータベースで、A列に商品番号(こちらは複数同じものあり)、B列に商品名、C列に国名、D列に価格・・~その後J列まで情報が入っています。(行数は1万行以上・・10万行近かったです) 【やりたいこと、現状】 ・sheet1に入っている商品番号でsheet2のデータベースに抽出をかけて、Excelに抽出結果シートを作りたい。 ・最終的にはExcelファイルにしたい。 ・途中経過では現在Accessを使っている。 ・Sheet1に商品番号があっても、Sheet2にないものがある。データベースにない場合も抽出結果シートには反映させたい。(商品番号だけ抽出結果に表示させて、右の列はすべて空欄にしたい) 【やったこと】 ・sheet1をT抽出条件、sheet2をTデータベースとしてAccessにインポートしてテーブルを作りました。 (T抽出条件はA列しかないので、主キーは商品番号、TデータベースはID列を追加して主キーに) ・リレーションを商品番号でかけて、クエリを作成(Q結果) →クエリで使った項目 T抽出条件から商品番号 TデータベースからはIDと商品番号を除くものすべて。 このQ結果をExcelにエクスポートし、完成! と思ったのですが、これだとsheet1にはあって、sheet2にはない商品番号の情報が載ってきません。 sheet1にはあるけど、sheet2にはない情報も載せたいのです。 どのようにしたらよいでしょうか。 また、上記の方法で問題はないでしょうか。 結果が数千も出るので確かめようがありません。 どこがおかしければご指摘ください。 また、確かめ方などもありましたら、ご教授ください。 よろしくお願いします

  • VBAで データベースにデータを取り込みたい

    患者データベースを作っています。 患者情報には患者ID、患者氏名、レントゲン画像、撮影日等のフィールドがあ ります。 一人の患者に写真は複数枚あるので、患者IDでリレーションシップをとってお り、テーブルはT-患者情報、T-画像情報の2つにわけています。 このデータベースに新規で患者情報と画像情報を入れます。 通常は入力フォームからですが、このデータベースには入力フォームが存在し ません。 患者情報はtxtファイル(この中に患者ID、患者氏名、撮影日等が記入されてい る)とjpegファイル(これがレントゲン画像)に入っています。 この2つのファイルがフロッピーディスクの中に入った状態です。 テキストファイル内のデータは下記のような感じです。 (例:Img0001.text) 患者ID: 1 患者氏名:ヤマダ タロウ 撮影日:H15.01.01 txtファイル内には、患者情報は一名分しか入れてありません。 このような場合、txtファイル内の患者情報をデータベースに取り込むにはどの ようにすればよいですか? コマンドボタンからのクリックイベントによって処理させる予定です。 ご指導よろしくお願いします。

  • エクセル VBA 初心者で困っております!

    いつもありがとうございます。VBA初心者です。 データベース(sheet2)のデータをセルA1(sheet1)の値をオートフィルタ-に反映させて抽出し、 その後、セルB1(sheet1)に入力した値と貼り付けた別のシート(sheet3)で数値1×数値2(B1で入力した値)を掛け算し、数値3に出すのが目的です。 sheet1 セルA1【製品名を入力】例、【製品A】を入力 セルB1【数値を入力】例、5を入力 コマンドボタン1を押すと実行 sheet2(データベース)      製品名      数値1    数値2   数値3 1 製品C       2           2 製品A       2 3 製品A       1 4 製品B       4 5 製品D       3 6 製品D       5 sheet3(貼付先) 実行結果   製品名      数値1    数値2   数値3         1 製品A       2        5     10 2 製品A       1        5      5 当初、リストボックスを選択出来るようにし、その値を別のシートに貼り付け、演算処理を行うの方法を模索しておりましたが、 shee2のデータベース、A1・B1(検索値・値)も毎回変わるため、1回ずつの作業を行うように考えなおしたところ、 いきずまってしましました。 時間がないためによろしくお願い致します。

  • VBA Excel 特定の記号を含んだ行

    Excel VBAにて、質問します。お手数ですが宜しくお願いします。 画像の様に、E列に特定の記号"●"や"▲"含んだ行以外、抽出し 印刷のシート名に貼り付けしたいと思います。 ですが、条件がありまして、その条件とは、InputBoxを使って 抽出したい日付を入力し、入力した日付、時刻までの記号"●"や"▲"以外 を抽出できる様にしたいです。 例えば実行時の日付が8/21日ならば InputBoxに、8/28 20:00と入力したら、入力した日付、時刻までの 記号"●"や"▲"以外を抽出となります。 画像の様に、1行目の見出し名も貼り付けできる様に、VBAを使って できませんでしょうか? ※ 画像ではSheet1のみ載せましたが、 Sheet2とSheet3とSheet4とSheet5とSheet6まで似た内容のデータがあるので シート名を指定して動作できると良いです。 Array("Sheet1","Sheet2","Sheet3","Sheet4","Sheet5","Sheet6")見たいな 感じでできますでしょうか? 御面倒お掛けしますが宜しくお願いします。

  • エクセルVBA 他ブックの同じ行に貼り付け(可変)

    皆さんこんにちは。 度々こちらでお世話になっております。 エクセル2013使用のVBA初心者です。 ブック1の「検索」シートで絞り込み結果が1つになるまで 絞り込んだ後の話です。 ブック1「検索」シートで絞り込み、結果が1行になったら その行をコピーして ブック”データベース.xlsx”のSheet1の(検索シートと)同じ行に 貼り付けをしたかったのですが 下記のコードですと”データベース.xlsx”を開いて保護をやめるところまで動くのですが 貼り付け箇所でエラーが出てしまいます。 エラーは「1004RangeクラスのPasteSpecialメソッドが失敗しました」です。 原因はなんとなく「行」をWith Sheets("検索").AutoFilter.Rangeじゃないところで 使っているからかな?と思っているのですが 『可変の検索シートの絞り込み結果行と同じ行を  他ブックで選んで貼り付け』 の書き方が分かりません。 ブック1検索シートの絞り込み結果1行(可変)をサーバー上にある データベース.xlsx”のSheet1の同じ行に貼り付ける方法を 教えていただけないでしょうか。 --------------------------------------------------------------------- With Sheets("検索").AutoFilter.Range With .Resize(.Rows.Count - 1).Offset(1) Dim 行 As Integer 行 = .Columns(1).SpecialCells(xlCellTypeVisible).cells(1).Row Sheets("検索").Range("A" & 行).EntireRow.Copy Workbooks.Open Filename:="¥¥***.**.**.**¥DATE¥データベース.xlsx" Workbooks("データベース.xlsx").Sheets("Sheet1").Unprotect Workbooks("データベース.xlsx").Sheets("Sheet1").Range("A" & 行).PasteSpecial Workbooks("データベース.xlsx").Sheets("Sheet1").Protect Workbooks("データベース.xlsx").Save Workbooks("データベース.xlsx").Close

  • VBA Excel 特定の記号を含む行で

    Excel VBAにて、質問します。お手数ですが宜しくお願いします。 画像の様に、E列に特定の記号"●"や"▲"含んだ行以外、抽出し 印刷のシート名に貼り付けしたいと思います。 ですが、条件がありまして、その条件とは、InputBoxを使って 抽出したい日付を入力し、入力した日付、時刻までの記号"●"や"▲"以外 を抽出できる様にしたいです。 例えば実行時の日付が8/21日ならば InputBoxに、8/28 20:00と入力したら、入力した日付、時刻までの 記号"●"や"▲"以外を抽出となります。 画像の様に、1行目の見出し名も貼り付けできる様に、VBAを使って できませんでしょうか? ※ 画像ではSheet1のみ載せましたが、 Sheet2とSheet3とSheet4とSheet5とSheet6まで似た内容のデータがあるので シート名を指定して動作できると良いです。 Array("Sheet1","Sheet2","Sheet3","Sheet4","Sheet5","Sheet6")見たいな 感じでできますでしょうか? どの様なコードを書けば良いでしょうか? 御面倒お掛けしますが宜しくお願いします。

  • VBAの日付範囲の抽出について

    作業SheetのC列から日付で範囲指定して検索された行を検索workへ行をコピーしたいのですが、 日付の抽出がうまくできません。どなたかご教授願います。 また、できることなら、オートフィルタを利用せずに抽出したいのですが、書き方がわかりません。 素人の質問で申し訳ございませんが、よろしくお願いします。   開始年月日 = ">=" & S受付日Box.Text 終了年月日 = "<=" & E受付日Box.Text Worksheets("作業Sheet").Range("C1").AutoFilter _ Field:=3, _ Criteria1:=開始年月日, _ Operator:=xlAnd, Criteria2:=終了年月日 Worksheets("作業Sheet").Range("A2").CurrentRegion.SpecialCells(xlCellTypeVisible).Copy _ Worksheets("検索work").Range("A2") Worksheets("検索work").Range("2:2").Delete 'タイトル行の削除 MsgBox "抽出が完了しました。「検索結果の表示」ボタンから確認してください"

専門家に質問してみよう