
エクセルVBAとフリーソフトeasycommで複数同一機種の測定器からデータを吸い上げてエクセルに張り付けるプログラムを組んでいます。実験で使うので、体裁はどうでも良いですが、1秒おきのデータを1日程度取りたいです。
下記のプログラムを作ったのですが、かなりの頻度でフリーズしてしまいます(汗)
数分の測定なら問題ないのですが・・・
どうすれば長時間安定して動作させられるかご教授ください! よろしくお願いします!
*******************************
For kai = 1 To kaisuu '測定回数がkaisuuに入ります
For dai = 1 To daisuu '測定台数がdaisuuに入ります
KOMU = KOMU1 + dai - 1 'KOMU1は1台目のCOMポートの番号で、それ以降はCOMは連続して接続されています
Application.EnableCancelKey = xlErrorHandler
On Error GoTo Esc_EXIT ' ESCキーが押されるまで繰り返す処理を記述
ec.COMn = KOMU ' COMを開く
ec.Setting = "4800,e,7,2" ' Baud Rate 4800 7bit 2stop Even
ec.HandShaking = ec.HANDSHAKEs.No ' ハンドシェイクなし
ec.Delimiter = ec.DELIMs.CrLf ' デリミタにCr/Lfを指定
ec.AsciiLine = "&Q/F" ' &Q/F というコマンドを測定器に送信
Q_F = ec.AsciiLine '受信内容を Q_F に格納
Dim EQU_WAKE As Variant
Dim EQU_WAKE2 As Variant
Dim TEN_WAKE As Variant
' ****************受信データの一部分だけを抜き出す*********************
EQU_WAKE = Split(Q_F, "=") 'Q_F を=で分けたものをEQU_WAKEとする
EQU_WAKE2 = EQU_WAKE(1) 'EQU_WAKE の 2番目の文字列を EQU_WAKE2 とする
TEN_WAKE = Split(EQU_WAKE2, ",") 'EQU_WAKE2 を , で分けた文字列を TEN_WAKE とする
'*********************************************************************
Cells(kai + 6, dai + 2) = TEN_WAKE(0) ' 欲しいデータを縦軸に回数、横軸に台数にわけて張り付けていく
ec.COMn = 0 ' すべてのポートを閉じる
ec.WAITmS = 1000 '測定間隔を1秒にする
Next
Next
Esc_EXIT: '押された後の処理
ec.COMn = 0 ' すべてのポートを閉じる
No.2ベストアンサー
- 回答日時:
エクセルのバージョンが古ければ、行数の制限に引っかかっている可能性はあります。
ファイルに書き出すには、何通りかの方法があります。
VBAを起動させ、ツールの参照設定で、
microsoft scripting runtime にチェックをいれ、
最初(ループの外)に
Dim fso As New FileSystemObject
Dim ts As TextStream
Set ts = fso.OpenTextFile("C:\Documents and Settings\All Users\デスクトップ\test.txt", ForAppending, True)
などと書いてておき、(ダブルクオート内はパス付きファイル名)
Cells(kai + 6, dai + 2) = TEN_WAKE(0) ' 欲しいデータを縦軸に回数、横軸に台数にわけて張り付けていく
の代わりに
ts.WriteLine kai & vbtab & dai & vbtab & TEN_WAKE(0)
最後に(ループの外で)
ts.close
Set ts = Nothing
とでもすれば、タブ区切りでデータを書いていくことができます。
CSV区切りなどにしたければ、ts.writelineの行をそのように変えればよいだけです。
このように変更して落ちなければ多分エクセルの行数制限に引っかかっているのだと思います。
書かれたデータを、何に、どのように読み込むかはまた、別問題です。
No.1
- 回答日時:
>かなりの頻度でフリーズしてしまいます
うまくいくときもあるが、ほとんどの場合エラーで落ちるのではなく、フリーズ状態になるということでしょうか?
エクセルのバージョンは2007以降ですか?
OSはなんですか? フリーズするときのメモリ使用率はどの程度ですか?
アドバイスとしては、データを一旦テキストファイルなどにに書き出しその後ファイルが出来上がってから、エクセルで処理されると良いと思います。
この回答への補足
早速の回答、有難うございます!
うまくいっても、4時間ほど(15000回程度)でフリーズします。ダメな時は1000回くらいでフリーズ(砂時計表示で、エクセル自身も終わらせれられなくなります)します。
エクセルは97-2300ブックで保存しています。OSはXPです。
メモリー使用率は、当方、PCに詳しくないので分かりません・・・
<アドバイスとしては、データを一旦テキストファイルなどにに書き出しその後ファイルが出来上がってから、エクセルで処理されると良いと思います
ですが、どうやってVBAでテキストファイルに書き出すのでしょうか?ご指導よろしくお願いします!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(Microsoft Office) マクロVBAについて 1 2022/09/06 18:12
- Visual Basic(VBA) VBAが止まります。 2 2022/09/02 14:02
- Visual Basic(VBA) vba 重複データ合算 5 2023/07/05 18:55
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- Visual Basic(VBA) 貼り付けた値が消えていく 以下はソースファイルの2番目のシートのB6から最終行を取得 ターゲットファ 2 2023/07/27 12:23
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) 複数シートの複数列に入力されているデータを重複なしで抽出するVBAを作りたいです。 9 2022/06/17 10:33
- Visual Basic(VBA) ①ExcelVBAでカレンダーを作り、別のユザーフォームで日付を入力したいのですがエラーになります。 1 2023/02/17 18:39
- Visual Basic(VBA) 改行ごとに行を追加し、数量を分割 4 2023/07/11 16:39
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
<VB>String→Object
-
教えて下さい
-
アクセス2000で画像データ...
-
多量のSUMIF式を軽くしたい
-
GETとPOSTの違い
-
2,3度連続して入る同データ...
-
C# ソケット通信でデータ受信時...
-
配列でデータが入っている要素...
-
二分探索の平均探索回数
-
メモ帳(テキストデータ)をExc...
-
ユーザーフォームのテキストボ...
-
PIC12F675 キャリブレーション...
-
可変行における変動するコピー...
-
Excellで並べ替えについて(記号...
-
MSCommを用いたRS-232-Cデータ転送
-
[C言語] コメント文字列を無視...
-
エクセルで2つの時系列のデー...
-
VisualC++でRS232C経由のデータ...
-
LoadPictureしたイメージデータ...
-
クッキーの値のエンコード/デコ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
教えて下さい
-
【エクセル】測定時間がバラバ...
-
多量のSUMIF式を軽くしたい
-
配列でデータが入っている要素...
-
メモ帳(テキストデータ)をExc...
-
ユーザーフォームのテキストボ...
-
特定のデータの抽出方法を教え...
-
二分探索の平均探索回数
-
EXCELVBAでSQLserverからデータ...
-
Accessで該当データにフラグを...
-
VBA 空白セルを削除ではない方...
-
この行は既に別のテーブルに属...
-
Excel VBAでのオートフィルター...
-
[C言語] コメント文字列を無視...
-
エクセルで2つの時系列のデー...
-
アクセス2000で画像データ...
-
CString型の文字列連結について
-
カンマからスラッシュに
-
VBにおいてフォーム間の変数の...
-
<VB>String→Object
おすすめ情報