[[20090302162121]] 『名前の定義の中に関数』(marumaru) >>BOT

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

 

『名前の定義の中に関数』(marumaru)

 過去ログで探したんですが見当たらなくって・・・

 題の通り、定義の中に関数を入れると何か問題はありますか?

 今はこうゆう式が定義として登録されています→ROW('sheet1'!A1)

 現段階でがは、異状は見当たらないのですが。

 >定義の中に関数を入れると何か問題はありますか?

 それは日常的なことで、問題があるとは思えません。

 もし、問題(?)が生ずるとすれば、それは「問題」と呼ぶより、
 「名前の活用法が正しくない」と云うニュアンスになると思います。

 何か具体的に心配されていることがあるのでしたら、その部分をご説明いただけませんか?

 >       ROW('sheet1'!A1)
                ↑
 ・・にしても、これを名前定義してもあまり使い道がない様な気がするのですが。
    直接、ROW(A1) でいいと思いますので、、、(単なる例ですか?)

 (半平太) 2009/03/02 16:58

 あらら、またしても半平太さんと。。。(笑)

 名前の定義の中で関数を使うことは有りますので
 その点に関しては特に問題無いと思います。

 例えばこんな感じで
[[20081014105631]]『名前の定義について』(ゆうゆう)
 名前の範囲を可変にしたい場合や、
 ちょっと異質ですが、GET.CELL 関数を使う場合等。
[[20080916114416]]『計算式を教えてください』(ロンロン)  

 >今はこうゆう式が定義として登録されています→ROW('sheet1'!A1)
 これは、数式の一部でしょうか?全てでしょうか?
 全てで有れば、Sheet1で有る必要は無いと思います。

 「Sheet1が間違って削除されたらエラーとしたい」
 なんてご希望が有るなら別ですが。

 ■▲(HANA)■▲

 早速の回答ありがとうございます。

 >・・にしても、これを名前定義してもあまり使い道がない様な気がするのですが。

 使い道は、数式を短くする為に定義してあるんです。 今のでは、4行くらいあるので見にくくて・・

 >これは、数式の一部でしょうか?全てでしょうか?
 全てで有れば、Sheet1で有る必要は無いと思います。

 全てです。 上記の通りセルにある長い式を短縮する為に定義してあるんです。

 説明できてます?? 説明苦手なのでどう言えばいいか・・頭ではわかってるんですけどね。笑

 (marumaru)

 全てですか・・・・。

 ROW番号の戻り値だけを得る為なら
 シート名は不要ですので
  ROW(A1)
 になります。
 例えば「列」と定義しておけば半角5文字分短くなりますが
 可読性は落ちそうに思います。

 式が長くなるのが問題なら、作業列を使う 等しても
 良さそうに思いますが、作業列が使える状況かどうかは
 データ状態によるのでしょうね。

 その数式は、どの様な物なのですかね。
 充分推考した結果の 名前の定義であれば
 これ以上短くはならないのかもしれませんが
 もしかしたら、同じ結果が得られる
 他の方法が見つかるかもしれません。

 まぁ、長いだけで実害がないのなら
 それでも良いと思いますが。

 ■▲(HANA)■▲ 


 参考例
 =INDEX(IF(Sheet1!$A$1:$A$5="a",ROW($A$1:$A$5),""),0)   名前asd で定義した数式 
 =INDEX($B$1:$B$5,SMALL(asd,ROW(A1)))         名前asdを使用した数式

 上の数式が 名前asdで短くなりました という具合です
 (HAHA)

 ↑の書き込みって (marumaru)さん?
 違いますよね。。。。

 話が分からなくなるので、コメント記入時は
 署名をして下さい。

 ■▲(HANA)■▲ 

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

 >その数式は、どの様な物なのですかね。

 そうくるだろうと思ってました。笑

 数式→IF(OR(INDEX(リスト,ROW用,COLUMN('sheet1'!$A$2))<>30101,INDEX(リスト,ROW用,COLUMN用)<=0),"",INDEX(リスト,ROW用,COLUMN用))

 定義部分→COLUMN用:COLUMN('sheet1'!A2)
       ROW用:ROW('sheet1'!A1)
                リスト:'sheet1'!$A$2:$R$309

 この式がシート2に入っています。

 何がしたいかというと、シート1にはあらかじめ表が入っているのですが、そこから当てはまる行だけをシート2に飛ばしたいのです。  

 (marumaru)


 sheet1の表

 場所	名称	種類	購入先	月日	 取得価額
 30101	ppp	44		1989/3/1	  226,000
 30101	ppp	44	北浜	1989/3/1	  360,000
 30102	ppp	47		1989/8/1	  950,000
 30101	ppp	47	三ッワ	1989/12/1	 1,220,000
 30105	ppp	47		1989/10/1	 1,370,000

 このスタイルの表がsheet1に300行くらい入ってあります。

 sheet2の表

 場所	名称	種類	購入先	月日	 取得価額
  ?        ?        ?         ?       ?           ?

 この?のところにIF(OR(INDEX(リスト,ROW用,COLUMN('sheet1'!$A$2))<>30101,INDEX(リスト,ROW用,COLUMN用)<=0),"",INDEX(リスト,ROW用,COLUMN用))

 が入っているって訳です。

 (marumaru)


 IF(OR(INDEX(リスト,ROW用,COLUMN('sheet1'!$A$2))<>30101,INDEX(リスト,ROW用,COLUMN用)<=0),"",INDEX(リスト,ROW用,COLUMN用))

 INDEX(リスト,ROW用,COLUMN('sheet1'!$A$2))<>
               ↓

 INDEX('sheet1'!$A$2:$R$309,ROW('sheet1'!A1),COLUMN('sheet1'!$A$2))
