ここから質問投稿すると、最大4000ポイント当たる!!!! >>

設定時間ごとに10個の計測器から同時にRS232Cを経由してパソコンの
EXCELに計測データを取込みデータ収集したいと考えています。
PC環境はWINDOWS XPを使用しています。
10個のデータを通信ソフト(ハイパーターミナル以外でも可)を経由して
EXCELに取込むソフトがありましたら教えてください。
できればEXCEL VBAでソフトを作成したいのですが、叩き台と
なるソースプログラムをお持ちでしたらこれを改造すればいいという
指摘がありがたいです。
宜しくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

RS232C入力でキーボードエミュレーションを行うフリーソフトvComkeyを考えてみてはいかがでしょうか?


EXCELのデータ入力したいセルにカーソルを合せておくと、RS232Cからの入力データがそこに入ってくるので、プログラミング不要でデータ取込みに使えます。

参考URL:http://www.vector.co.jp/soft/win95/hardware/se41 …
    • good
    • 0

> EXCELに取込むソフトがありましたら教えてください。



# Excel のバージョンによっては使えるのかどうかわかりませんが

232エクセルロガー
http://www.c2d2.co.jp/products/exlogger/exlogger …

ベクターにもあります。

232エクセルロガー(Windows95/98/Me / ハードウェア)
http://www.vector.co.jp/soft/win95/hardware/se21 …

> VBAでソフトを作成したいのですが、叩き台となるソースプログラム

参考になりそうなサイトであれば、次のサイトをご覧頂けばよろしいかと思われます。

<目次>Visual Basicシリアル通信プログラム開発編
http://spectrum123.at.infoseek.co.jp/vb/vb_menu. …

VBA の場合は API で記述されているコードが流用可能かと思われます。
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qエクセル VBA でのCOMポート認識

エクセルのVBAを使用してあるアプリを作成しています。そのアプリはシリアルポートを使用してある機器と接続する事で実現できます。
そこで質問ですが、当該PCが認識しているCOMポートをVBAのSELECT BOXに表示したいのですがどうやれば(どのような関数?)を使用して実装COMポートを認識するのでしょうか?
もちろん、USB<--->シリアルケーブルを使用した場合もCOMポートだと認識しなければなりません。
よろしくお願いいたします。

Aベストアンサー

こんにちは。

Windowsのプログラム(VBA含む)から、COMポートを扱う場合は、WindowsAPI を使用すれば可能
だと思います。

COMポートの実装チェックには、WindowsAPI の「CreateFile」関数でCOMポートのオープンを実行
して、その関数の戻り値がエラーかどうかを見れば判断できると思います。
ただし、COMポートが実装されていてもエラーになるケース(既に使用中、使用不可に設定されて
いるなど)がありますので、その場合はエラーコードを取得してその値で「実装/非実装」を判断しな
いといけないと思います。

以下に、VBA から WindowsAPI (COMポート制御関連を含む)を利用するに当たって、参考になり
そうなサイトを上げてみました。宜しければ覗いてみて下さい。

■参考サイト
注)リンク切れの際は御容赦下さい。

1)VBAでWindowsAPIを使用してシリアル通信を行う方法

◎WindowsAPI講座
http://www.serpress.co.jp/winapi/
・このページよりリンクされている下記項目「シリアル通信(1)~(4)」のページでVBAから通信関連の
 APIを使用する方法が書かれています。
 NO.12 シリアル通信(1) ←必要なWindowAPI定義の説明
 NO.13 シリアル通信(2) ←シリアルポートのオープンとクローズを説明
 NO.14 シリアル通信(3) ←シリアルポートの通信プロトコル、送受信バッファ、タイムアウトの設定
 NO.15 シリアル通信(4) ←シリアルポートの送受信方法を説明
・今回の場合は、
   シリアルポートのオープン → 存在有無チェック → シリアルポートのクローズ
 までを行えば良いようなので、シリアル通信(1)~(2) までを参照すれば良いと思います。

