
Excel VBAにておよそ5万点のデータをFFTする方法についての質問をさせてください。
いつもはあるソフトを用いて実験データのFFTを行っているのですが、作業効率を改善したいと考えExcel VBAにてFFTをしたいと考えています。
私はC言語を少しですが学習したことがあるので、FFTWのようなFFT を実装したフリーソフトウェアが存在しているのを知っています。
時間節約のためExcel VBAにてFFTのコードを位置から書くのではなく、FFTWのアルゴリズムでExcel VBAで利用できるプログラムを使いたいと考えています。
この場合、自分でFFTWのコードを見ながらExcel VBA用にコードを書きかえるしか手はないのでしょうか。私はC言語もExcel VBAも未熟であるため、この作業を行うことができそうにありません、、、
Excel VBAで利用することのできるFFTのコードはあるのでしょうか。
なお、FFTするためのデータ点数は約5万点、多いと10万点ほどで、データ点数が2の累乗に限定しないものを使いたいと考えています。
No.4ベストアンサー
- 回答日時:
今晩は。
ちょっとお節介かもしれませんが、大量のデータの処理をこれからもなされるのでしたら、No.3の回答と重なるところもありますが、
1) scilab, Octave, Rなどの科学計算に特化したソフトウエアの中からを1つ
2) Ruby, Python, Perlなどのテキスト処理と科学計算も可能なプログラム言語の中から1つ
を習得されることをお勧めします。
前者は、Excelに読み込める程度に整形されているのでしたら直接読むことができますし、行列計算やグラフ作成、統計計算などが簡単にできます。(PDFなどのファイルにグラフを直接書けます、また計算やグラフはかなり高速です)
http://hotic.blog129.fc2.com/blog-entry-10.html
http://cse.naro.affrc.go.jp/takezawa/r-tips/r/40 …
1、2行のプログラムで読み込むことができます。
後者はというと、テキストデータから必要の部分を切り出したり、基本的な計算をしたりするのに使えます。
最近では行列計算ライブラリやGSLやFFTなどのC言語で書かれたライブラリを直接使うライブラリが提供されていますので、ほとんどの場合は2)だけ処理が可能です。行列計算ライブラリは結構強力で計算速度もかなりでます。最近回答したものですが、
http://oshiete1.nifty.com/qa7525007.html
のNo.7に100万個の128次元ベクトルの中から、特定の点にもっとも近いものを選び出すというプログラムを掲載していますが、計算部分は実質2行で2秒で結果を出してくれます。後でC言語で書き直して0.2秒と速くなりましたが、プログラムを書くエネルギーを比べるとCで書くのはとても引き合いませんでした。
Octave→scilab→Rと使うプログラムを変えてきましたが、初めてだったらscilabがとっつきやすいように思います。
私自身は最近ではruby+Rを直接呼び出すライブラリ+行列計算ライブラリを使っています。多量のテキストの中からデータ部分を取り出す必要が有るので基本的にはRubyでデータ処理をし、多変量解析やFFTなどの高度な計算やグラフはRを直接呼び出して使う方法をとっています。
回答が遅くなり大変申し訳ありませんでした。
頂いたアドバイス大変参考になりました。
Scilabについて勉強したいと考えております。
本当にありがとうございました。
No.3
- 回答日時:
(1)実験データをテキスト出力
(2) (1)テキストFFTを計算し、結果をCSV形式で出力
(3) (2)をExcelで清書
とはできませんか?
多分、VBAにFFTW移植するより、プログラムが早く作れて処理も速いと思いますよ。
(2)には
・#1にあるような、scilab等の数値処理ソフト(他に、MATLAB,FreeMAT,R)
・Perl,Ruby,Python等のスクリプト言語+FFTモジュール。例えば、PerlにはMath::FFTWがあります。
・C言語でFFTW
等があります。
ついでに、gnuplot等でグラフにして、LaTeX等でレポート作成とかすれば、Excel無しで全自動にできるかもしれません。
ご回答ありがとうございました。
たしかにその通りだと思います。
もともと効率化をするためにすべてExcel内でやってしまいたいと考えていましたが、それが困難ならばNo.3さんのアドバイスの通りに、例えばC言語ですべて処理してしまうのが時間的に効率的ですね。
私の場合はCを使用した経験があるため、Cで作ってみます。
ありがとうございました。
No.2
- 回答日時:
「VBA FFT」で検索するとたくさん出てきますけど。
・高速フーリエ変換 Excel VBA用FFTプログラム
http://tsuyu.cocolog-nifty.com/blog/2007/03/publ …
ですとか
どうしてもそのC言語プログラムと同じ動作にしたいのであれば、
おっしゃるとおり自分でコードを書き換えるしかないと思います。
ご回答ありがとうございます。
私も簡単にですが[Excel VBA FFT]と検索して、使ってみましたが計算速度が遅かったり2の累乗のデータ点しか対応していなかったりと、不都合が多かったため質問させていただきました。
引き続き、Excel VBAで使える実用的なコードを探してみます。
(もし可能であれば自分で作成します。)
ありがとうございました。
No.1
- 回答日時:
私なら、Scilab (freeのMatlabクローン)を使います。
プログラミング言語が何であれ、FFTのコードを自分で書いてデバッグするなんて嫌ですから。
Scilab公式サイト(ダウンロードはこちらから)
http://www.scilab.org/
使い方
http://www.oishi.info.waseda.ac.jp/~oishi/sir/no …
Scilabのfft関数(実行用のコード例あり)
http://help.scilab.org/docs/5.3.3/ja_JP/fft.html
回答ありがとうございました!
Scilabというものがあるのですか。
今度時間がある時に使ってみたいと思います。
情報ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 物理学 フーリエ級数展開をExcelのFFTでシミュレートする 5 2023/07/03 22:02
- Access(アクセス) accessデータを指定したExcel、そして指定したセルへエクスポートするaccess VBAコー 2 2023/05/17 17:02
- Excel(エクセル) VBAで複数のExcelを1つのExcelにまとめる 1 2022/09/04 11:08
- Visual Basic(VBA) Excel ファイルを指定し、指定されたファイル内にシートを統合するVBA 8 2023/07/10 10:09
- Excel(エクセル) エクセル・スプレッドシートで、一定数を超えたらゼロから再累計する方法 8 2022/05/28 03:52
- PostgreSQL ポストグレにあるExcelファイルを開くには 1 2022/12/13 18:07
- Visual Basic(VBA) VBAでArrayListを使う為の「mscorlib.tlb」の参照設定について 3 2022/03/23 19:45
- Visual Basic(VBA) VBAコードを張り付け後のエクセルの進め方 2 2023/02/07 18:24
- Visual Basic(VBA) Outlook VBAについて 1 2023/07/10 12:41
- Excel(エクセル) マクロVBA別Excelブックにデータ転記 2 2022/07/10 23:35
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
モジュロ
-
65536は2の何乗なのでしょうか?
-
排他的論理和 BCC(水平パリテ...
-
バッチファイルでウインドウを...
-
変化させるセルが変化しない
-
CとFORTRANの計算速度はどちら...
-
2進アルゴリズムの時間計算量
-
困ってます!数学の公式を用い...
-
連立方程式が解ける条件とは
-
最適円順列を求めるアルゴリズ...
-
y=(x^2 +3x+1)^4を微分の定義を...
-
matlabでの長時間の計算について
-
ファミリーベーシックのPOKE&H...
-
趣味で「乗換案内」みたいなソ...
-
DLL(VC++で作った)で稼動中の...
-
SAP社 会計ソフト R/3の固定資...
-
VBAで一時的にオーバーフローを...
-
CRCについて教えてください
-
VBAで再計算をしないようにした...
-
なぜオーバーフローになるので...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
65536は2の何乗なのでしょうか?
-
VBAの再計算が反映されない件に...
-
排他的論理和 BCC(水平パリテ...
-
EXCELなどで「返す」という表現
-
バッチファイルでウインドウを...
-
エクセルで特定のセルのみを任...
-
matlabで計算終了
-
モジュラス103の計算とは何でし...
-
変化させるセルが変化しない
-
数値計算の高速化 (cos, sin, exp)
-
CとFORTRANの計算速度はどちら...
-
モジュロ
-
スレッド処理からダイアログを...
-
時間(ミリ秒を含む)の引き算
-
VB6で正確なミリ秒を計測したい...
-
60進数の四則計算
-
PHPとJavaでSHA256の結果を同じ...
-
C言語についてです。 再帰を使...
-
なぜオーバーフローになるので...
-
VBA入力フォームで労働時間の計...
おすすめ情報