Excel (VBA)

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

 
(Windows 10 Pro : Excel 2019)
他APPからExcelへのデータ受け取りについて
投稿日時: 22/06/15 12:13:33
投稿者: mashimo

工場設備からデータを取得する.NETのアプリ(以降、収集APP)とそのデータを処理するExcelを準備し
1.Excel(VBA)から収集APPを起動しデータ収集条件(期間など)を渡す
2.収取APPが設備からデータを収集
3.Excel(VBA)が収集APPのデータを取り込んで処理
といったことを行いたいです。
 
現在は
収集APPを手動で起動し、データ収集、CSVファイルを作成
ExcelでCSVファイルを開いて処理
といったことを繰り返しています。
上記を自動化することは可能ですが、できればCSVファイルを介さないで、データの授受を行いたいのですが可能でしょうか?(クリップボード以外で)
ちなみにExcelと収集APPは同一PC上で起動させます。
なにか、参考になるものがあれば教えてください。
 
よろしくお願いします

回答
投稿日時: 22/06/15 14:44:34
投稿者: sk

引用:
工場設備からデータを取得する.NETのアプリ(以降、収集APP)

それを開発したのはどなたなのでしょうか。
 
引用:
1.Excel(VBA)から収集APPを起動しデータ収集条件(期間など)を渡す
2.収取APPが設備からデータを収集

その収集APPは、オートメーションをサポートしているのでしょうか。
 
引用:
3.Excel(VBA)が収集APPのデータを取り込んで処理

引用:
現在は
収集APPを手動で起動し、データ収集、CSVファイルを作成
ExcelでCSVファイルを開いて処理

ここでおっしゃっている「処理」の具体的な内容が不明ですが、
要は「収集APPには実装されてない二次加工機能、集計機能を
Excel 側で自動実行できるようにしたい」という話なのでしょうか。

投稿日時: 22/06/15 16:43:24
投稿者: mashimo

ご回答ありがとうございます
 
少し迷わせるような表現があったかもしれません
現在使用している収集APPは業者が作ったもので、条件を入力すると該当するデータを抽出しCSVへ落とすだけのもので、他とは連携していません。
 
これからExcelと連携できそうなAPPをVB.NET等を使って作成しようとしています。
 
「ここでおっしゃっている「処理」の具体的な内容が不明ですが、
要は「収集APPには実装されてない二次加工機能、集計機能を
Excel 側で自動実行できるようにしたい」という話なのでしょうか。」
はい、そのとおりです。
 

回答
投稿日時: 22/06/15 17:38:13
投稿者: sk

引用:
現在使用している収集APPは業者が作ったもの

引用:
できればCSVファイルを介さないで、データの授受を行いたいのですが
可能でしょうか?(クリップボード以外で)

「任意の条件に該当するデータを抽出する」操作が
そのアプリでしか出来ないのであれば、原則的には
現在の方式を採用するしかないでしょう。
 
引用:
工場設備からデータを取得する.NETのアプリ

引用:
条件を入力すると該当するデータを抽出
CSVへ落とすだけのもので、他とは連携していません

あとは、それらのデータを具体的にどこから参照しているのか
それらのデータにアクセスする権限を有しているのかどうか次第。

回答
投稿日時: 22/06/16 11:27:07
投稿者: Suzu

引用:
収集APPを手動で起動し、データ収集、CSVファイルを作成
ExcelでCSVファイルを開いて処理
といったことを繰り返しています。
上記を自動化することは可能ですが、できればCSVファイルを介さないで、データの授受を行いたいのですが可能でしょうか?(クリップボード以外で)

 
「CSV」も「クリップボード 」も介さない と言うことは、
その APP側で オートメーション等で外部から操作させる機能を有している必要がありますよね。
まずは、それが可能か 確認が必要でしょう。
 
 
以下 推測ですが
業者 が 一から作っているのであれば、仕様書にない 機能 をわざわざ作る事は無いので
オートメーション機能 は 期待できないと思います。
 