の数式に名前を

 if(or(名前<>30101,名前<=0),"",名前)  短い数式になりますね
(NANA)


 両方の表に行列番号を付けて
 ついでに、Sheet2の表に結果図も載せてもらえると
 分かりやすいのですが。。。。

 これって、間が抜けて表示されませんか?
 読み違えてます・・・?
 間が抜けても良い(寧ろ空白表示が良い)とか言う事・・・?

 Sheet1の行が削除されても良い様に
 INDEX関数が使ってあるのですかね・・・?
 それ以外の理由であれば
 なぜINDEX関数が使ってあるのか教えて下さい。

 ■▲(HANA)■▲

sheet1の表
    A     B        C         D        E          F            G
1 場所	名称	種類	購入先	月日	 取得価額           G2に
2 30101	ppp	44		1989/3/1	  226,000        1     =if(A2=30101,row(A1),"")
3 30101	ppp	44	北浜	1989/3/1	  360,000    2   下へフィーるコピー
4 30102	ppp	47		1989/8/1	  950,000
5 30101	ppp	47	三ッワ	1989/12/1	 1,220,000   4
6 30105	ppp	47		1989/10/1	 1,370,000

 sheet1G列を参照すれば
提示された定義名前を使うほどのメリットは???ですな!
(NANA)

 >なぜINDEX関数が使ってあるのか教えて下さい。
 と書いたのですが・・・・わかりました。(たぶん)
 sheet1の表が「リスト」として名前の定義をされているからですね。

 そこで質問ですが、この範囲に名前の定義をしているのは
 「式を短くする」以外に何か目的がありますか?
 これがあるために(為だけでもないですが)、
 式が長くなっているように思いますが。

 ■▲(HANA)■▲


 おはようございます。

 >sheet1G列を参照すれば

 30101をシート2に飛ばすだけでなくて、それ以外の30102や30105等もシート3やシート4に飛ばしたいのです。

 オートフィルタに似た感じに仕上げたいのですが。

 >これがあるために(為だけでもないですが)、
 式が長くなっているように思いますが。

 でもこれがないとシート1からデータを飛ばす事が出来なくなりませんか?

 (marumaru)

 ですから、希望結果図を載せて下さい。
 実際の配置(行列番号)もつけて。

 ■▲(HANA)■▲


 衝突とかゆうやつ〜

 >ですから、希望結果図を載せて下さい。
 実際の配置(行列番号)もつけて。

 す・すんません。。そない怒らなくても・・(>_<。)うっ

 sheet2

     A     B        C         D        E          F            
