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

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

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

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

同期

複数のディレクトリに存在するファイルを更新した場合に、すべてのファイルにも更新が行われる事、又は、同じ記憶領域に同時にアクセスして内容の整合性が失われてしまう事をを防ぐ制御などを同期と呼びます。

非同期処理

非同期処理とは一部のコードを別々のスレッドで実行させる手法です。アプリケーションのパフォーマンスを向上させる目的でこの手法を用います。

Q&A

解決済

1回答

522閲覧

VBScript 画像繰り返し貼り付け処理を同期処理による画像貼り付けに変更

goki_gottan

総合スコア168

VBA

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

同期

複数のディレクトリに存在するファイルを更新した場合に、すべてのファイルにも更新が行われる事、又は、同じ記憶領域に同時にアクセスして内容の整合性が失われてしまう事をを防ぐ制御などを同期と呼びます。

非同期処理

非同期処理とは一部のコードを別々のスレッドで実行させる手法です。アプリケーションのパフォーマンスを向上させる目的でこの手法を用います。

0グッド

0クリップ

投稿2022/07/22 02:42

VBAで画像貼り付けに非常に時間がかかるため、VBAからVBSを呼び出し、そのVBSで特定の画像をエクセルに貼り付けようとしております。
VBSでは同期処理が可能とのことで、早速実装しようと思いますが、うまくいきません。

繰り返し処理を500とし、画像を500枚特定のシートに貼り付けます。

for i = 1 to 500 sh.Shapes.AddPicture "●\Desktop\image2.png", True, True, 100, 100, 70, 70 next

上記処理をマルチスレッドまたはプロセスで実行できないでしょうか?

j=0 Do ln=GetExitCodeProcess(sh.Shapes.AddPicture "●\Desktop\image2.png", True, True, 100, 100, 70, 70) j=j+1 Loop While j = 500

宜しくお願いいたします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

何が上手くいかないのかよくわかりませんが、
そもそもからしてsh.Shapes.AddPictureがExcel(オブジェクト)経由でしか使えないはずですし、
ボトルネックがExcel側なのでVBSでマルチプロセスしても意味がないように思います。

GetObject(ファイル名)でExcelファイルのオブジェクトを新たにExcelを開くことなくVBSから取れますが、非同期は無理そう(未確認)
https://qiita.com/nukie_53/items/12cc0a3fc295a446a045

VBS使わなくてもApplication.OnTimeを活用すればVBAでマルチプロセスができるそうですがあんまり早くならなさそう。少なくとも500個も立ち上げようとしたらそれだけでパンクする(VBSもだけど)。
https://excel-ubara.com/vba_class/VBA_CLASS_06.html

投稿2022/07/22 03:19

RiaFeed

総合スコア2701

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問