CSVや、クリップボードを経由するにしても、コマンドベースでの操作機能がないと難しい。
となると APPを経由せず、自前で 接続 取得まで行う 事になると思います。
 
実現可能な場合の可能性としては
・接続先のデバイスが 設定-デバイス にある
・接続先のデバイスに、IPアドレスが振ってあり、ネットワーク経由で接続 操作ができる機能を有している
  (TELNET、SSHなど)
・ APP 以外に 接続の為の APPがあり、その APPを外部操作できる
  (Windows管理ツール ODBCデータソース に記録される接続も含む)
あたりでしょうか。

投稿日時: 22/06/16 12:33:29
投稿者: mashimo

皆さん
回答有り難うございます。
 
今は業者が作成したアプリを使用していますが、これは破棄して設備からのデータ取得は自作します。
(設備仕様が変わったのですが、すでに業者が撤退しているため)
 
再製作にあたり、アプリは.NETで作成しようと考えていますが、CSVファイルやクリップボードを介さずにVBAとのデータ授受ができないかと考えた次第です。
 
実際にはVBAが主体で、そこからAPPに条件渡し、APPがその条件に従ってデータを収集、VBAへ返すというながれを作りたいのです。
 
いろいろと調べてみると、.NETアプリ同士であればいろいろと技術がありそうですが、片方がVBAだとなかなか難しそうですね。

回答
投稿日時: 22/06/16 14:57:41
投稿者: Suzu

mashimo さんの引用:
今は業者が作成したアプリを使用していますが、これは破棄して設備からのデータ取得は自作します。

 
接続から、.NETで コーディングを行うのであれば
主体を VBA ではなく、.NETとし、.NET から Excel を操作する方が簡単ですよ。

回答
投稿日時: 22/06/16 15:30:40
投稿者: sk

引用:
今は業者が作成したアプリを使用していますが、
これは破棄して設備からのデータ取得は自作します。
(設備仕様が変わったのですが、すでに業者が撤退しているため)

なら、「データの取得」から「 Excel ワークシートへの出力」までの
一連の処理を 1 つのプログラムで実行するようになさればよろしいのではないかと。
 
.NET を主体とするなら Suzu さんが提案されたような形になるでしょうし、
全ての処理を VBA のマクロで賄えるなら .NET でアプリを自作する必要はないはず。
(場合によっては VBA すら必要なく、PowerQuery で完結できる可能性も考えられる)
 
https://docs.microsoft.com/ja-jp/dotnet/csharp/programming-guide/interop/walkthrough-office-programming
https://docs.microsoft.com/ja-jp/previous-versions/office/troubleshoot/office-developer/automate-excel-from-visual-basic-net
https://docs.microsoft.com/ja-jp/previous-versions/office/troubleshoot/office-developer/automate-excel-from-visual-c

投稿日時: 22/06/16 20:09:00
投稿者: mashimo

皆さん
ご回答ありがとうございます。
いろいろな処理の都合でVBAをやめて.NETだけにすることはできないのですが、みなさんが言うように考え方を変えて.NETアプリからExcel側にデータを書き込むことにすれば、簡単に実現できそうです。
 
ユーザにはExcelだけで操作をしてもらうつもりでしたが、ExcelからAPPを起動、APPで条件を入力してデータ収集、APPからExcelにデータを書き込むするようにすれば、あまりユーザの操作方法を今までと変えずに実現できそうです。
ありがとうございました。

回答
投稿日時: 22/06/17 09:06:25
投稿者: Suzu

mashimo さんの引用:
ユーザにはExcelだけで操作をしてもらうつもりでしたが、ExcelからAPPを起動、APPで条件を入力してデータ収集、APPからExcelにデータを書き込むするようにすれば、あまりユーザの操作方法を今までと変えずに実現できそうです。

 
ん〜〜どうでしょう。
上記の説明の流れだと
 
1. Excel起動 → APP起動
2. APP条件入力 → 設備データ収集 → Excel 書き込み
 
