質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

3回答

1805閲覧

他のプログラム言語で作られたプログラムを動かす

ice930

総合スコア99

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

3クリップ

投稿2021/08/09 12:53

抽象的な質問で申し訳ありません。

データをエクセルでまとめる事が多いので、VBAのみ書ける状態です。
別なプログラム言語も学習しようと思い質問致しました。

VBAでPC内に保存(インストール)されているアプリを動かすことはできるのですが、同じような要領で他のプログラム言語(Phython等)で作られたプログラムを動かす事は出来るのでしょうか?
参考:https://www.moug.net/tech/exvba/0100034.html

エクセル内のマクロ(VBA)からPythonのプログラムを呼び出し、特定のデータを収集(スクレイピング等)を行い、その後エクセル内の特定のセル等にデータをまとめる場合、

VBA → Python → VBA

となると思うのですが、VBAからPythonを呼び出し、PythonからVBAを呼び出す様な事は可能なのでしょうか?

VBA、Python 以外にも一般的にこれらの動作は使われているのでしょうか?

また、もし可能な場合、別なPCでも動かせる様にすることは可能でしょうか?
具体的には、作成したプログラムをUSBメモリ等に保存し、他のPCで動かす場合です。

プログラム自体の全体像が見えておらず、的を得ない質問かもしれませんがご教授いただければ幸いです。
よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

meg_

2021/08/09 14:31 編集

> エクセル内のマクロ(VBA)からPythonのプログラムを呼び出し、特定のデータを収集(スクレイピング等)を行い、その後エクセル内の特定のセル等にデータをまとめる場合、 スクレイピングはVBAでも可能ですのでその程度でしたら1つの言語で実装した方が良いと思います。またExcelファイルの操作もPythonからある程度可能ですのでやはりどちらかの言語で統一した方がメンテナンスしやすいのではないでしょうか? どうしてもやりたい場合はxlwingsで検索してみてください。
sazi

2021/08/10 01:20 編集

そのPythonのプログラムは外部からの呼び出しを想定した作りになっていいるのが前提ですけど、そこは大丈夫なんですか?
ice930

2021/08/10 12:58

Pythonというよりもプログラムについての質問でした。 VBAを使っているうちに疑問に思った事で有り、今のところpythonのコードは作成していません。 分かりにくい質問文で申し訳ありません。
guest

回答3

0

やりたいことや手法、動かそうとしているアプリなどが具体的に書かれてないので明確には答えられませんが、「可能でしょうか?」と書かれていることはおそらくすべて可能だと思います。VBAを絡めようとするならどうしても一連の処理を切り離して、一部は手動や半自動でデータをコンバートするとかが必要になるかもしれませんが、そこも含めてこの質問文だけでは分かりません。

これからPythonの学習を進められるということですが、目標を持つことは大事ですが、あまり遠くを目標にせず、まずは一歩一歩身近な目標を定めて学習を進めた方が良いと思います。一旦VBAのことは忘れて、まずはPythonだけを基礎からしっかり学習すべきでしょう。現状でプログラムの全体像が見えないのは当たり前で、Pythonの基礎が固まれば、なんとなくやりたいことの全体像が見えてくるようになると思いますので、あまり焦らずに一歩一歩Pythonの勉強を進めればいいと思います。

あと、学習するプログラミング言語はまずはPythonだけに絞った方が良いと思います。


追記)

teratailでの質問する場合、もう少し要点を絞ってピンポイントでした方が良いと思います。抽象的ということはご自身でもお気づきみたいですが、であればなおさら聞きたいことは一つに絞った方が良いと思います。

投稿2021/08/09 13:24

AbeTakashi

総合スコア4594

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ice930

2021/08/10 12:54

回答ありがとうございます。 ご指摘の通り一歩一歩学習していきたいと思います。
guest

0

ベストアンサー

他プログラム呼び出しといっても、独立したアプリを呼び出す方法と、動的ライブラリを呼び出す方法はかなり違います。

VBAで独立したアプリを呼び出すにはShellやWScript.Shellを使います。Pythonでこれにあたるのはsubprocessモジュールです。
VBAで動的ライブラリを呼び出すにはDeclareを使います。Pythonではctypesモジュールを使います。

「Windows DLL呼び出し」をGoogleで検索してみてください。

VBAとPythonを連携して動かすのであれば、現時点ではxlwingsを使うかwin32comを使います。
PythonでExcelマクロ実行!VBAを起動する方法
をお読みください。

また、xlwingsやwin32comをGoogleで検索してみてください。

投稿2021/08/09 14:25

ppaul

総合スコア24666

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ice930

2021/08/10 12:50

他のアプリ、プログラムの連携は可能なのですね!! 全体像が見えて来ました!ありがとうございます!
guest

0

もう解決済みとされていますが、おそらく本当にやりたいことと質問内容が少しずれているかもしれませんので、私なりの回答を書いてみます。私もPython初心者なので、もしかすると私自身の回答もずれてしまっているかもしれません。

おそらく本当にやりたい事は、**『「特定のデータを収集(スクレイピング等)」を得意とするPythonを動かして、収集された結果をExcelにまとめたい』**ことであって、VBAとPythonを連携させたいわけではないですよね。

VBAをPythonの前後に挟んでいるのは、Pythonを直に動かす方法がややこしそうであること(特にエンドユーザーは難しいかもしれませんね)、また、Pythonで出力した結果(テキストファイルなど)をExcelで展開するのが、VBAの方がやりやすそうだから、と言う理由ではないでしょうか?

正直申し上げると、VBAを前後に挟まず、PythonのみでExcelのxlsxファイルを出力した方が楽かと思います。よって、その方法を提示します。もちろん、USBメモリなどにPythonを導入し、どのPCでも動かせることを目標としています。

