[[20120324083329]] 『日足データから3日足データをつくりたい』(正) ページの最後に飛ぶ

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

 

『日足データから3日足データをつくりたい』(正)

 いつもお世話になります。教えてください。

 下記のような日足データから3日足を作りたいのですが、三日足の日付と始値と終値の
 数式は出来たのですが、高値と安値の数式が出来ないのです。

	A	B	C	D	E	F
1		一日足				
2	コード	日付	始値	高値	安値	終値
3	8306	2012/2/1 352	360	351	359
4	8306	2012/2/2	365	373	365	368
5	8306	2012/2/6	380	381	374	375
6	8306	2012/2/7	375	380	374	380
7	8306	2012/2/8	382	390	381	390
8	8306	2012/2/9	393	398	386	396
9	8306	2012/2/10394	395	383	385
10	8306	2012/2/13383	392	383	387

	G	H	I	J	K	L	M
1	三日足						
2	始日付	〜終日付	始値	高値	安値	終値
3	2012/2/1	〜2012/2/6352	381	351	375
4	2012/2/7	〜2012/2/9375	398	374	396
5	2012/2/10〜#NUM!	394			#NUM!

 三日足は3日毎に始値、高値、安値、終値を決めます。				
 始値は三日毎の始値を入れます。				
 高値は三日間の最も高い値を入れます。				
 安値は三日間の最も安い値を入れます。				
 終値は三日毎の終値を入れます。				

 数式は下記の通りいれてます				
G3=	'=B3			
G4=	'=SMALL(B:B,ROW(A1)*3+1)			
I3=	'=SMALL(B:B,ROW(A1)*3)			
J3=	=VLOOKUP(G3,B3:F10,2)			
K3=	出来ない			
L3=	出来ない			
M3=	=VLOOKUP(I3,B3:F10,5)			

K3,L3以下に入れる数式を教えて下さい。

 #NUM!のエラー解決の方法も教えて下さい。				

ウインドウズXP,エクセル2003
宜しく御願いします。

