• ベストアンサー

エクセルかEZRでデータの頻度を表に纏める方法

学校の課題で処方箋のサンプルデータがあり、各患者が期間内で薬を処方された回数をカウントして表に纏めたいのですがやり方が分かりません。 患者IDからCOUNTIFとフィルターで出来ないかと思ったのですが、COUNTIFの最大値を取る方法が見つからずに断念しました。 データは数万件もあるので手作業で写すのは時間的に無理です。 当方プログラミングの経験もあるので、そんなに長くならないならマクロでの対応も可とします。(VBA自体は殆ど触った事がありませんが) また、フリーの統計ソフトEZR用のデータセットもあるのでそちらを使った方法でも構いません。 以上、よろしくお願いします。

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

  • ベストアンサー
  • chayamati
  • ベストアンサー率41% (256/613)
回答No.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

nob0054
質問者

お礼

想定していた物に一番近い結果になりました、VBAのソースもありがとうございます。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (3)

  • kkkkkm
  • ベストアンサー率65% (1636/2481)
回答No.3

> 各患者が期間内で薬を処方された回数をカウントして表に纏めたい 一種類の薬が処方されていてその回数ならCOUNTIFで取得できるはずですが 複数を合算するのならSUMPRODUCTの*と+でいけそうですが。

全文を見る
すると、全ての回答が全文表示されます。
  • f272
  • ベストアンサー率46% (8056/17231)
回答No.2

1. 「データは数万件もあるので手作業で写すのは時間的に無理です」ということは手作業でならやり方が分かるということだよね。その作業手順をVBAで自動化すればよい。 2. 「各患者が期間内で薬を処方された回数をカウントして表に纏めたい」というのに,どうしてCOUNTIFの最大値を取る必要があるのかわからない。もっと具体的に何をしたいかを書かないと,他人には通じません。

全文を見る
すると、全ての回答が全文表示されます。
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.1

プログラムの学習やEZRの学習が目的でないならば、エクセルのピボットテーブルを使って、できないか、勉強することを勧めます。 色々関数のことや、VBAのことや、EZRのことを、質問にチヨイ出ししているが、回答をもらうのには、サンプルデータを最低10数件あげて、結果の表がどうなってほしいか書くのが筋で、書かないのは、コンピュターの質問としてなってないのでは。 EZRの勉強が課題なのか。そで統計処理する必要があるのか? 頻度表程度の表を所望しているのではないのか。 エクセルのFREQUENCY関数の利用ではだめか。これは知っているのか? WEB記事例 https://dekiru.net/article/4531/

nob0054
質問者

補足