1 の Excel から APP起動 この段階で、APPの起動を行い その後の 2 の条件入力が行われますから
Excel から APP起動をオートメーションで起動し、終了まで制御待ちの状態にするのは好ましくありません。
となると、起動呼び出しだけを行う事になります。
 
とすると、2 の Excel の書き込み先は、1 で起動した Excel ではなく別のプロセスExcelを起動し
新規ブックへの書き込みとなろうかと思います。
 
内容から察すると、接続部分は コンポーネント として用意されていて
それを .NETから使用する様に 見受けられます。
 
であるなら、sk さんがおっしゃっている様に、.NET を使わず
Execl の VBA で そのコンポーネントを利用し、接続できると推測します。
 
そうであるなら、接続・条件入力 を Excel で行い、別ブックへ データを出力し、集計させる を、
VBA だけで構成できますよね。

回答
投稿日時: 22/06/17 11:37:03
投稿者: sk

mashimo さんの引用:
いろいろな処理の都合でVBAをやめて.NETだけにすることはできない

mashimo さんの引用:
ユーザにはExcelだけで操作をしてもらうつもりでしたが

「フロントエンドは .NET アプリではなく、あくまでも Excel」という方針を
固辞されるのであれば、真っ先に検討すべきなのは「.NET アプリを
仲介させなくてもデータを取得できる方法」ではないかと思いますけど。
 
sk さんの引用:
あとは、それらのデータを具体的にどこから参照しているのか
それらのデータにアクセスする権限を有しているのかどうか次第。

そしてこれが明示されない限り、本当に .NET アプリを仲介させなければ
ならないのかどうかも分かりません。
 
例えば SQL Server などのデータベース上のテーブルやビューから
任意の条件に該当するレコードを抽出しているだけなら、
ADO を介して取得したレコードセットを任意のワークシート上に
出力するマクロを書けば済む話でしょう。

回答
投稿日時: 22/06/17 14:45:16
投稿者: でれすけ

 このお話はVSTOアドインを作りたいというお話なのではないかと思うのです
 私自身VSTO(Visual Studio Tools for Office)での開発はやったことがないので、
 詳細はご説明できないのですが、
 会社の業務として開発するなら、1つの方法として検討の余地があるのではないかとおもいます。

投稿日時: 22/06/17 17:48:15
投稿者: mashimo

皆さん
いろいろなご意見ありがとうございます。
時間はあるので(予算はないのですが)もう少し考えてみます。
 
途中にOracleのDBも介在するのですが、使用するPCにOracle ClientをインストールできないのもVBAだけで解決しにくい原因にもなっています。
 
自分の能力および現場の(お年寄りなどの)都合、使用するPCなどいろいろ制約があるので皆さんのアドバイスをもとに可能な方法を実装を検討します。

回答
投稿日時: 22/06/20 09:17:55
投稿者: Suzu

mashimo さんの引用:
途中にOracleのDBも介在するのですが、使用するPCにOracle ClientをインストールできないのもVBAだけで解決しにくい原因にもなっています。

 
Oracle を経由するのに、Oracle Clientをインストールできない と言うことはODBCを使っていない?
でも接続用のドライバは必要でしょうから、ドライバだけをインストールしている状態なのでしょうね。
そのドライバを PowerQuery に使用し Oracle に接続できませんか?
 
 
 
それが出来ないとしても
使用するPC とは、
引用:
Excelと収集APPは同一PC上
このマシンの事ですよね。
別にマシンを用意し、
・Oracle Clientをインストール
引用:
Excelと収集APPは同一PC上
と同じ接続方法を使い接続
を行えば .NRT を使わずに、Excel VBAだけでツールとして完結できませんでしょうか?

投稿日時: 22/06/23 15:19:23
投稿者: mashimo

Suzuさん、最後までありがとうございます。
回答遅くなりすみません
 
教えていただいたPowerQueryなども勉強して検討させていただきます。
会社の環境も私の能力も最新でないので苦労します・・!