(正)


 I3セル =IF(ISERROR(SMALL(B:B,ROW(A1)*3)),"",SMALL(B:B,ROW(A1)*3))
 K3セル =MAX(IF((B$3:B$10>=G3)*(B$3:B$10<=I3),D$3:D$10,""))
 L3セル =MIN(IF((B$3:B$10>=G3)*(B$3:B$10<=I3),E$3:E$10,""))
 M3セル =IF(I3="","",VLOOKUP(I3,B$3:F$10,5))
 下にフィルコピー

 K3セルとL3セルの関数は Ctrl + Shift + Enter で確定してください。

 あとJ3セルの式ですが
 =VLOOKUP(G3,B$3:F$10,2)
 のようにした方がいいと思います。

 *追記*
 G3セルは =INDEX(B:B,ROW(A1)*3)
 下にフィルコピー
 でもよいかも。

 (se_9)

 ちょっと表がずれてますけどI列が終日付ですよね。
 I5セルは2012/2/13になればいいんですか? 

 G4 =IF(COUNT(B:B)<ROW(A1)*3+1,"",SMALL(B:B,ROW(A1)*3+1))
 ※G3→G4に修正しました(2012/03/24 15:45)

 I3 =IF(OR(I2="",MAX(B:B)=I2),"",SMALL(B:B,MIN(COUNT(B:B),ROW(A1)*3)))
 
  
 [追記]
 > J3 =VLOOKUP(G3,B3:F10,2) 

 これを見ると10行目で完結しているような感じですが、実際はどのくらいのデータ量なんですか?

 ちなみにそのJ3の数式、範囲を絶対参照にすることの他に、F10→C10でいいですし
 検索の型もFALSEにしておいた方がいいと思います(意識的に省略してるんならいいですけど)

 (JPN)


 ↑ の続きです

 日足データの表は完結しておらず、今後もデータが増えていくという前提で
 データ量が多い場合(多くなくてもいいんですが)se_9さんが追記で書いておられるように

 G3 =INDEX(B:B,ROW(A1)*3)

 にして、表示形式〜ユーザー定義 yyyy/m/d;; ←「;;」をつける

 見た目空白でも実際のデータはは 0 なので(B列の空白が数式の空白文字列「""」でなければ)
 始値も ↓ に変更

 J3 =IF(G3=0,"",VLOOKUP(G3,$B$3:$C$10,2,FALSE))

 I列はI5がどうなればいいのかわからないので保留

 se_9さんが提示されている高値・安値の数式も

 =IF(G3=0,"",MAX(・・・・・・) のように変更(または書式で 0 を非表示にする)

 (JPN)

 (se_9) さん、(JPN)さん  早速のご教示有難うございました。

 すみませんずれています。I列が終了日付です。
 データ数は現在2012/3/23までありますが、例として少ないほうが良いかと思いましたので少しにしました。
 仰るとおり今後も増え続けて行きます。2000行ほどを考えています。

 データを増やし、ご教示いただいた数式を入力しました。

 G3	=INDEX(B:B,ROW(A1)*3)					
 I3	=IF(ISERROR(SMALL(B:B,ROW(A1)*3)),"",SMALL(B:B,ROW(A1)*3))					
 J3	=IF(G3="","",VLOOKUP(G3,B3:F:F,2))	左記に変更しました	
 K3	=MAX(IF((B$3:B$10>=G3)*(B$3:B$10<=I3),D$3:D$10,""))					
 L3	=MIN(IF((B$3:B$10>=G3)*(B$3:B$10<=I3),E$3:E$10,""))					
 M3	=IF(I3="","",VLOOKUP(I3,B3:F:F,5))	左記に変更しました	

 結果  下記のようになりました。

 A	B	C	D	E	F
	一日足				
コード	日付	始値	高値	安値	終値
8306	2012/2/1	352	360	351	359
8306	2012/2/2	365	373	365	368
8306	2012/2/6	380	381	374	375
8306	2012/2/7	375	380	374	380
8306	2012/2/8	382	390	381	390
8306	2012/2/9	393	398	386	396
8306	2012/2/10	394	395	383	385
8306	2012/2/13	383	392	383	387
8306	2012/2/14	385	394	383	392
8306	2012/2/15	395	411	394	408
8306	2012/2/16	403	409	400	401
8306	2012/2/17	414	414	404	406
8306	2012/2/20	412	414	409	411
8306	2012/2/21	411	414	405	407
8306	2012/2/22	405	412	403	411
8306	2012/2/23	404	412	400	409
8306	2012/2/24	406	419	406	416
8306	2012/2/27	424	429	420	420
8306	2012/2/28	414	423	411	422
8306	2012/2/29	429	431	418	420
8306	2012/3/1	420	425	412	415
8306	2012/3/2	419	421	414	415
8306	2012/3/5	416	418	411	413
8306	2012/3/6	413	415	408	408
8306	2012/3/7	400	406	400	404
8306	2012/3/8	410	418	408	415
8306	2012/3/9	420	429	416	425
8306	2012/3/12	426	429	418	419
8306	2012/3/13	421	428	420	422
8306	2012/3/14	432	433	429	433
8306	2012/3/15	436	437	429	433
8306	2012/3/16	433	439	431	439
8306	2012/3/19	440	448	437	445
8306	2012/3/21	443	446	433	434
8306	2012/3/23	428	431	425	426

 G	H	I	J	K	L	M
 三日足						
 始日付	〜	終日付	始値	高値	安値	終値
 2012/2/1	〜2012/2/6352	381	351	375
 2012/2/7	〜2012/2/9375	398	374	396
 2012/2/10	〜2012/2/14394	395	383	392
 2012/2/15	〜2012/2/17395	0	0	406
 2012/2/20	〜2012/2/22412	0	0	411
 2012/2/23	〜2012/2/27404	0	0	420
 2012/2/28	〜2012/3/1414	0	0	415
 2012/3/2	〜2012/3/6419	0	0	408
 2012/3/7	〜2012/3/9400	0	0	425
 2012/3/12	〜2012/3/14426	0	0	433
 2012/3/15	〜2012/3/19436	0	0	445
 2012/3/21	〜	443	0	0	
 1900/1/0	〜	#N/A	398	351	
 1900/1/0	〜	#N/A	398	351	
 1900/1/0	〜	#N/A	398	351	
 1900/1/0	〜	#N/A	398	351	
 1900/1/0	〜	#N/A	398	351	
 1900/1/0	〜	#N/A	398	351	
 1900/1/0	〜	#N/A	398	351	
 1900/1/0	〜	#N/A	398	351	
 1900/1/0	〜	#N/A	398	351	
 1900/1/0	〜	#N/A	398	351	
 1900/1/0	〜	#N/A	398	351	
 1900/1/0	〜	#N/A	398	351	
 1900/1/0	〜	#N/A	398	351	
 1900/1/0	〜	#N/A	398	351	
 1900/1/0	〜	#N/A	398	351	
 1900/1/0	〜	#N/A	398	351	
 1900/1/0	〜	#N/A	398	351	
 1900/1/0	〜	#N/A	398	351	
 1900/1/0	〜	#N/A	398	351	
 1900/1/0	〜	#N/A	398	351	
 1900/1/0	〜	#N/A	398	351	
 1900/1/0	〜	#N/A	398	351	
 1900/1/0	〜	#N/A	398	351	

 データを増やして色々試して見ましたが、高値、安値が上手くいきません。
 三日足の3/21以降が日付が1900/1/0に成ります。
 そのためか始値が#N/Aになり、高値、安値の表示エラーが直りません。
 すみませんが、もう少し教えてください。

 宜しく御願いします。

 (正)


 当方の回答は表がずれているということ以外、華麗にスルーなんですね。

 > 三日足の3/21以降が日付が1900/1/0に成ります。

 G列の表示形式を ↓ にしましたか?
 > 表示形式〜ユーザー定義 yyyy/m/d;; ←「;;」をつける

 始値も
 J3 =IF(G3=0,"",VLOOKUP(G3,B:C,2,FALSE))
 
 
 I14セル(始日付が3/21のところの終日付)は3/23ではなく空白でいいんですか?
 だったらI列もG列と同じようにして

 I3 =INDEX(B:B,ROW(A2)*3-1)  表示形式はG列と同じ

 M3 =IF(I3=0,"",VLOOKUP(I3,B:F,5,FALSE))
 
 高値・安値は範囲を修正していないのでは?
 範囲を修正し、高値・安値とも下のように変更する。

 =IF(I3=0,"", MAX(・・・・・・)

 ちなみに配列数式は2003では列全体の範囲は指定できません。

 (JPN)

(JPN)さん

 有難うございます。
 あれから色々試しまして下記の数式に変更しましたら綺麗に出来上がりました。

 G3	=IF(I3="","",INDEX(B:B,ROW(A1)*3))
 I3	=IF(ISERROR(SMALL(B:B,ROW(A1)*3)),"",SMALL(B:B,ROW(A1)*3))
 J3	=IF(I3="","",VLOOKUP(G3,B3:F:F,2))
 K3	=IF(I3="","",MAX(IF((B$3:B$1500>=G3)*(B$3:B$1500<=I3),D$3:D$1500,"")))
 L3	=IF(I3="","",MIN(IF((B$3:B$1500>=G3)*(B$3:B$1500<=I3),E$3:E$1500,"")))
 M3	=IF(I3="","",VLOOKUP(I3,B3:F:F,5))

 その旨返事と思い開けましたら、早速の(JPN)さんのご教示有難うございます。
 今後とも宜しく御願いします。
 (正)


 この質問者さんはひとの意見には一切耳を傾けようとしない、周りが見えないタイプのようですね。

 > =IF(I3="","",VLOOKUP(G3,B3:F:F,2))

 こんな範囲指定の仕方、初めて見ましたが
 これだとB3にしている意味がないし、しかも別シートだとエラーになってしまいます。

 (JPN)

コメント返信:

[ 一覧(最新更新順) ]


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