「たくさんデータを集計したけど多すぎるから間引いて減らしたい。」
「グラフの見栄えが悪いので、他のサンプルとデータ数をそろえたい。」
この記事ではこんな悩みを解決するために、エクセルシート上にまとめられた時系列データを指定した行数ごとに一瞬で間引く方法をご紹介します。
ある行数ごとに間引くだけでなく、間引く際のデータ開始点と終点まで指定できるようにしていますので、さまざまな状況に対応できるものになっています。
一度作っておくと非常に便利ですので、ぜひあなたも一緒に作ってみましょう。
それではさっそくやっていきます!
はじめに
まず始めに最終的にどんなエクセルシートが出来上がるのかをご紹介しておきます。
◆この記事を読むことで作成できるエクセルシート
具体的に解説しておくと、
◆A列には集計したデータの時刻が入った状態です。
◆B列にはA列の時刻でのデータが入力されています。
◆A,B列のデータをH列の情報をもとに間引き、その結果がE,F列に記載されます。
※今回は時系列のデータを扱うことを想定しています。
そのため、A列が数字の小さい順にならんでいることを前提に作成しています。
あなたのやりたいことと一致していれば、ぜひ続きをご覧ください。
それではこのシートの作成手順に移っていきましょう。
手順①エクセルシートを整える
まずは以下の画像を参考にエクセルシートを整えてみてください。
もし、この状態から少しでもずれてしまった場合は、あとで紹介するVBAコードを書き換える必要がありますのでご注意ください。
自分でコードを書き換える自信のない人は、上の画像と全くおなじものを作成しておきましょう。
手順②VBAコードを記述する
準備が整ったらVBAコードを記入していきましょう。
※「書き方がわからない!」という方は以下の記事を参考にしてみてください。
VBAを記述する準備が整ったら、以下のコードをコピペして張り付けましょう。
先ほども説明したように、事前に整えておいたエクセルシートを自分なりにアレンジしている方は必要に応じてコードを書き換えましょう。
◆データ間引き実行VBAコード
Sub data_culling()
Range(Cells(2, 5), Cells(10000, 6)).Select
Selection.ClearContents
'変数の型を宣言
Dim start_X As Single
Dim end_X As Single
Dim delta_X As Integer
Dim i, j As Integer
start_X = Cells(2, 8)
end_X = Cells(4, 8)
delta_X = Cells(6, 8)
i = 0
Do Until Cells(2 + i, 1) >= start_X
i = i + 1
Loop
j = 0
Do
Cells(2 + j, 5) = Cells(2 + i, 1)
Cells(2 + j, 6) = Cells(2 + i, 2)
j = j + 1
i = i + delta_X
Loop Until Cells(2 + i - delta_X, 1) >= end_X Or Cells(2 + i, 1) = ""
End Sub
手順③実行ボタンの作成
ここは必須ではありませんが、頻繁にデータ間引き作業を行う人は、ボタンを作っておいた方が便利です。
以下の記事を参考に先ほど作成したVBAコードの実行ボタンを作成してみてください。
私は以下のようなボタンを作成しました。
ここまでで、データ間引きマクロの作成は完了です。
最後に実際に動かしてみましょう。
実行結果の確認
実行する前に、まずはどんな形でデータを間引くかを入力する必要があります。
まずは間引きの開始点を 0 終点を 14 間引き間隔を10 としています。
※今回準備したデータは画面の都合上、十数行しか記載できておりませんが、実際は非常に大きな時刻までデータが連なっています。
この状態で、先ほど作成したボタンを押してみましょう。
すると以下のようにデータを10個ごとに間引いてくれています。
(Time=0,1のデータを見比べてみてください。)
◆実行結果例①
もう少しサンプルをお見せしましょう。
間引きの開始点を 0.5 終点を 1.5 間引き間隔を3 としてみます。
すると以下のような結果となりました。
◆実行結果例②
きちんと指定した間隔でデータを間引いてくれていますね。
無事完成していることが確認できたと思います。
※このマクロはH2セルに記載されている数値を上回ったところからサンプリングが始まり、H4セルの数値を上回るとことまで続きます。
おわりに
というわけで今回は大量の時系列データを指定間隔で間引く方法をご紹介しました。
このエクセルシートを作成しておておけば、日々の業務を効率化できるはずです。
ぜひあなたもトライしてみてください。
このように、このブログでは、エクセル(VBA)を中心に、様々な業務効率化スキルを紹介しています。
■業務の生産性を上げたい。
■早く帰って子供と遊びたい。
こんな人はぜひ他の記事も読んでみてください。
また、VBAを使ってこんなことがしたいんだけど、やり方がわからない、という悩みを抱えているかたは、お気軽にコメント欄から質問してください。
私にわかる範囲であればご協力いたしますので。(もちろん無料です。)
最後に・・・
この記事が役に立ったという方はぜひ応援よろしくお願いします。
↓ 応援ボタン
Twitterもやっていますので、興味があれば覗いてみてください。
それではまた!!
コメント