- ベストアンサー
INDIRECTうまくいったのですが次は?
初級の質問ですがよろしくお願いします。 ”データベース”(10000行ほど) A列 には日付 B列~E列 は数値データがあり 分析のため別シートに抽出 頻繁に任意の期間を変えることがあるので =MATCH関数で とりたい期間の始まりの行番号を $A$1に取得し =INDIRECT("データベース!$A$"&$A$1,TRUE) で始まりの1行目は上手くできたのですが、さて2行目からをどうするかで悩んでいます。 いろいろな方法があると思いますが、どうも難しく考えて固まってしまいました。 なるべく短い式にしたいのでアイデア教えてください。 また始まりの行 B列~E列について =INDIRECT("データベース!$B$"&$A$1,TRUE) または =INDEX(データベース!B:B,$A$1) と思っていますが、やはり2行目から悩んでしまい進めなくなりました。 週末ですがどうかよろしくお願いします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
OFFSET関数ではいかがですか 1行目は =OFFSET(データベース!$B$1,$A$1-1,0) 2行目は =OFFSET(データベース!$B$1,$A$1,0) です ROW関数と組み合わせて =OFFSET(データベース!$B$1,$A$1-ROW()+1,0) のようにすれば行番号で自動で参照先を変更できます
その他の回答 (4)
#2です。 何度もゴメンナサイ。OFFSETを使う場合、行数のオフセット値の計算は、 $A$1+ROW()-2 ではなく $A$1+ROW()-3 です。従って正しい式は =IF(($A$1+ROW()-2)<=$B$1,OFFSET(データベース!$A$1,$A$1+ROW()-3,COLUMN()-1),"") です。 (今度は大丈夫だろうな<==自分へツッコミ)
お礼
いろいろありがとうございました。 私の未熟なスキルには zap35 さんの回答がわかりやすかったようです。
#2です。 全ての数式を1つですますなら、 =IF(($A$1+ROW()-2)<=$B$1,OFFSET(データベース!$A$1,$A$1+ROW()-2,COLUMN()-1),"") でOKですね。 ただし、貼り付けの際は「形式を選択して貼り付け」-「数式」を行わないと 日付の形式が他の列に適用されたり、その逆が起こってしまいます。 それと、#3での回答で「#1さん」と書くべきところを呼び捨てにしてしまいました。 #1さん、ゴメンナサイ。
#2です。ゴメンナサイ、#1の言われるようにOFFSETの方がスマートですね。 =IF(($A$1+ROW()-2)<=$B$1,OFFSET(データベース!$A$1,$A$1+ROW()-2,0),"")
シート「データベース」が日付順に並んでいるとして、 match(「探したい日付範囲の開始日」,データベース!$A:$A,0)で最初の行番号--->A1 match(「探したい日付範囲の終了日」,データベース!$A:$A,1)で最後の行番号--->B1 がとれると思います。 そこで、 =IF(($A$1+ROW()-2)<=$B$1,INDIRECT("Sheet1!$A$"&TEXT($A$1+ROW()-2,"0"),TRUE),"") で各行が出ます。(一応実験済) ただ >なるべく短い式にしたいので からはハズれてしまいますが...
補足
さっそくありがとうございました。 OFFSET関数は始めてですがやってみます。 このケースではいろいろな関数が使えますが、どれを使ったら良いのかは好き好きなんでしょうか? まだボキャもあまりありませんが関数の選択に決め手がよくわからないので参考までに決め方があれば教えていただけるとありがたいと思います。