2)CreateFile関数でCOM10以上のCOMポートを使用する際の注意点

◎CreateFile関数(Win32API)でCOM10以上を使う場合の注意点
http://www.aofactory.net/log/eid328.html
・ここで、API関数「CreateFile」で指定するCOMポート名(COM1、COM2など)に「COM10」以上を使用
 する場合の問題点および対策が書かれています。
・指定するCOMポートのデバイス名の頭に "\\.\" を付ければ良いようです。
   VBAでの指定例: "COM10" の場合は、 "\\.\COM10" とする。

3)WindowsAPI利用でCOMポートの存在有無をチェックする方法

◎COMポートが存在するかどうかを調べるには? - OKWaveの過去ログより
http://okwave.jp/qa4033242.html
・ここで、API関数「CreateFile」が失敗した際に、同じくAPI関数「GetLastError」でエラーコードを見て
 COMポートの存在有無を調べる旨が書かれています。
注)ただし、VBAでは「GetLastError」を呼んでもエラーコードが得られない可能性があるので、下記4)
 の方法を採った方が良いようです。

4)VBA から Windows API を利用する方法など

◎Office VBA と Windows API - Microsoft MSDN より
http://msdn.microsoft.com/ja-jp/library/cc326057.aspx
・このページの「エラー情報の取得」の説明で、VBAからWindowsAPIを呼出した際のエラーコードの取得
 方法が書かれています。
・VBAからWindowsAPIのDLLを呼び出した際のエラー情報は、「GetLastError関数」では取得できない
 可能性があるので、VBAの場合は「Errオブジェクト」の「LastDLLErrorプロパティ」でエラーコードを取得
 すれば良いようです。
・今回の場合は、COMポートオープン時のエラーコード取得に、この方法が利用できると思います。

こんにちは。

Windowsのプログラム(VBA含む)から、COMポートを扱う場合は、WindowsAPI を使用すれば可能
だと思います。

COMポートの実装チェックには、WindowsAPI の「CreateFile」関数でCOMポートのオープンを実行
して、その関数の戻り値がエラーかどうかを見れば判断できると思います。
ただし、COMポートが実装されていてもエラーになるケース(既に使用中、使用不可に設定されて
いるなど)がありますので、その場合はエラーコードを取得してその値で「実装/非実装」を判断しな
いといけないと...続きを読む

QVBA & easycomm で長時間測定の問題

エクセル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 ' すべてのポートを閉じる

エクセルVBAとフリーソフトeasycommで複数同一機種の測定器からデータを吸い上げてエクセルに張り付けるプログラムを組んでいます。実験で使うので、体裁はどうでも良いですが、1秒おきのデータを1日程度取りたいです。
下記のプログラムを作ったのですが、かなりの頻度でフリーズしてしまいます(汗)
数分の測定なら問題ないのですが・・・
どうすれば長時間安定して動作させられるかご教授ください! よろしくお願いします!

*******************************

For kai = 1 T...続きを読む

Aベストアンサー

エクセルのバージョンが古ければ、行数の制限に引っかかっている可能性はあります。
ファイルに書き出すには、何通りかの方法があります。

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の行をそのように変えればよいだけです。
このように変更して落ちなければ多分エクセルの行数制限に引っかかっているのだと思います。

書かれたデータを、何に、どのように読み込むかはまた、別問題です。

エクセルのバージョンが古ければ、行数の制限に引っかかっている可能性はあります。
ファイルに書き出すには、何通りかの方法があります。

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, d...続きを読む

QエクセルVBAでRS232通信は可能ですか?

VBAでシリアル通信したいのです。
VBでは下の検索結果にあるようにmscommが使えます。
VBAではmscommが使えませんでした。制限があるのでしょうか?
VBAで行う方法をご存知の方教えてください。

http://www.okweb.ne.jp/search.php3?dummy=%83%81%81%5B%83%8B&c=218&kw=mscomm

