[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『日足データから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)
有難うございます。 あれから色々試しまして下記の数式に変更しましたら綺麗に出来上がりました。
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.