分かり難かったようですみません。 実習用のためある程度匿名化されていますが、個人情報があるのでデータそのものの掲載は控えさせて頂きます。 テーブルの定義の一部抜粋すると以下のような項目があります。 処方日、患者ID、患者氏名、処方箋分類番号、処方箋番号、院内院外区分、用法区分、 用法コメント、薬剤コード、薬剤名、医師ID、科コード、性別、誕生日、郵便番号 これを患者IDで纏めて以下のようなカラムのテーブルを作りたいのです。 患者ID、処方回数、性別、誕生日 処方回数をカウントして追加したいのですが、EZRで頻度を出力すると膨大な量の患者IDがスペース分けだけで大量に出てきてとても纏められた物ではありませんでした。 新規のデータセット作成も条件に合った物を抽出する機能しか見つかりませんでした。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • エクセルのデータで重複をカウントしない方法

    現在アンケートデータが1000件ほどあり、重複しているデータがあります。 住所別、職業別集計一覧を=COUNTIFで作成しているのですが、 重複している分までカウントされてしまいます。 今後もデータは増え続けるのですが、重複(初回はカウント)しているデータをカウントしない方法はないでしょうか?

  • エクセルにて指定データをカウントする。

    以下のようなデータがあります。 ○ × = × × = ○ ○ ここにはデータが全部で8個あり、=が2個ありますから これを 2/8と表示させたいと思ってます。 指定した範囲のセルの個数はCOUNTA、指定したデータと一致するものは COUNTIFで数えられると思いますが、これらを A / B という表示形式で表示する方法が分かりません。また、COUNTIFの中で COUNTIF(A1:A8, "×")はうまく動きますが、COUNTIF(A1:A8, "=")はちゃんとカウントしてくれません。よろしくお願いします。

  • 関数で可視セルのデータ個数カウント

    Excel2002を使用しています。 オートフィルタで抽出したデータの個数を関数で カウントしたいのですが、可視セルのみをカウント 出来る関数はあるのでしょうか? 例えば   A 1 件数 2  2 3  1 4  3 5  1 6 関数 A6セルに何らかの関数を入れておき、 A列のオートフィルタを使って、1を抽出した時は A6に”2” 3を抽出した時はA6に”1”を表示させたいの です。 このように、可視セルのデータ個数のみを カウントする関数はありますでしょうか? フィルタを使わずにCOUNTIF関数でカウントする 方法、また、可視セルをコピー貼り付け後 カウントする方法は避け、あくまでフィルタで 抽出したデータの個数を瞬時にカウントしたいの です。 ご教授宜しくお願いします。

  • エクセル オートフィルタで摘出したデータだけをカウントしたい vba

    エクセルでオートフィルタして摘出したデータをカウントしたいのですその結果をVBAのメッセージボックスで表示させてたいです。 オートフィルタについては、シート上で自ら条件を出しますので、ただカウントだけしたいです。 カウントさせるセルはA列の10番から110番です。 データは数値です お忙しいところどなたかご教授ください

  • EXCELのVBAでデータの自動認識(データの範囲等)をとる方法を教え

    EXCELのVBAでデータの自動認識(データの範囲等)をとる方法を教えてください (並び替え等で自動範囲認識しますが簡単にVBAでその範囲をとる方法はないですか?) 今までは1件ずつカウントしていました

  • エクセルでの重複データをひとつにカウントする方法

    下記のような事をやる数式が判らず、困っています。 晴 晴 晴 曇 曇 雨 雨 雨 上記で、重複するデータをひとつとカウントする方法(数式)を教えていただけますでしょうか? つまり、「晴」「曇」「雨」の3つ、という値を導き出したいのです。 CountIf等、色々やってみたのですが、できなくて・・・。 お手数をおかけしますが、よろしくお願い致します。

  • エクセルのオートフィルタでのデータ抽出&カウント

    エクセルのローデータでのオートフィルタでのデータ抽出&カウントで困っています。 A列にNo.、B列にデータB、C列にデータC、D列にデータDがあるとします。 それぞれの列に1~9までの数字があり、 それぞれの列、 データの一番下(正確には1行開けて)にはSUMやCOUNTIFなどの関数(計算式)が入っています。 で、これをフィルターにかけ抽出した際、この抽出したデータのみで計算の値を表示したいのですが、 やってみると 全データの計算の値で表示されてしまいます。 どうすればよいのでしょうか? 大変困っています。 よろしくお願いいたします。

  • エクセルでカウントする方法

    縦に1列100件のデータが入力されているとします。例えば市町村名が入力されているとして、○○市(いろいろな市名)と入力されているセルの数だけを数えたいとします。この場合Countifでカウントすることは可能でしょうか。他に良い方法があれば教えて下さい。

  • データの無いセルをカウントしない方法

    下記の数式で、各数字の合致数を求めて表示しています。 =SUMPRODUCT(COUNTIF(I4:J4,B2:C3000)) 求めるデータ数が、毎回違う為、範囲をB2:C3000としています。 データがC3000迄無い場合、空欄のセルをゼロと認識して、ゼロのカウントが増えてしまいます。 空欄の部分は、ゼロとしてカウントせず、データが入っている部分だけカウントする方法はありますでしょうか? ご教授、宜しくお願いします。

  • オートフィルターと 関数を使って数値を出したい

    エクセルのデータで オートフィルターを用いた上で、 countifを用いて数値を抽出したいのですが、 オートフィルターにて条件を絞ってcountifを使っても、 実際には表示されていない分もカウントされてしまいます。 オートフィルターを使った上で、 表示されている分だけをcountif検索はできないのでしょうか?

専門家に質問してみよう