Aベストアンサー

トランジスタ技術という雑誌があります
過去に何度か取り上げられている記事の中で
木下隆さんの記事があります
下記のURLが参考になると思います

参考URL:http://activecell.cool.ne.jp/easycomm/index.htm

QCOMポート通信をモニターしたい

現在、PCと組み込み系の端末との間でRS-232C通信をさせています。このRS-232C通信のTXとRXのデータのタイミングなどをモニターできるソフトはありませんでしょうか?

現在RS-232C通信をさせているのですが、組み込み系の端末側にはTCP-RS232C通信変換のモジュールを取り付けていて、PC側もTCP-RS232C変換させるソフトを使用しています。


TCP-RS232C通信変換のモジュールはWIZNET社製のWIZ110SRというのを使用しています。

PC側ではTCP-RS232C通信変換ソフトでWIZNET社製のWIZ VSPというソフトを使用して、TCPで受けたデータをRS-232Cに変換して受信プログラムソフトに転送しています。


このPC側の受信ソフトとTCPへ変換する間のCOMポートの通信をモニターできるようなソフトというものはありませんでしょうか?

どうぞ、ご教授頂きますようお願い致します。

Aベストアンサー

PC自体のCOMポート(USB-Serial変換でも)なら、ソフトでどうにかできる場合もあるでしょうが……

ご使用の機器の場合、PCからはネットワーク端末に見える…のではないでしょうか?
ドライバでCOMポートとして見えるのですか?
# 後者ならソフトで何とかできる…かも知れません。

こちらの組み込み系開発ではラインアイ社の機器を使用しています。
http://www.lineeye.co.jp/html/product_le2500.html
http://www.lineeye.co.jp/html/product_le3500.html
などですね。
http://www.lineeye.co.jp/html/product_LE-200PS.html
http://www.lineeye.co.jp/html/product_LE-150PS.html
でも用途によっては十分かも知れません。
# 組み込み開発に使うのであれば1台あった方が何かと便利です。
# それなりに高機能なので…値段も結構しますけどね。

QVisual Basic 2010を使ってRS-232Cとの通信をした

Visual Basic 2010を使ってRS-232Cとの通信をしたい。

現在、機器とPCとの通信のやりとりをするため、機器のマニュアルを見ながら悪戦苦闘しています。

通信のやり取りについては、マニュアルにVB6を使った例が書いてあります。
しかしVB6が手に入らなかったので、Visual Basic2010を現在使っています。

マニュアル(VB6向け)には
・On the Project Menu, click Components to bring up a list of additional controls available in VB6.
・Scroll through the controls and select Microsoft Comm Control 6.0. Select OK. In the toolbar at the left of the screen, the Comm Control will have appeared as a telephone icon.
・Select the Comm control and add it to the form
と書いてあります。

よく分らなかったのですが、上のメニューの「Project」⇒「Add reference」を選び、「COM」の中にあった「Microsoft Comm Control」を選びました。

が、左のツールバーには電話のアイコンは出てきませんでした。

2010の場合、VB6と違って別のやり方をしないといけないのでしょうか?


ご存知の方がいましたら、教えて頂きたいです。よろしくお願いします。

Visual Basic 2010を使ってRS-232Cとの通信をしたい。

現在、機器とPCとの通信のやりとりをするため、機器のマニュアルを見ながら悪戦苦闘しています。

通信のやり取りについては、マニュアルにVB6を使った例が書いてあります。
しかしVB6が手に入らなかったので、Visual Basic2010を現在使っています。

マニュアル(VB6向け)には
・On the Project Menu, click Components to bring up a list of additional controls available in VB6.
・Scroll through the controls and select Microsoft Comm Control 6.0...続きを読む

Aベストアンサー

SerialPortコンポーネントでシリアル通信が可能です

VB6にはMSCommというコンポーネントがあったようですが、.NET2003以降にはありません。
2005からSerialPortコンポーネントが標準でついているはずなのでそちらを使用してはいかがでしょうか?

