- ベストアンサー
VBA 患者情報データをまとめたい
VBA初心者です。 (1)ユーザーフォームより情報を入力しsheet1に一覧として登録していく (2)Sheet2で検索ボタンを設け、患者様一人の情報を表示し、印刷できるようにする。 登録したい項目が63と多いので患者様一人の表を別に作成し、一覧表示へ入力していることがそのままその表にうつっていたいです。 初心者なので説明もおかしく申し訳ございません。 誰か教えて頂きたいです。よろしくお願い申し上げます
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
続けておじゃまします。 No.2の再質問に関して・・・ とりあえず作業列の方法は成功というコトですよね? その方法で項目を行方向に表示させるやり方です。 (画像では「項目5」がないのでエラーになっていますが、これは気にしないでください) ↓の画像でSheet1の作業列I2セルに =IF(OR(Sheet2!$A$1="",A2<>Sheet2!$A$1),"",ROW()) という数式を入れオートフィルでこれ以上データはない!というくらいまで下へコピー! Sheet2のA2セルは =IF(A1="","",VLOOKUP(A1,Sheet1!A:B,2,0)) そしてSheet2のA5セルに =IF(COUNT(Sheet1!$I:$I)<ROW(A1),"",INDEX(Sheet1!$A:$G,SMALL(Sheet1!$I:$I,ROW(A1)),MATCH(A$4,Sheet1!$1:$1,0))) という数式を入れ列方向・行方向にオートフィルでコピー! (日付がある場合、表示形式を変更しておきます。) Sheet2のA5セル上で右クリック → コピー → A11セル上で右クリック → 貼り付け ただ、数式内のMATCH関数の「検索値」を変更しなくてはなりません。 (A5セルに数式を入れた場合はすぐ上の「項目」を検索値としていますので、 A11セルに数式をコピー&ペーストした場合は >MATCH(A$4,Sheet1!$1:$1,0)の部分を >MATCH(A$10,Sheet1!$1:$1,0) のようにすぐ上の行の「項目」を「検索値」とします。 この操作をA18・・・と貼り付け時点ですべて行って、あとは列方向・行方向にオートフィルでコピーです。 尚、数式内のI列は作業列ですので、実際の作業列番号に変更してみてください。 なんとかなりますかね?m(_ _)m
その他の回答 (2)
- tom04
- ベストアンサー率49% (2537/5117)
No.1です! 関数でのやり方だけ・・・ ↓の画像のようにSheet1にデータがあり、Sheet2のA1セルに「ID」を入力すると 表示されるようにしてみました。 Sheet2のA2セルは =IF(A1="","",VLOOKUP(A1,Sheet1!A:B,2,0)) という数式を入れています。 Sheet1に作業用の列を設けてみました。 作業列G2セルに =IF(OR(Sheet2!$A$1="",A2<>Sheet2!$A$1),"",ROW()) という数式を入れオートフィルでずぃ~~~!っと下へコピーしておきます。 そしてSheet2のA5セルに =IF(COUNT(Sheet1!$G:$G)<ROW(A1),"",INDEX(Sheet1!$A:$E,SMALL(Sheet1!$G:$G,ROW(A1)),MATCH(A$4,Sheet1!$1:$1,0))) という数式を入れ、列方向と行方向にオートフィルでコピーすると 画像のような感じになります。 これでA1セルのデータが変わるだけで勝手にA1セルのIDデータが表示されます。 コマンドボタンを配置する必要はありません。 (もし日付セルがある場合は表示形式を「日付」にしておきます) 尚、項目が63項目あるというコトですのでかなり横長のデータになってしまうと思います。 おそらく印刷するにしても空白部分が多くなりますので、 表示方法を工夫する必要があるかもしれませんね。 ※ 何度も言っているように実際のデータ配置がわからないので、やり方だけです!m(_ _)m
お礼
もう一度挑戦してみたらうまくいきました。 後画像をのせたかったのですが、無理でした。すみません。もう一つ質問させてもらってもよろしいですか?前にもいったように63項目あるので一列にsheet2に載せるとA4サイズで印刷が何枚にも渡ってしまいます。ですので、5項目は1列次の6項目目からは下の行12項目目はまたその下の行にsheet1からのを反映させたいのですがどうしたらよろしいでしょうか?
補足
ありがとうございます。 一度試したのですがうまいこといかないんです↓やり方がおかしかったのか・・・ どういったユーザーフォームを作成したかも載せてみたのでまた教えて頂いてもよろしいでしょうか? 何度も申し訳ございませんがよろしくお願い申し上げます。
- tom04
- ベストアンサー率49% (2537/5117)
こんばんは! ん~~~ VBAの場合は列・行番号が一つ狂っただけでも全く予想もしない動きになります。 最小限セル配置等が判らないとコードの示しようがありません。 (詳しい配置ではなく、大まかな配置で構いません) 他の方からの回答がない理由はそこらへんかもしれませんね。 ご希望としてはSheet1の列に患者さん名が入っていて、 Sheet2の特定セルに患者さん名を入力するとその患者さんデータを表示したい! という感じでしょうか? もしそうであれば関数でも可能のような気がします。 今現在はこの程度しか投稿できませんが、 ごめんなさいね。m(_ _)m
お礼
ありがとうございました
補足
ありがとうございます。関数でもいけるんですね!言って頂いている通りsheet1の一覧表に患者IDを入れてますので、sheet2で検索ボタンを作りそれで、患者IDを入力するとsheet1に入力している患者様データを表示させたいんです。関数のほうがよいのですかね?本当何もわかっていなくて申し訳ないです。
お礼
本当にありがとうございました。おかげですごくいいものができました。 感謝感謝です。