1 場所	名称	種類	購入先	月日	 取得価額           
2 30101	ppp	44		1989/3/1	  226,000            
3 30101	ppp	44	北浜	1989/3/1	  360,000       
5 30101	ppp	47	三ッワ	1989/12/1	 1,220,000   

 シート2には30101の行だけを、シート3には30102の行だけを、シート4には30105の行だけを飛ばす形にしたいのです。

 (marumaru)

 A        B        C         D        E         F       G
場所	名称	種類	購入先	月日		
30101	ppp	44		1989/3/1		101   100番台はsheet2
30101	ppp	44	北浜	1989/3/1		102
30102	ppp	47		1989/8/1		201      200番台はsheet3
30101	ppp	47	三ッワ	1989/12/1		103
30105	ppp	47		1989/10/1		501      500番台はsheet4

 G2に  =RIGHT(A2,2)*100+COUNTIF(A$2:A2,A2)       下へフィーるコピー
なら
{シート2には30101の行だけを、シート3には30102の行だけを、シート4には30105の行だけを飛ばす形にしたいのです。}
とばせます。
MATCH(100+ROW(A1),$G$2:$G$6,0) で何行目かとりだせます。
 この場合100番台
(NANA)


 ・・・怒ってないですけどね。
 これって、Sheet2にオートフィルタが設定してあるから
 4行目が表示されていない
 とか言うことですか?

 Sheet1の表がA1から始まっているのなら
 ↓の式で同じ結果が得られると思いますが。
=IF(AND(Sheet1!$A2=30101,Sheet1!A2>0),Sheet1!A2,"")

 30101を表示させたいシートのA1セルにいれて
 必要行列フィルドラッグ。

 ■▲(HANA)■▲

名無しさん

 その数式を自分のシート2に入れてみたのですが、「4」等、全てが数字で表示されてしまったんですが・・

 >これって、Sheet2にオートフィルタが設定してあるから
 4行目が表示されていない
 とか言うことですか?

 いいえ、シート2にはオートフィルタは設定してなくて、 他の行は取り出さないようにしたいのです。

 >=IF(AND(Sheet1!$A2=30101,Sheet1!A2>0),Sheet1!A2,"")

 この数式を試したのですが、場所だけ表示されました。(30101以外の分も・・)

 (marumaru)

 >この数式を試したのですが、場所だけ表示されました。
 この式をA2セルに入れて、A2セルをコピーして
 他のセルに貼り付けましたか?

 B2セルの式が
=IF(AND(Sheet1!$A2=30101,Sheet1!B2>0),Sheet1!B2,"")
 に成っているのに、Sheet1のA列が参照されるのなら
 計算方法が手動に成っていないか確認して下さい。

 ツール(T)→オプション(O) [ 計算方法 ]タブで
 計算方法が 手動(M) に成っていたら
 自動(A) を選択して下さい。

 なお、この式は marumaruさんご提示の式と同じ結果を返します。
 ですので、「30101」以外のデータが入力されている行は
 「""」が返され、間が抜けて表示されます。
 上に詰めて表示させる機能は付けていません。
 (元々 間が抜けて表示される式ですよね。)

 ■▲(HANA)■▲ 

 >この式をA2セルに入れて、A2セルをコピーして
 他のセルに貼り付けましたか?

 Ctrl+D,Ctrl+Rでは計算結果が違うのですか?
 さらに自動と手動でも計算結果が違うのですか?
 重くなるので常に手動にしてあるんですけど・・

 >「""」が返され、間が抜けて表示されます。
 上に詰めて表示させる機能は付けていません。
 (元々 間が抜けて表示される式ですよね。)

 そこなんです! 詰めて表示させる式を本当は作りたかったのですが、全く浮かばなかったんです。
 ですので、しょうがなく空白にして空白の部分を後で行削除する方法にしたんですよ。。

 (marumaru)

 今HANAさんの数式を再度試したら出来ました!

 ただ、
 >上に詰めて表示させる機能は付けていません。
 が、凄く気になります!!!!
 そんな数式あるんですか?

 (marumaru)

 その数式を自分のシート2に入れてみたのですが、「4」等、全てが数字で表示されてしまったんですが・・