http://msdn.microsoft.com/ja-jp/library/cc825644.aspx

Qシーケンサにパソコンからアクセスし,エクセルに読み出すソフト

目的は、シーケンサーデータをパソコン(出来ればエクセル)に読み出し、生産量、不良数、停止回数、停止時間等をグラフ化しモニターする事です。(リアルタイムにモニターすることより、1日毎、1ヶ月毎の経時変化のグラフ化が当面の目標です)
下のフリーソフトで、出来そうですが、私には全く解読不能です。どなたか、勉強するための本(Webデータがベター)、サイト等を教えて頂けませんでしょうか?
​http://www.h2.dion.ne.jp/~mineco/index.htm​
スキャン毎のデータを表(Excel)に書き出します。スキャン毎のモニタでPLS.PLFも表示できます。データデバイスのスキャン毎の変化を追跡できます。たまに発生するトラブルにも対応できます。計算リンクによりシーケンサにアクセスしています。ラダーソフト開発時及びメンテナンス時の難解なデバッグに、装置のトラブル対策に,  命令語の動作確認に、ご利用下さい。産業機械の制御技術は著しく進歩しシーケンサのラダーソフトも制御が複雑になった分難解になりなした。
ラダーソフト開発時のデッバッグでGppAccはスキャン毎のデバイスの状態をモニタ、表示(Excel)ができますので
デバイスの瞬間の動きを表、エクセル(Excel)の上で再現できますから容易にデッバッグできます。 
特にデータデバイスの変化の追跡には威力を発揮できます。
シーケンサ技術者の教育、指導の教材として活用できます。
命令語の動作の確認、学習に最適です。
.フリーソフトのデモ版を用意していますお試しください。
連続モニタ、自動停止でトラブル発生時のデータを残せます。デモ版用に実際にモニタしたサンプルデータを添付しました。

サンプルで使用している主な命令
    ENCO  DECO BSFL BSFR ROR RCR ROL RCL FMOV
    FIFW FIFR WAND WOR WXOR WXNR FOR~NEXT MC MCR 
サンプルはフリーソフトです
サンプルの詳細

目的は、シーケンサーデータをパソコン(出来ればエクセル)に読み出し、生産量、不良数、停止回数、停止時間等をグラフ化しモニターする事です。(リアルタイムにモニターすることより、1日毎、1ヶ月毎の経時変化のグラフ化が当面の目標です)
下のフリーソフトで、出来そうですが、私には全く解読不能です。どなたか、勉強するための本(Webデータがベター)、サイト等を教えて頂けませんでしょうか?
​http://www.h2.dion.ne.jp/~mineco/index.htm​
スキャン毎のデータを表(Excel)に書き出します。スキャン...続きを読む

Aベストアンサー

えーと・・・フリーソフトではありませんね

デモンストレーション用のバージョンはフリーですが、シーケンサとの

  通 信 は 行 え ま せ ん

通信を行えるのは製品版(有料)ですね
どうしましょうか


こういったソフトウェアの使い方はソフト毎に異なるのが普通ですので、
仕様のページの最下にあるメールアドレスへ直接問い合わせてみてはいかがでしょう
または他の汎用ロギングソフトを検討するなどしてはいかがでしょうか

QSub ***( ) と Private Sub ***( ) の違い

初歩的な質問で申し訳ありませんが・・・

自分でコードを書いていても、イベントが発生したりした時の処理で、コードのウィンドウで上のドロップダウンリストで選択できる時の処理などは自動的に[Private Sub Command1_Click( )]などと出てくるのでそのまま使っています。自分で別途プロシージャーを作成する時は[Sub ****( )]としています。
ですがその違いを理解しないまま、自分で作成する時は[Private Sub]ではなくて[Sub]を使っています。

Sub ***( ) と Private Sub ***( ) の違いは何なんでしょうか?
どなたか説明頂けませんか?
よろしくお願いします。

