- ベストアンサー
エクセルデータの作り方
- エクセルデータの作り方について解説します。将来データベース化する際にレコードを検索しやすくするためには、ドロップダウンでの選択形式を使い、検索漏れを防止する必要があります。
- 例えば、複数の人物の属性をデータベース化する場合、ドロップダウン形式を使用すると、属性ごとにレコードが増えるため効率的ではありません。エクセルの達人の方は、他の方法でレコードを減らす方法を知っているかもしれません。
- 要領を得ていない質問かもしれませんが、エクセルデータの作り方についてアドバイスを頂けると幸いです。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
>お示し頂きました表が理解できませんでしたので、自分のシートにそっくり作ってみましたがやっぱりよく解らず。 H1 セルに番号を入力すると、同じ番号を持つレコードを 1 つ目と 2 つ目のテーブルからそれぞれ拾ってくるという意味です。 >……式が複雑でこれも式全体を理解するには及ばず。orz 確かに易しくはないですね。ポイントは、SMALL 関数は配列を扱うことができるという点です。 (1) row(D$1:D$10)+9^9*(D$1:D$10<>H$1) という部分は、「『D 列の値が H1 に等しい行については行番号、それ以外の行については行番号に 9^9(= 387,420,489)を加えた数値』で構成される 10 行× 1 列の配列」を作っています。(2) INDEX は、配列を配列データとして、SMALL などの関数が認識できる性質のものに変換する働きをしています。(3) 9^9 というのは、シートの全行数よりも大きい数値です。そのため、OFFSET の第 2 引数は行番号なので、G 列で指定される順位によって決まる OFFSET の第 2 引数が 9^9 を超えない場合(D 列が H1 に等しい場合)、OFFSET は E 列のある行の値を返し、9^9 を超える場合(D 列が H1 に等しくない場合)、エラー値を返すこととなります。(4)(3)で求めた 1 つの値を更に IFERROR で処理することにより、エラーの場合には空文字列「""」に変換しています。 >……とても横に長いデータになってしまう→見にくいし初心者故の非スマート表なのでは?と思ったのですがやはり列を増やすのは普通の事なのですね。(^^) そもそも、データベースである表は、人が目で見ることを目的とするものではありません。したがって、見やすさ・分かりやすさという機能を持つ表の用意は、別途、データベースから抽出したデータを使って行うべきことだと考えます。
その他の回答 (4)
- hallo-2007
- ベストアンサー率41% (888/2115)
2通りの提案です。 どちらにしろ、名前と属性の対応表が必要です。 別シート(シート名 対応表)に A B 名前 属性 田中 abcde 鈴木 acd ・・・ と準備します 1案 A B ・・・ 名前 属性 田中 Vlookup関数 鈴木 ・・・ とA列に名前と選択、B列には、Vlookup関数で属性を表示させる この関数はわかりますでしょうか。 データを検索(或いは、オートフィルターで抽出)する場合に B列を選択して、含むを行います。 例 *a* とかワイルドカードを使ってオートフィルターをかければ、aが含まれる データが抽出されます。 検索でもOKです。 2案 フィルターオプションの機能を使って、別シートに 属性でデータを抽出します。 フィルターオプションの説明は http://www.eurus.dti.ne.jp/yoneyama/Excel/filter3.htm でも参考にしてください この場合 A ・・・ 名前 田中 鈴木 ・・・ と属性はデータになくても大丈夫です。 別シートのフィルターオプションの検索条件の範囲に 属性 a と属性を入力すると 名前 田中 鈴木 ・・・ と対応表で a を含む名前の一覧表が表示される関数を準備して フィルターオプションを実行させれば、属性 a のデータが抽出できます。 後は、フィルターオプションで上に表示されている名前全てで抽出すれば 目的のデータが抽出されますと思いますが 如何でしょうか。 とりあえず、考え方のみのご提案です。 将来、アクセスなどリレーショナルなデータベースまで検討されているのであれば 思い切って2案でチャレンジしてみてはいかがでしょうか。
お礼
ご丁寧に回答を頂、誠にありがとうございます。 本来はデータベースソフトを将来使う為の単なるデータテーブルを作るつもりでの質問だったのですが、エクセルだけでも結構できる事が想像できました(^^;) とりあえずは属性専用のシートを別に作る事にします。 ありがとうございます。
- MarcoRossiItaly
- ベストアンサー率40% (454/1128)
No.2 です。ごめんなさい、初歩的なミスをしてしまいました。「$」の付け忘れです。次式に差替えをお願いいたします。 H4 =iferror(offset(E$1,small(index(row(D$1:D$10)+9^9*(D$1:D$10<>H$1),),g4)-1,0),"")
お礼
ありがとうございます!
- MarcoRossiItaly
- ベストアンサー率40% (454/1128)
もしも a から e という属性の内容が固定的なのであれば、行ではなく、列を 5 つ用意したらいいですね。 同じ 5 行を作るのであっても、「(何とかすれば)レコードは1行で済む」との発想の仕方をする質問者さんが想定されていそうなものとは、ちょっと違ったデータの持ち方もあるでしょう。リレーショナルデータベースの考えでは、複数の表(テーブル)があることが前提です。 ある表にはあるキー(番号とか)があって、そのキーは、1 行ごとに異なる値になっている。別の表にも同じキーが存在して、5 行くらい同じ値になっている。ただ後者の表の列数は、属性のフィールドただ 1 つになっている。 同じキーのレコードの情報をうまくつなげて取り出すことができれば、テーブルは必ずしも 1 つである必要はないし、それでも、全体としてデータベースを形成するわけです。だから Access なんかでも、いくつもテーブルを用意するんですね。 ごく簡単な一例として、添付図では次式を記入しました。他にも、ピボットテーブルを複数回使ったり、簡単な数式を幾つも組み合わせれば、いろいろ可能性が広がっていくと思います。 H1 2 H2 =vlookup(h1,a:b,2,) H4 =iferror(offset(e1,small(index(row(D$1:D$10)+9^9*(D$1:D$10<>H$1),),g4)-1,0),"") Excel はオートフィルタが便利なので、愚直に 5 行コピーするのも、別に悪くないと思います。
お礼
ご丁寧にご回答を頂きまして、誠にありがとうございます。 お示し頂きました表が理解できませんでしたので、自分のシートにそっくり作ってみましたがやっぱりよく解らず。HPも調べてみたのですが、式が複雑でこれも式全体を理解するには及ばず。orz 属性列を増やすのは私も考えていたのですが、多い場合は属性が10位になる事もあるので、他の値も合わせるととても横に長いデータになってしまう→見にくいし初心者故の非スマート表なのでは?と思ったのですがやはり列を増やすのは普通の事なのですね。(^^) 名前と属性だけに絞ったシートを別に作成しようと思います。 エクセルでできればエクセルだけでするかもしれませんが、もしかしたらアクセスなども将来は使うかもしれないのでその方が便利になるのかと理解しました。 ありがとうございました。
- Cupper-2
- ベストアンサー率29% (1342/4565)
名前と属性を同時に入力しようとするから無理が出てくるような気がするんだけど。。。 名前を入力して、その後に属性とやらを個別に入力するのが普通じゃないかな。 ドロップダウンリストですべてを一括して選択することが間違いって思うんだ。
お礼
ご回答ありがとうございます。 「名前」列と「属性」列は個別に入力する前提の質問です。 1人に5つ属性があるとその属性の数分5行のその人用レコードを作らねばならず、その際変化があるのは「属性」だけなので、他の値は残りの4行にコピーしなければならない。 これが何とも初心者っぽい感じがして達人ならもっとスマートなやりかたするのだろうか?と思って質問をさせて頂いた次第です。 頂いたご回答に対する私の理解は間違っていませんよね? 聞きたい事が自分でもよく解っていない事なので文章が解りにくいですよね。(^^;) ありがとうございました。
お礼
ご回答ありがとうございます。 難しいです。。。今度挿絵付きの「よくわかる」シリーズでも買う事にします(^^;) とりあえず今は横に長い表を作っていれば良いという事で心置きなくテーブルを作っています! ありがとうございます!(^^)