Excel (一般機能)

Excelの一般機能に関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 11全般 : Microsoft 365)
時系列データの抽出
投稿日時: 23/12/09 18:58:38
投稿者: kysn1122

よろしくお願いいたします。
 
下記の時系列データを、例えば5秒ごとに抽出する方法を教えていただきたいです。
以下、A列とB列に経過時間と温度が並んでます。
1行目がデータの見出し
2行目からがデータです。
 
 
A列    B列
経過時間  温度
1 30℃
2 40℃
3 20℃
4 50℃
5 10℃
6 60℃
7 80℃
8 50℃

回答
投稿日時: 23/12/09 20:59:27
投稿者: Mike

こういうこと?
   A   B
1 経過時間 温度
2 0:00:00 30℃
3 0:00:05 40℃
4 0:00:10 20℃
5 0:00:15 50℃
6 0:00:20 10℃
7 0:00:25 60℃
8 0:00:30 80℃
9 0:00:35 50℃
 
A2: =TIME(0,0,(ROW(A1)-1)*5)

投稿日時: 23/12/10 08:35:35
投稿者: kysn1122

ご連絡ありがとうございます。
 
   A   B
1 経過時間 温度
2 1   30℃
3 2   40℃
4 3   20℃
5 4   50℃
6 5   10℃
7 6   60℃
8 7   80℃
9 8   50℃
  
上記データで、経過時間の単位は[秒]
です。これを別シート、もしくは同じシートのC列以降に、もし2秒抽出するなら下記のようにアウトプット出したいのです。
 
   C   D
1 経過時間 温度
2 2   40℃
3 4   50℃
4 6   60℃
5 8   50℃
 
以前は、このようにやってました。ただこれだとデータがあまりにも多いのでエクセルの処理が重いことになってました。
そのため、なんかSQLみたいなことで一瞬に抽出できないかなと疑問を持ったのです、もしくはpivotとか(実は全然知りません。)
 
 
   C   D
1 経過時間 温度
2 2   =indirect("B"&match(C2, A:A, 0))
3 4   =indirect("B"&match(C3, A:A, 0))
4 6   =indirect("B"&match(C4, A:A, 0))
5 8   =indirect("B"&match(C5, A:A, 0))
 
 
 

回答
投稿日時: 23/12/10 08:37:15
投稿者: WinArrow

A列に「1」〜の数値が表示されていますが、
この数値が経過時間ということならば、
経過時間の「単位」を説明してください。
 

投稿日時: 23/12/10 08:42:58
投稿者: kysn1122

WinArrow様
 
経過時間の単位は[秒]です。

回答
投稿日時: 23/12/10 10:36:06
投稿者: hatena
投稿者のウェブサイトに移動

Microsoft 365とのことなので、XLOOKUPを使えばどうでしょう。
 
C2セル

=SEQUENCE(MAX(A:A)/2,,2,2)

D2セル
=XLOOKUP(C2#,A2:A20,B2:B20,"")

 
と2セルのみ式を設定すればスピルします。

回答
投稿日時: 23/12/10 10:36:50
投稿者: WinArrow

>なんかSQLみたいなことで一瞬に抽出できないかな
 
フィルタ関数
フィルタオプション
が使えます。
 
 
フィルタ関数については、私の環境ではしようできないので
フィルタオプション
を紹介します。
 
検索用データを作成します。

セルD1:経過時間
セルD2:=(ROW(A1)-1)*5
下へ必要なだけオートフィル
 
操作
元データセル範囲にカーソルを置き
「データ」タブの「詳細設定」をクリック
ダイアログ
「指定下した範囲」クリック
「リスト範囲」確認・・・違っていたら選択しなおし
「検索条件範囲」D1〜Dxxを選択
「抽出範囲」:セルG1:H1
「OK」
 
 
 
 
 
 
 
 

回答
投稿日時: 23/12/10 10:44:18
投稿者: WinArrow

↑のレスで「フィルタ関数」がツ会えます
と書きましたが、環境がないので、検証できません。
従って、この個所は、無視してください。

回答
投稿日時: 23/12/10 10:53:53
投稿者: hatena
投稿者のウェブサイトに移動

FILTER関数でもいけますね。
 
C2

=SEQUENCE(MAX(A:A)/2,,2,2)

D2
=FILTER(B2:B20000,MOD(A2:A20000,2)=0)

 
私の環境で2万行で試してしみましたが一瞬で表示されました。

回答
投稿日時: 23/12/10 12:14:15
投稿者: WinArrow

補足
  
フィルタオプションの紹介は、5秒毎に抽出する指定です。
引用:
 
セルD2:=(ROW(A1)-1)*5
 
最後の「5」が指定値です。
ここを変数化(特定セル)すれば、1ヶ所変更するだけで、フレキシブルに使うことができます。

投稿日時: 23/12/10 18:11:26
投稿者: kysn1122

hatena様、WinArrow様
 
ご助言により解決しました。ありがとうございました。
spillと言う便利なものがあるのですね。これならVBAを使わずとも簡単なSQL問題なら解けそうですね。
本当にありがとうございました。