Aベストアンサー

「Sub」の部分にカーソルを置いて[F1]を押せばヘルプが起動します。
「指定項目」のところに「Public」と「Private」の説明がありますよ。
省略して「Sub hogehoge()」とした場合は「Public」とみなされます。

Publicは「すべてのモジュールから呼び出せるプロシージャ」ということになります。
Privateとすると「同じモジュールの中からしか呼び出せないプロシージャ」となります。

もしExcelをお持ちでしたらExcelのVBEで標準モジュールを追加し、「Sub Test1()」と「Private Sub Test2()」を作成してみてください。
そしてExcelの[ツール]-[マクロ]-[マクロ(Alt+F8)]でマクロ実行のダイアログを表示させてみるとわかります。
ここには実行できるプロシージャの一覧が表示されますが、Test1は表示されているけれどTest2は表示されません。
Test1はPublicで、Test2はPrivateだからです。

QEXCEL VBA で現在開いているブックのファイル名を取得する方法

EXCEL2003 VBAで業務を簡素化するために、現在開いているブックのファイル名を取得する方法が分かりません。
作業手順をマクロを使って処理していますが、オリジナルのワークブックをファイル名を変えて保存し、以後、このワークブックを読み込んで使用しています。
このときのVBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり、以後の業務に使用できません。
常にファイル名を取得出来るVBAをどなたか、教えて下さい。

Aベストアンサー

>現在開いているブックのファイル名
 ちょっと曖昧な表現かなぁという気もいたしますが、VBAが書いてあるブックのブック名は
ThisWorkbook.Name
で、現在 "アクティブにして" 操作対象になっているブックの名前は
ActiveWorkbook.Name
ですね。

 しかし、
>VBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり
というような文脈からすると、
ThisWorkbook.Name
の方ですかね。

QVBA EasyCommでの送信

文字列を送信する場合は ec.Ascii = "mojiretsu" を送ればよいというのはわかるのですが、例えばキーの'Ctrl'を押すのと同等の命令送信をしたいのですが、この場合どのようにコードを書けばよいか教えていただきたいです。できれば、Altの場合なども教えていただけると助かります。

Aベストアンサー

http://okwave.jp/answer/new?qid=7507694
こちらを参考にすれば
ec.Binary = 17 'Ctrlキーのコード“17”を送信
ec.Binary = 18 'Altキーのコード“18”を送信
かな?

Qコンポーネント`MSCOMM32.cox'、または

全部ではないのですが、アプリケーションを起動すると、
「コンポーネント`MSCOMM32.cox'、またはその依存関係のひとつが適切に登録されていません。
ファイルが依存しないか、あるいは不正です。」
Visual Basic6.0(SP3)でプログラムし、ファイルメニューから「**.exeの作成」したファイルを、
VBのインストールされていないPCに「**.exe」のみコピペしたら上記のメッセージがでました。。。
半年前に製作したプログラムはこのやり方でOKだったんですが。。。

申し訳ありませんが、どなたかご教授お願いします。
(先ほどカテゴリを間違えて質問しましたので、再投稿します)

Aベストアンサー

>VBのインストールされていないPCに「**.exe」のみコピペしたらメッセージ


OSはVista、Windows 7ですか?
EXE ファイルをコピーしただけでは、レジストリに OCX が登録されていないためエラーになります。
Regsvr32 コマンドで .OCX の登録をいったん解除し、登録しなおします。
「スタート」「すべてのプログラム」「アクセサリ」「コマンドプロンプト」右クリック「管理者として実行」
regsvr32 /u mscomctl.ocx  enter
regsvr32 mscomctl.ocx enter

MSCOMM32.coxファイルに対して実行

参考URL

>半年前に製作したプログラムはこのやり方でOKだった

制限ユーザーでなく、標準ユーザーか、Administrator権限のあるユーザーの可能性

参考URL:http://pasofaq.jp/development/visualbasic/error339.htm


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング