• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:(初心者)VBAで入所名簿を管理したいです。)

(初心者)Excelで名簿管理をVBaで行いたい

このQ&Aのポイント
  • 老人施設での入所名簿を使いやすくするために、ExcelのVBAを利用した名簿管理システムを作成したい。
  • 名前や住所などの情報を入力すると、該当する情報だけが抽出される機能を実装したい。
  • また、抽出された情報を印刷できるようにしたり、さまざまな情報を見やすく表示するためのタブstripを導入したりしたい。

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

  • ベストアンサー
  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.4

このようなシステムを確立するには、まずエクセルの一般機能を理解することをお勧めします。 これらの機能を利用しても、実現できない部分だけVBAで対応するようにします。 例えば、 >(1)名前を入力すると(一文字でも当てはまった文字があれば候補が出てくる)その方の情報だけが抽出される。(名前だけではなく、例えば、住所で検索しても同じような検索方法ができるような形も) 各シートから必要データを抽出するなら関数でも実行することが可能です。 >(2)その抽出された画面をそのまま印刷できるようにする 単純にデータ表示用シートを印刷するだけでOKですね。 >(3)今後のデータ登録をVBAベースで簡単に登録していけるシステムにしたい 入力用フォームを作成してこのデータをデータベースに登録するならVBAを使う必要がありますが、単純にデータベースシートに直接入力して、このシートからすべての必要データを表示用シートに取り出す設計にするのでもよいと思います。 >(4)沢山の項目があるので、一画面にすべての情報を見やすく載せるために、タブstripなど、色々とうまく組み合わせて作っていきたい(家族情報など) 基本は表示用シートに各項目を一覧できるようにするのが一般的です(タブのあるユーザーフォームでは印刷などができません)。 >(5)H22.1.1という表記でエクセル内で入力しているのに、抽出すると、2010.1.1という表記になってしまうので、できれば、そのままH22.1.1という表示で抽出したい。 これは単純に表示形式の問題と思われます(VBAに関係ありません)。 >(6)このシステムを立ち上げたと同時にVBAが立ち上がってすぐ動かせるようにしたい これはブックを開いたときに、例えばユーザーフォームなどを表示させる設定にします。 Private Sub Workbook_Open()  Userform1.Show End Sub 今回のような複数の事項に関する一般的なご質問では、皆さんから具体的な回答が得られないと思います。 このような掲示板では、1つの質問には1つの質問内容だけにして、具体的なシートのレイアウトなどを例示して、わからない部分をポイントを絞って質問するようにしましょう。

morimori1117
質問者

お礼

早速のご回答ありがとうございます。 >今回のような複数の事項に関する一般的なご質問では、皆さんから具体的な回答が得られないと思います。このような掲示板では、1つの質問には1つの質問内容だけにして、具体的なシートのレイアウトなどを例示して、わからない部分をポイントを絞って質問するようにしましょう。 初めての質問で何をどのようにお聞きして良いかわからず、このような質問になってしまいました。皆様から色々とアドバイスを頂きまして、こちらで一つ一つ文をゆっくりと解読していきたいと考えます。 また、その時に、わからない部分などありましたら、アドバイス頂いた通り、ポイントを絞って質問するように致します。具体的なご回答ありがとうございました。

その他の回答 (4)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.5

