[[20070124142059]] 『一つのセル内に複数行で書かれている文章を1行ずax(超EXCEL初心者) ページの最後に飛ぶ

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

 

『一つのセル内に複数行で書かれている文章を1行ずつに分ける』(超EXCEL初心者)

 C2の検索文字の欄は複数行ある文章で、
 その行の中で一番大きい値を合計数に出す。

 ※文字間を1として足します。

 −−−−−−−−
Ms.Rin〜♪♪さんからの回答です。[[20061229142634]]

 	A	B	C        D       E
[1]	文字	数値	検索文字        作業列     合計
[2]	A	1	 ABCDEFGHIJK    12         66 ←C3セルの1行目 
	                 LMNO          17        54←C3セルの2行目 
		        PQRSTUVWXYZ   #DIV/0!    231←C3セルの3行目
[3]	B	2	
[4]	C	3	
[5]	D	4	
[6]	E	5	
[7]	F	6	
[8]	G	7	
[9]	H	8	
[10]	I	9	
[11]	J	10	
[12]	K	11	
[13]	L	12	
[14]	M	13	
[15]	N	14	
[16]	O	15	
[17]	P	16	
[18]	Q	17	
[19]	R	18	
[20]	S	19	
[21]	T	20	
[22]	U	21	
[23]	V	22	
[24]	W	23	
[25]	X	24	
[26]	Y	25	
[27]	Z	26	

D列に作業列を作ります

 D2セルへ

 =1/LARGE(INDEX((MID($D$2,ROW($1:$100),1)=CHAR(10))/ROW($1:$100),),ROW(A1))
 下へコピーします。

 E2セルへ
 =SUMPRODUCT(EXACT(MID(LEFT(C2,D2),COLUMN(1:1),1),A2:A27)*B2:B27)+D2-2
  E3セルへ
 =SUMPRODUCT(EXACT(MID(LEFT(MID(C2,D2+1,D3-D2-1),D2),COLUMN(1:1),1),A2:A27)
 *B2:B27)+D3-D2-2
  E4セルへ
 =SUMPRODUCT(EXACT(MID(MID(C2,D3+1,LEN(C2)-D3),COLUMN(1:1),1),A2:A27)*B2:B27)
 +LEN(C2)-D3-1
 −−−−−−

 早速泣きついてしまいますが・・・

 =1/LARGE(INDEX((MID($C$2,ROW($1:$100),1)=CHAR(10))/ROW($1:$100),),ROW(A1))

 上の式でわかったのは
 MID($C$2,ROW($1:$100),1)=CHAR(10)
 の部分だけでした。
 これを見た率直な感想は『なんだかすごすぎる!』です。

 何がどうしてこうなるのかまったくわかりません。
 サルにもわかる解説をお願いしたいです・・・

 (超EXCEL初心者) 


 こんにちは〜♪

 >何がどうしてこうなるのかまったくわかりません。
 >サルにもわかる解説をお願いしたいです・・・

 こんな表を例にしてみました。

	A	B	C	D	E	F
[1]	A	2	FALSE	0	0.5	2
[2]	・	5	TRUE	0.5	0.2	5
[3]	B    #DIV/0! FALSE 0      0     #DIV/0!
[4]	C		FALSE	0	0	#DIV/0!
[5]	・		TRUE	0.2	0	#DIV/0!
[6]	D		FALSE	0	0	#DIV/0!
[7]	E		FALSE	0	0	#DIV/0!
[8]			FALSE	0	0	#DIV/0!
[9]			FALSE	0	0	#DIV/0!
[10]			FALSE	0	0	#DIV/0!

 ★この表のA列は
 たとえば、A1セルに、
 ____
 A
 BC
 DE
 ----
 セル内改行を含む、3行をA列に(A1〜A7)1字ずつ配置した表です。
 実際に、入力してみてください。

 A2とA5は、改行だけしたセルです。
 目印で、・ にしてあります。

 この2つは、何も入力せずセルを編集状態にして
 ALT+ENTER で改行だけしてください。
 これで
 =COUNTA(A1:A10) で、7 と数えられます。

 ★ここから本題になります。。。

 B1セルへ 
 =1/LARGE(INDEX(($A$1:$A$10=CHAR(10))/ROW($1:$10),),ROW(A1))

 下にコピーで、表のように 2 と 5 が表示されます。
 見れば、お分かりの様に、改行したセルの行番号が出てますね。

 ★この処理は、良くQ&Aの回答でも
 使われてます。。。
 (条件に会った、データを詰めて表示させる)等の質問の回答で。。。

 他にも幾つかありますが。。
 ポピュラーなのが、配列数式で
 =SMALL(IF($A$1:$A$10=CHAR(10),ROW($A$1:$A$10),""),ROW(A1))

 ctrl+Shift+Enter
 この式を下にコピーで、同じ結果なります。。。

 私の式は、これの変形になります。
 ★特に配列数数式は、式を分解するとわかりやすくなります。
 まず、
 C1セルへ
 =A1=CHAR(10)  C10までコピー。

 D1セルへ
 =C1/ROW(A1)  D10までコピー。

 E1セルへ
 =LARGE($D$1:$D$10,ROW(A1))  E10までコピー。

 F1セルへ
 =1/E1  F10までコピー。

 この結果で、たぶんお分かりになると思います。

 ★式の中で、INDEXを使っていますが、
 実際は、無くても

 =1/LARGE(($A$1:$A$10=CHAR(10))/ROW($1:$10),ROW(A1))
 ctrl+Shift+Enter

 で、いいのですが、INDEX等の配列関数を入れると
 ctrl+Shift+Enter を省けるので使っています。

 こんなへたな説明でゴメンナサイ!!

 >上の式でわかったのは
 > MID($C$2,ROW($1:$100),1)=CHAR(10)
 > の部分だけでした。

 を、理解されている(超EXCEL初心者)さん。。

 でしたら、お分かりになると思います。。。

 。。。Ms.Rinでした〜♪♪


コメント返信:

[ 一覧(最新更新順) ]


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