- ベストアンサー
エクセルかEZRでデータの頻度を表に纏める方法
学校の課題で処方箋のサンプルデータがあり、各患者が期間内で薬を処方された回数をカウントして表に纏めたいのですがやり方が分かりません。 患者IDからCOUNTIFとフィルターで出来ないかと思ったのですが、COUNTIFの最大値を取る方法が見つからずに断念しました。 データは数万件もあるので手作業で写すのは時間的に無理です。 当方プログラミングの経験もあるので、そんなに長くならないならマクロでの対応も可とします。(VBA自体は殆ど触った事がありませんが) また、フリーの統計ソフトEZR用のデータセットもあるのでそちらを使った方法でも構いません。 以上、よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
> 各患者が期間内で薬を処方された回数をカウントして表に纏めたい ★添付の<小計ツール>で可能です。 1.1患者の列だけを昇順に並び替え 2.患者の列だけを個数の小計 3.表示は明細行の下に集計行と列が追加され、 列名の左端に□囲いの数が表示されます (1):総個数 (2):小計個数 (3):明細行 (2)をクリックすると明細行が非表示になり、小計と総計だけ 以下はマクロ記録で作成したものです。16000行のマクロ集計時間は数秒です。 Excelファイルの拡張子をマクロを有効にするにして保存します ------------------------------------------------------------- Sub 件数集計() Columns("B:B").Select ActiveWorkbook.Worksheets("食事履歴").Sort.SortFields.Clear ActiveWorkbook.Worksheets("食事履歴").Sort.SortFields.Add2 Key:=Range("B1") _ , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal With ActiveWorkbook.Worksheets("食事履歴").Sort .SetRange Range("B2:B16885") .Header = xlNo .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With Selection.Subtotal GroupBy:=1, Function:=xlCount, TotalList:=Array(1), _ Replace:=True, PageBreaks:=False, SummaryBelowData:=True ActiveSheet.Outline.ShowLevels RowLevels:=2 End Sub
その他の回答 (3)
- kkkkkm
- ベストアンサー率66% (1734/2604)
> 各患者が期間内で薬を処方された回数をカウントして表に纏めたい 一種類の薬が処方されていてその回数ならCOUNTIFで取得できるはずですが 複数を合算するのならSUMPRODUCTの*と+でいけそうですが。
- f272
- ベストアンサー率46% (8531/18262)
1. 「データは数万件もあるので手作業で写すのは時間的に無理です」ということは手作業でならやり方が分かるということだよね。その作業手順をVBAで自動化すればよい。 2. 「各患者が期間内で薬を処方された回数をカウントして表に纏めたい」というのに,どうしてCOUNTIFの最大値を取る必要があるのかわからない。もっと具体的に何をしたいかを書かないと,他人には通じません。
- imogasi
- ベストアンサー率27% (4737/17069)
プログラムの学習やEZRの学習が目的でないならば、エクセルのピボットテーブルを使って、できないか、勉強することを勧めます。 色々関数のことや、VBAのことや、EZRのことを、質問にチヨイ出ししているが、回答をもらうのには、サンプルデータを最低10数件あげて、結果の表がどうなってほしいか書くのが筋で、書かないのは、コンピュターの質問としてなってないのでは。 EZRの勉強が課題なのか。そで統計処理する必要があるのか? 頻度表程度の表を所望しているのではないのか。 エクセルのFREQUENCY関数の利用ではだめか。これは知っているのか? WEB記事例 https://dekiru.net/article/4531/
補足
分かり難かったようですみません。 実習用のためある程度匿名化されていますが、個人情報があるのでデータそのものの掲載は控えさせて頂きます。 テーブルの定義の一部抜粋すると以下のような項目があります。 処方日、患者ID、患者氏名、処方箋分類番号、処方箋番号、院内院外区分、用法区分、 用法コメント、薬剤コード、薬剤名、医師ID、科コード、性別、誕生日、郵便番号 これを患者IDで纏めて以下のようなカラムのテーブルを作りたいのです。 患者ID、処方回数、性別、誕生日 処方回数をカウントして追加したいのですが、EZRで頻度を出力すると膨大な量の患者IDがスペース分けだけで大量に出てきてとても纏められた物ではありませんでした。 新規のデータセット作成も条件に合った物を抽出する機能しか見つかりませんでした。
お礼
想定していた物に一番近い結果になりました、VBAのソースもありがとうございます。