掲示板では、作成依頼のような質問は達成が難しいです。基本的には、私は回答していません。AccessかExcelかというような選択的な問題は、ほとんど関係ありません。自分が得意なものでやればよいです。 >(1)名前を入力すると(一文字でも当てはまった文字があれば候補が出てくる)その方の情報だけが抽出される。(名前だけではなく、例えば、住所で検索しても同じような検索方法ができるような形も) これは、フィルタオプションを使えばよいです。記録マクロでも、ほとんど変わりません。昔のままの機能です。3万件程度なら、まったくストレスは感じません。しかし、それをUserFormなどを使うとなると、環境はかなり変わってきます。 >(2)その抽出された画面をそのまま印刷できるようにする 特に範囲が設定していれば、これも何の問題もありません。 ActiveSheet.PrintOut などを使います。 >(3)今後のデータ登録をVBAベースで簡単に登録していけるシステムにしたい この部分だけ、掲示板に新たにレイアウトを出して質問を出してください。入門者には難しいですが、初級の範囲です。 >(4)沢山の項目があるので、一画面にすべての情報を見やすく載せるために、タブstripなど、色々とうまく組み合わせて作っていきたい(家族情報など) 掲示板では、この部分はうまく伝わらないと思います。 >(5)H22.1.1という表記でエクセル内で入力しているのに、抽出すると、2010.1.1という表記になってしまうので、できれば、そのままH22.1.1という表示で抽出した 二つの方法がありますが、なるべくシリアル値で処理したほうがよいです。Format関数を使います。 >(6)このシステムを立ち上げたと同時にVBAが立ち上がってすぐ動かせるようにしたい ThisWorkbookモジュールのThisWorkbook_Openか、標準モジュールのAuto_Openを利用します。過度な期待は、挫折しやすいです。あまりイメージ化させないで、積み上げていくことが完成の近づきます。 >ラベル性別.Caption = Range("基本データ!D5").Offset(リスト氏名.ListIndex).Value   ラベル生年月日.Caption = Range("基本データ!E5").Offset(リスト氏   基本的な書き方が間違いのようです。List は、最初にして、List に登録し、Listから呼び出します。VBAを真面目に勉強して、2ヶ月目か3ヶ月目ぐらいのレベルに出てきます。 'UserForm に登録する例です。氏名データがシート1の12行がある場合 'その対応データがシート2のデータがA1:C12まであり、B列は日付データがあるとします。 'UserForm, ListBox1, Label1,Label2, Label3 を設定。Sheet1--A1:A12氏名, Sheet2--A1:C12 データ Private Sub UserForm_Initialize() Dim i As Integer  For i = 1 To 12   ListBox1.AddItem Worksheets("Sheet1").Cells(i, 1).Value  Next End Sub Private Sub ListBox1_Click() Dim i As Integer  i = ListBox1.ListIndex + 1  With Worksheets("Sheet2").Range("A1:C12") 'データ範囲   Label1.Caption = .Cells(i, 1).Value   Label2.Caption = Format$(.Cells(i, 2).Value, "GE.M.D") '年号.月.日   Label3.Caption = .Cells(i, 3).Value  End With End Sub

morimori1117
質問者

お礼

早速のご回答ありがとうございます。一つ一つ具体的な案を頂きましたので、ゆっくり解読して自分のものにしていきたいと思います。 >掲示板では、作成依頼のような質問は達成が難しいです。基本的には、私は回答していません。AccessかExcelかというような選択的な問題は、ほとんど関係ありません。自分が得意なものでやればよいです。 ホントそうですよね。こちらが初心者でどのように質問して良いかわからない状況での質問文のためご回答者様方は回答にご苦労されるかと思います。皆様から色々アドバイスを頂き、自分のやりたいことをできるために、同時に基礎から勉強していきたいと改めて思いました。

  • MRT1452
  • ベストアンサー率42% (1391/3293)
回答No.3

通常はそういう処理の場合はAccessやOracleなどのデータベースを使うのが一般的です。 が、どうやらそういう環境が無いとのことなので。 ExcelVBAでやるのであれば、力技でやっていくしかないですね。 各シートをデータベースで言うところの、テーブルとして扱う方法が一番無難だと思います。 ただ、やりたいことが結構複雑なので工夫が必要です。 やり方はいろいろあると思いますが。 まず現在の情報とは別に、検索結果をおいておくシートを用意します。 同様に印刷用のシートも用意。 (1)で検索した結果を上記の検索結果用シートに出力します。 検索結果シートの情報で選択の判断となる情報をリストとして表示。 リストで選択した人の情報を検索し、印刷用シートに出力 こんな感じになるのではないかな。 出力の工夫に関しては出力レイアウト等がかかわってくるので、そこは設計次第かと。 (5)に関してはエクセルのセルの書式が標準(Excelが勝手に判断)となっているのが原因なので、 文字列等、書式タイプを明確にすれば良いかと。 (6)はうろ覚えですが、main()という関数をThisWorkBookに作れば、そこから起動します。 他のポイントとして、複数のデータから単一データを表示させるのであれば、 「一意性」が確保されているかがポイントとなります。 つまり、この情報があれば、この人の情報だと断定できる情報が存在するか。 (データベースで言うところのプライマリ・キー) 無いのであれば、その情報を追加する必要があります。(曖昧検索を許可するなら必須) たとえば、名前だけでは同姓同名が居た場合、判別不能。 電話番号だけでは、同じ家の人が複数人入っていた場合、どちらの情報なのか判別不能。 なので、この情報とこの情報があれば、特定できるという情報の選定をする必要があり、 検索を行う場合、それらの情報は特定に必要な情報として、検索時に、完全一致で必ず入力させるようにしなければなりません。 (もしくは何らかの方法で内部で持つか) これを最初の検索の時点でやれば、検索結果用シートは要らないと思いますが、内容的に、途中で曖昧検索が入るので、ワンクッション取らざるを得ないです。 検索処理に関してては、検索対象文字をキーとして、 全データをループで回して一致するかどうかチェックしていくしか方法は無いです。 なので、力技になってしまいます。 Accessであれば、クエリという機能でこの辺りを簡単に作れますし、 印刷用のフォーム等の機能も有りますし。 データリンク等を使えば、かなり楽に作れます。 (当然データベースの考え方を知っておく必要はありますが) ですがそういう環境が無いなら力技で地道にやっていくしかないです。 (フリーのデータベースソフトもありますが、Oracleクラスの知識を必要とするのでこちらは薦めません) まぁ他にもいろいろ方法はあると思うので一例として。ご参考まで。

morimori1117
質問者

お礼

早速のご回答ありがとうございます。一つ一つの質問に対して参考になる回答をしてくださり心から感謝致します。

  • yy_kd
  • ベストアンサー率25% (5/20)
回答No.2

アクセスでもエクセルでも可能だと思います。

morimori1117
質問者

お礼

早速のご回答ありがとうございます。参考にさせていただきます。

  • ShowMeHow
  • ベストアンサー率28% (1424/5027)
回答No.1

アクセス使ってみたら?

morimori1117
質問者

お礼

早速のご回答ありがとうございます。 ”Access”という単語を恥ずかしながら初めて聞きまして早速調べました。簡単にできるデータベースとして利用できるようなイメージなアクセスですが、残念ながら職場のパソコンにはアクセスはなかったので利用は難しいです。

関連するQ&A