シート1の表に提示してますが
そのG列参照で詰めて表示させるための行取り出し数式ですが
【MATCH(100+ROW(A1),$G$2:$G$6,0) で何行目かとりだせます。】
(NANA)


 NANAさんでしたか。

 >そのG列参照で詰めて表示させるための行取り出し数式ですが

 どのように使うのですか? 自分の数式に挿入する形ですか?

 (marumaru)

 先の式は
 「現在使って居られる式はもっと短くできますよ」
 と言う為に載せた物です。

 上に詰めて表示させるのは
 数式で対応できますが、数式を埋め込むと重くなります。
 >重くなるので常に手動にしてあるんですけど・・
 既に重いんですよね。

 ・・・まぁ、現在設定してある式が重いだけかもしれませんが。

 数式でやるなら、
  全ての場所のシートを作っておいて
  表示させておく
 のではなく
  表示用のシートを一つ作っておいて
  (たとえば)A1セルに場所(30101 等)を入力し
  該当のデータを表示させる
 と言う方が良いと思います。

 元データがどのくらいあって、場所が何カ所有るのか分かりませんが。

 マクロなら、こんなコードがつかえるかもしれません。
[[20081218145320]]『データを品名別に別シートに自動的に入力したい』(山田)
 >ThisWorkbookのモジュールに以下を貼り付け。
 と書いてありますが・・・・
 1.Alt + F11 でVBEを起動
 2.左側の「プロジェクト−VBAProject」のウィンドウで
   ThisWorkbook をダブルクリック。
 3.出てきた右側の白い所にコードを貼付。
 4.エクセルに戻って 表示させたいシートを選択。

 >表示用のシートを一つ作っておいて
 で良いなら、元の表に通し番号(ユニークな値が有るならそこを利用し)
 ピボットテーブルを使用しても良いかもしれません。
 集計列が邪魔になりますが。

 ■▲(HANA)■▲ 

 自分の数式に挿入する形ですか?  
=if(countif(範囲,30101)<ROW(A1),"",index(範囲,MATCH(100+ROW(A1),$G$2:$G$6,0)))
(NANA)


 HANAさん

 数式ではどのような形になるのですか? ヒントとかありますか?

 数式で完成させたいのです。

 NANAさん

 >=if(countif(範囲,30101)<ROW(A1),"",index(範囲,MATCH(100+ROW(A1),$G$2:$G$6,0)))
 上記の数式をシート2に当てはめてみたのですが、#REFが表示されました・・

 (marumaru)

 NANAさん

 COLUMN('sheet1!'A2)を入れたら出来ました!

 ただ、かなり重いですね・・・

 このことをHANAさんは言いたかったのかな。笑

 (marumaru)
範囲,は設定しましたか そのままでは??? #REFが表示ですよ


 上記の式だと空白セルが0表示になってしまうのですが、
 空白表示にするには何処をいじれば良いですか?

 (marumaru)

 【空白セルが0表示になってしまうのですが、】
購入先 列ですよね
  後ろに&""
 購入先 列には
 D列
 =IF(COUNTIF(sheet1!$A$2:$A$6,30101)<ROW(A1),"",INDEX(sheet1!D$2:D$6,MATCH(100+ROW(A1),$G$2:$G$6,0)))&""

 COLUMN('sheet1!'A2)はひつようないですが、