■1.PythonをUSBに導入するため、Python本家サイトからダウンロードします。
https://www.python.org/downloads/windows/
このページのいずれか使いたいバージョンの「Download Windows embeddable package (64-bit)」のリンクをクリックして、ZIPファイルをダウンロードします。このファイルはインストーラーがなく、ZIPファイルを展開してPythonを使用するためのものです。
今回は最新の3.9.6を使用するものとします。ファイルとしては、python-3.9.6-embed-amd64.zipがダウンロードできるはずです。

■2.ダウンロードしたZIPファイルをUSBメモリに展開します。USBメモリのドライブはE:ドライブと仮定します。
展開した先は、E:¥python-3.9.6-embed-amd64とします。

■3.pythonを動かすための、前準備をします。
E:¥python-3.9.6-embed-amd64¥python39._pthをテキストエディタでオープンし、最後の行を変更します。

元の内容

#import site ```変更した内容

import site

次にPythonのパッケージ管理用のツールであるpipを導入します。まず初めに以下のURLを右クリックし、ファイル名をつけて保存してください。 [https://bootstrap.pypa.io/get-pip.py](https://bootstrap.pypa.io/get-pip.py) 保存先は、先程展開したE:¥python-3.9.6-embed-amd64です。 続いて、コマンドプロンプトかターミナルを起動し、E:ドライブへ移動します。先程展開したpython-3.9.6-embed-amd64へカレントディレクトリを移動させ、**python get-pip.py**と入力します。

E:¥>cd E:¥python-3.9.6-embed-amd64
E:¥python-3.9.6-embed-amd64>python get-pip.py

しばらくすれば、pipがインストールされます。 さらに、PythonからExcelファイルを作成するために必要なライブラリを導入します。**python -m pip install openpyxl**と入力します。

E:¥python-3.9.6-embed-amd64>python -m pip install openpyxl

これで準備はある程度整いました。 ■4.Pythonがある場所へのパス設定用バッチファイルを作成します。これが後に、ice930さんが作成されるデータ収集プログラムを動かすバッチファイルへと進化します。 E:ドライブのルートディレクトリにでもバッチファイルを作成します。今回はrun.cmdとします。 run.cmdの中身は以下の通りです。

@echo off
set PATH=%~d0¥python-3.9.6-embed-amd64;%~d0¥python-3.9.6-embed-amd64¥Scripts;%PATH%

パスに書かれている%~d0はバッチファイルを動かした時のドライブを取得するおまじないです。これで、ある環境ではE:ドライブではなく、F:ドライブになったとしても問題なくパスが通ります。 ■5.早速、コマンドプロンプトかターミナルを起動してバッチファイルを動かして確認してみましょう。

E:¥>run
E:¥>PATH
PATH=E:¥python-3.9.6-embed-amd64;C:¥WINDOWS¥system32;C:¥WINDOWS;C:¥.....

無事パスが通っていることが確認できましたので、Pythonを動かすのにE:¥python-3.9.6-embed-amd64へ移動する必要は無くなりました。 ■6.データ収集、およびデータ収集後Excelファイルへ出力するプログラムをPythonで書きます。 もともと、データ収集プログラムをPythonで書かれようとされていたので、その部分は省略しますが、Excelへデータを出力するにはどうするかをお話しします。と言うより、参考となるサイトの紹介だけします。 [https://www.sejuku.net/blog/75536](https://www.sejuku.net/blog/75536) [https://gammasoft.jp/support/how-to-use-openpyxl-for-excel-file/](https://gammasoft.jp/support/how-to-use-openpyxl-for-excel-file/) [https://fastclassinfo.com/entry/python_excel_beginners/](https://fastclassinfo.com/entry/python_excel_beginners/) [https://excel-ubara.com/python/python024.html](https://excel-ubara.com/python/python024.html) [https://note.nkmk.me/python-openpyxl-usage/](https://note.nkmk.me/python-openpyxl-usage/) この辺りを参考にデータ収集した結果をExcelファイルに出力してみて下さい。実際私も、ある3つのサイトを巡回して、1つのExcelファイルに出力するというプログラムを組んだことがあります。参考にしたのは、上のサイトです。 ■7.最後に作成したPythonのプログラムを簡単に動かせるようにします。 4.で作成したrun.cmdを変更し、簡単に動かせるようにします。 変更したrun.cmdの中身は以下の通りです。

@echo off
set ORGPATH=%PATH%
set PATH=%~d0¥python-3.9.6-embed-amd64;%~d0¥python-3.9.6-embed-amd64¥Scripts;%PATH%
python 作成したPythonプログラムのファイル名
set PATH=%ORGPATH%

もし、コマンドプロンプトかターミナルを使用してrun.cmdを直接実行する強者が現れた場合の対策がORGPATHを使用している箇所です。 ■8.実際に動かしてみましょう。 エクスプローラーからE:ドライブを表示して、run.cmdファイルをダブルクリックするだけです。コマンドプロンプトが起動し、データ収集、収集後Excel出力まで終えて、無事E:ドライブにExcelファイルが生成されたことを確認できるはずです。 run.cmdと言うのがわかりにくいようであれば、「データ収集プログラム.cmd」などに変更してみて下さい。 ■最後に 紹介したサイトをご覧いただければわかるとおり、PythonのExcelファイルを操作するためのパッケージは結構強力です。したがって、Python呼び出し、Pythonが出力したデータの加工を下手にVBAで組むよりは、オールPythonで実行できる環境を作った方が楽かな、と思います。 参考にしてみて下さい。

投稿2021/08/22 02:28

編集2021/08/22 11:05
caminoroad

総合スコア14

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問