[[20100604132332]] 『数式を教えて下さい』(vivi) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『数式を教えて下さい』(vivi)

Sheet1(データベース)

   A      B     C     D

1  番号     種類    サイズ   個数

2  111     トマト    M     3

3        キャベツ   M     4

4        レタス    S      1

5  222     人参     L     5

6        キャベツ   L     6

7        レタス    S     2

8        ゴボウ    M     1

Sheet2(表紙になる用紙)

   A      B     C     D

1  番号     111

2  種類     サイズ    個数

3 トマト     M     3

4 キャベツ    M      4

5 レタス      S     1

Sheet1にデータベースを作成し、Sheet2を表紙として資料を作りたいと思っています。

Sheet2の形式と数式をいちいち変更する必要を無くし、B1に番号を入力するだけで

全てのデータを持ってきたいのです。

「222」をいれたら、「人参」「キャベツ」「レタス」「ゴボウ」の

データを持っていきたいのです。

何か良い数式があったら教えて下さい。
宜しくお願い致します。


 >何か良い数式があったら教えて下さい。
 よい数式化どうかはわかりませんが、、、
 
 Sheet1 の A列 には、番号を全て記入しておいてください。
 
Sheet1	[A]	[B]	[C]	[D]
[1]	番号	種類	サイズ	個数
[2]	111	トマト	M	3
[3]	111	キャベツ	M	4
[4]	111	レタス	S	1
[5]	222	人参	L	5
[6]	222	キャベツ	L	6
[7]	222	レタス	S	2
[8]	222	ゴボウ	M	1
 
Sheet2	[A]	[B]	[C]
[1]	番号	111	
[2]	種類	サイズ	個数
[3]	トマト	M	3
[4]	キャベツ	M	4
[5]	レタス	S	1
 
 A3 =IF(COUNTIF(Sheet1!$A$2:$A$100,$B$1)<ROW(A1),"",INDEX(Sheet1!$B$2:$D$100,ROW(A1),COLUMN(A1)))
 必要範囲までコピー
 ※範囲は適当です。
 
 (キリキ)(〃⌒o⌒)b 				


キリキさんありがとうございます。

早速やってみたら出来ました!ちなみに応用編でまた教えて頂きたいのですが。。。

Sheet1のB列とC列の間に別データを4行位挿入し、
データを入力した後同じ数式を使用できるのでしょうか?

ちなみに挿入した後でもSheet2に持っていきたいデータは、「サイズ」と「個数」です。

間に表紙には持っていきたくないデータが入っている場合はまた別の数式になりますか?

お願いします。  vivi


 ちょっと待ってください!
 
 根本的に間違ってました・・・
 もう一度考えます。。。
 
 (キリキ)(〃⌒o⌒)b 	


キリキさん何度もすみません。。

ぜひ挑戦したいです!!

しかし、なにぶん初心者なもので関数の意味も良くわかっていません。

日本語で「何をどうすればこうなって、、こうしたいんだよな。。。」と考えてはいるのですが、

関数になってしまうとまず関数の意味からの理解ですよね。難しいです。。。

ご指導お願いします<(_ _)>  vivi


 まず最初に、よく考えずに間違った数式を提示して申し訳ないですmm
 
 上記の条件を加味した数式がこちらになります。
 
 Sheet2 A3 =IF(COUNTIF(Sheet1!$A$2:$A$100,$B$1)<ROW(A1),"",INDEX(Sheet1!$A$2:$H$100,MATCH($B$1,Sheet1!$A$2:$A$100,)+ROW(A1)-1,MATCH(A$2,Sheet1!$A$1:$H$1,)))
 
 長い式になってしまいましたが、分解して考えて見ましょうb
 
 最初に出てくる関数が、IF関数です。
 IF関数は、ご存知かと思いますが、理論式に対しての「真」「偽」を返します。
 
 COUNTIF関数で、Sheet2の「番号」がいくつあるのかを出し、その値と現在の行数(ROW関数)を比べ
 「番号」の個数より少ない場合は「真」の「""」(空欄)へ
 「番号」の個数より多い場合は「偽」の計算へ
 となります。
 
 では、「偽」の計算はどういったことを行っているかというと、
 
 INDEX(Sheet1!$A$2:$H$100,MATCH($B$1,Sheet1!$A$2:$A$100,)+ROW(A1)-1,MATCH(A$2,Sheet1!$A$1:$H$1,))
 ~~~~~~
 INDEX関数で、Sheet1の範囲を設定し、その中の「○行目」の「○列目」を返しているわけです。
 
 「○行目」で行っている関数は
 MATCH($B$1,Sheet1!$A$2:$A$100,)+ROW(A1)-1
 ~~~~~~
 MATCH関数です。
 MATCH関数は、範囲内の何処にマッチしているかを調べています。
 
 Sheet2 の 番号(B1)と同じものが Sheet1 の A2〜A100(範囲は適当に多くしてあります)の中の何番目にあるかを返します。
 
 +ROW(A1)-1
 この部分は、「調整値」になっています。
 1番目に抽出するものは、ROW(A1)-1 → 1-1=0
 2番目に抽出するものは、ROW(A2)-1 → 2-1=1
 といった様に、MATCH関数で返す数字を調整しています。
 
 「○列目」で行っている関数も、MATCH関数です。
 こちらの方がわかりやすいと思います。
 
 MATCH(A$2,Sheet1!$A$1:$H$1,)
 Sheet2 のタイトル部分と同じものが、Sheet1 の 何列目にあるのかを返しています。
 
 難しく見えますが、INDEX関数での(多めに設定してある)範囲内の(上から)「○行目」の(左から)「○列目」を返すような仕組み(計算)になっています。
 
 当初の計算式は、「○行目」の部分が、ROW関数のみのため間違った式でした。
 大変申し訳ありません。
 
 しばらく席を外してしまいますが、質問等があったら気軽に書き込んでください。
 また、覗きに来てみますb
 
 そうそう
 >関数になってしまうとまず関数の意味からの理解ですよね。難しいです。。。 
 最初は誰でも難しいと思います。
 でも、エクセル君には、ヘルプという先生がついていますので、ジャンジャン聞いて調べてみてください。
 関数の上にカーソルを置き、【F1】を押すと、すぐにその場所のヘルプにたどり着けますよ^^
 
 (キリキ)(〃⌒o⌒)b 	


 (キリキ)さん

 本当にご丁寧に教えて下さりありがとうございました。
 本当にわかりやすくて嬉しかったです☆

 ( キリキ)さんがして下さったような説明があると1つずつ内容を確認して
数式を組み立てていくことが出来ます。
 お陰さまで無事に思い通りの形に表を作成する事が出来ました(*^_^*)

 また何かありましたら宜しくお願い致します。
 本当にありがとうございました!!!

vivi


 よかった^^
 
 最初に、間違った数式を提示してしまったので(深く考えなかった自分が悪いのですがw)
 心配していたのですよb
 
 ここは学校ですから、これからも一緒に勉強していきましょうね♪
 
 (キリキ)(〃⌒o⌒)b

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.