■▲(NANA)■▲ 


 >購入先 列ですよね

 最初に乗っけた表は大分省いてあるんです。
 実際は至るところに空白列があるんですよね〜・・

 >COLUMN('sheet1!'A2)はひつようないですが、

 自分のだとこれがないと#REFが表示されます。

 (marumaru)


 商品毎のシートは、商品数分必要なんですか?

 ■▲(HANA)■▲

 >商品毎のシートは、商品数分必要なんですか?

 商品毎のシートとはなんでしょう?
 シート2やらシート3の事ですか?
 これは、場所の数だけ必要で、実際の表だと30101〜30108まであります。
 これ以上は増える事も減る事もありません。

 全部で8シートですね。 元シートを合わせて9シートになります。

 (marumaru)

 あ・・・済みません。
 「商品毎」じゃなくて「場所毎」でしたね。

 確認するだけなら、A1セルに場所を入力して
 その場所のデータが抽出されれば良さそうに思いますが
 それでは駄目なのですか?

 一つだけでも計算に時間がかかる
 元のシートの更新が頻繁に有るわけではない
 重いファイルでも問題ない
 とかなら、どうやっても同じかもしれませんが。

 因みに、元シートの最大行数は?

 ■▲(HANA)■▲

 HANAさん

 因みにこれは資産管理の為の表なんです。
 ですので、月毎に内容も変わっていくのです。(元シートの)

 >確認するだけなら、A1セルに場所を入力して
 その場所のデータが抽出されれば良さそうに思いますが
 それでは駄目なのですか?

 普通に元シートでオートフィルタすればいいじゃん!て事ですか?笑

 >因みに、元シートの最大行数は?

 現時点では、309行です。

 (marumaru)


 G2に  =RIGHT(A2,2)*100+COUNTIF(A$2:A2,A2)
        =if(A2="","",RIGHT(A2,2)*100+COUNTIF(A$2:A2,A2))  
        の方がいいかな

 =IF(COUNTIF(sheet1!$A$2:$A$6,30101)<ROW(A1),"",INDEX(sheet1!D$2:D$6,MATCH(100+ROW(A1),$G$2:$G$6,0)))

 MATCH(100+ROW(A1),$G$2:$G$6,0)))  の100は  30101 1の位の1
               200にすれば   30102 が検出 ですね。
    ○■▲(NANA)■▲○ 


 >普通に元シートでオートフィルタすればいいじゃん!て事ですか?笑
 いいえ、違います。
 上の方のどこかに書いたと思いますが
 (見つけたので、コピペしておきます。)
   数式でやるなら、
    全ての場所のシートを作っておいて
    表示させておく
   のではなく
    表示用のシートを一つ作っておいて
    (たとえば)A1セルに場所(30101 等)を入力し
    該当のデータを表示させる
   と言う方が良いと思います。

 たぶん、他の方も見ると思いますので
 別シートにしておいた方が良いのではないかと思っています。
 marumaruさんが見るだけなら、オートフィルタで良いのでしょ?(タブン。。。)

 ただ、計算に時間がかかるなら 数式の量を
 減らせる方が良いのかと思いまして。

 現在、
  元シートが1枚、場所毎に数式ずっしりのシートが8枚。
 これを
  元シートが1枚、数式ずっしりのシートが1枚。
  (1枚で場所を切換ながら表示)
 と言う提案です。

 ■▲(HANA)■▲

 衝突しましたけど、そのままUpします。

 NANAさんとHANAさんは同じ人?笑

 自分にとってはどちらもイケてます。

 ただ、やっぱり空白の部分が0表示になってしまいます。

 論理式のところにOR関数を入れて検証してみたのですが、0表示になったり、ちゃんと空白になったり、
 (ラジバンダリ)で、状況によって変わってしまいます・・・

 何か解決策ありませんか?

 (marumaru)

 >たぶん、他の方も見ると思いますので
 別シートにしておいた方が良いのではないかと思っています。
 marumaruさんが見るだけなら、オートフィルタで良いのでしょ?

 その通りでござい。

 >元シートが1枚、数式ずっしりのシートが1枚。
  (1枚で場所を切換ながら表示)
 と言う提案です。

 シート2に飛ばした上で、オートフィルタて事ですか?
 それともまた、「いいえ、違います。」と言われるんでしょうか?

 (marumaru)

 そうですね
 >「いいえ、違います。」
 ですから、この辺でやめておきましょう。

 >NANAさんとHANAさんは同じ人?笑
 いいえ、違います。(こればっかりね。^^)
 でも、どうしても私の真似をしたいみたいです。
 困ったモノです。┐('〜`;)┌ 

 ■▲(HANA)■▲

 >ですから、この辺でやめておきましょう。

 わかりました! NANAさんの数式を使って、見たい場所を逐一変えていくって事ですよね?

 >でも、どうしても私の真似をしたいみたいです。
 困ったモノです。┐('〜`;)┌ 

 いいぢゃないですか。
 尊敬されてるって事ですよ。

 ◎■▲(marumaru)■▲◎


 例えば
	[A]	[B]	[C]	[D]	[E]
[1]	場所				
[2]	30101	←入力規則を設定			
[3]					
[4]	名称	種類	購入先	月日	取得価額
[5]	ppp	44		3月1日	226,000
[6]	ppp	44	北浜	3月1日	360,000
[7]	ppp	47	三ッワ	12月1日	1,220,000
[8]					
 A5セルに
=IF(COUNTIF(Sheet1!$A$1:$A$400,$A$2)<ROW(A1),"",IF(INDEX(Sheet1!B$1:B$400,
SMALL(INDEX((Sheet1!$A$1:$A$400<>$A$2)*500+ROW($A$1:$A$400),),ROW(A1)))="","",
INDEX(Sheet1!B$1:B$400,SMALL(INDEX((Sheet1!$A$1:$A$400<>$A$2)*500+ROW($A$1:$A$400),),ROW(A1)))))
 として、必要行列フィルドラッグ。
 (元シートのシート名は Sheet1)

 A2セルの値を変えると、表示されるデータも変わります。

 元シートの方に作業列を作れるなら、A列に作業列を挿入して
 元	[A]	[B]	[C]	[D]	[E]	[F]	[G]
[1]	作業列	場所	名称	種類	購入先	月日	取得価額
[2]	1	30101	ppp	44		3月1日	226,000
[3]	2	30101	ppp	44	北浜	3月1日	360,000
[4]		30102	ppp	47		8月1日	950,000
[5]	3	30101	ppp	47	三ッワ	12月1日	1,220,000
[6]		30105	ppp	47		10月1日	1,370,000
[7]							
[8]							
 A2セルに
=IF(B2=Sheet2!$A$2,COUNTIF($B$2:B2,B2),"")
 として必要行フィルドラッグ。
 表示用のA5セルに
=IF(MAX(元!$A$1:$A$400)<ROW(A1),"",IF(VLOOKUP(ROW(A1),元!$A$1:$G$400,COLUMN(C1),FALSE)="","",
VLOOKUP(ROW(A1),元!$A$1:$G$400,COLUMN(C1),FALSE)))
 として、必要行列フィルドラッグ。
 (元シートのシート名は 元)

 どちらも行方向の範囲は400行を考えています。

 入力規則は、こちらの事です。
http://www.excel.studio-kazu.jp/lib/e2k/e2k.html
 ライブラリより「簡易リストボックス」

 入力の必要が無くなるので、設定しておくと良いと思いました。
 ちょっと時間が無いので、検証不足が有るかもしれません。
 上手く行かない場合は 言って下さい。

 >いいぢゃないですか。
 >尊敬されてるって事ですよ。
 marumaruさんは、寛容な方ですね。^^

 ■▲(HANA)■▲


 >0表示になったり、ちゃんと空白になったり、
空白のある列を参照する   は数式の後ろに&”” を付け加える
数値を参照する列は つけない

 もしくは条件書式で0ならフォント白にするとか
  ○■▲(NANA)■▲○ 

 HANAさんとNANAさんの二つの方法を試してみます。

 長い間ありがとうございました。

 万が一、上記の通りやってみて不都合がある場合はまたUPさせてもらいます。

 お疲れ様でした。

 ◎■▲(marumaru)■▲◎

 謎が出てきました!

 >=IF(COUNTIF(sheet1!$A$2:$A$6,30101)<ROW(A1),"",INDEX(sheet1!D$2:D$6,MATCH(100+ROW(A1),$G$2:$G$6,0)))

 この式の何処の部分で"上に詰めて表示させる機能"を付けてるんですか?

 (marumaru)

 私が載せた、VLOOKUP関数を使用した方では
 どうなっているか分かりますか?
 同じだと思いますが。

 (HANA)

 2つの式(連携)でみくらべましょう

 あっおはようございます。

 HANAさん

 わっからないです・・COUNTIFのとこらかなぁとは思うんですが。

 NANAさんですか?

 連携? そんな機能初耳です。 探してみます!

 (marumaru)

 連帯?
 ・・・って機能のことでは無いと思いますが。。。

 小さなサンプルを載せてみます。
	[A]	[B]	[C]	[D]	[E]	[F]	[G]
[1]	項目		作業列	項目		番号	検索
[2]	101		1	101		1	101
[3]	↑検索値		2	101		2	101
[4]	 を入力			102		3	101
[5]			3	101		4	#N/A
[6]				105		5	#N/A
			↑数式1			↑数式2	↑数式3
 数式1(C2)
=IF($A$2=D2,COUNTIF($D$2:D2,$A$2),"")
 数式2(F2)
=ROW(A1)
 数式3(G2)
=VLOOKUP(F2,$C$1:$D$6,2,FALSE)

 数式1を入れると、
 同じ行のD列の値が、A2セルと等しい場合
  その値がこれまでに何回有るか個数を返します。
 等しくない場合は「""」を返します。

 これで、A2セルと同じ値の行のC列には連番が振られることに成ります。

 数式2は、何番の値を参照するかの検索値に使用します。
 下にフィルドラッグすると、連番を作成する事が出来ます。

 数式3で、実際にF列の値をC列から探し
 該当する、D列の値を返します。

 数式2と数式3を合体させると(2行目用の式)
=VLOOKUP(ROW(A1),$C$1:$D$6,2,FALSE)
 の様に書けます。

 VLOOKUP(ROW(A1),元!$A$1:$G$400,COLUMN(C1),FALSE)
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  列番号   ~~~~~~
 この形です。

 VLOOKUP関数はお分かりですよね。。。?
 実際にA2の値を変えながらC列の戻り値の変化を
 確認してみて下さい。

 (HANA)

 おほ〜!!

 HANAさんわかりやすい説明ありがとうございました!

 理解出来ました。 理解しなかったらせっかく教えて貰ったのに活用出来ないですもんね。

 これで活用出来そうです。

 アリガトウゴザイマシタ。  使用禁止文字ですよ(半角カタカナ)

 (marumaru)

 A       	G		
場所			
30101	101   100番台はsheet2 Aの1の位をGの100の位に1		
30101	102		
30102	201      200番台はsheet3	Aの1の位をGの100の位に2	
30101	103		
30105	501      500番台はsheet4		

 101  の1の位は その数字が何番目にでてきたか 1回目    最初の1行目に
 102                      2回目     次の2行目に表示 

 NANAさん

 詳しい説明ありがとうございました。

 また何かあったらよろしくお願いします。

 (marumaru)

コメント返信:

[ 一覧(最新更新順) ]


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