Excel2007を使用しています。
ActiveXコントロール「Microsoftバーコードコントロール 9.0」にてバーコードを生成後、
図(拡張メタファイル)として変換するというVBAを作成しています。
動作としては完成したのですが、後半に行くに従い処理が遅くなっていきます。
スタート時は10個/秒ほどですが、
最後付近は2秒/個ほどになってしまいます。
手元の環境で、700個で240秒ほどかかります。
少しでも速度を改善させる方法はありますでしょうか。
バーコード生成部分はFunctionでサブルーチンから切りだしています。
サブルーチンでは、再描画の停止(ScreenUpdating = False)や、
手動計算への切換(Calculation = xlCalculationManual)は定義しています。
-------------------------------------------------------------------
Function ShowBarCode(P_Left As Long, P_Top As Long, P_Width As Integer, _
P_Height As Integer, P_Value As String, P_Style As Integer)
Application.ScreenUpdating = False
Dim mySht As Worksheet
Set mySht = ActiveSheet
Dim myShp1 As Object
' セルにバーコードを貼付ける
Set myShp1 = mySht.OLEObjects.Add(ClassType:= _
"BARCODE.BarCodeCtrl.1", Link:=False, DisplayAsIcon:=False, _
Left:=P_Left, Top:=P_Top, Width:=P_Width, Height:=P_Height)
With myShp1
.Object.Style = P_Style
.Object.Value = P_Value
.Width = .Width - 3 ' 再描画のための小細工
.Width = .Width + 3 ' 再描画のための小細工
End With
' バーコードを図(メタファイル)として変換
myShp1.Copy
ActiveSheet.PasteSpecial Format:="図 (拡張メタファイル)", Link:=False, DisplayAsIcon:=False
' バーコードを削除
myShp1.Delete
End Function
-------------------------------------------------------------------
添付図:バーコード付きシート サンプル
No.4ベストアンサー
- 回答日時:
> 画像Pasteのみ1万回で10秒、処理速度は一定でした
Excel2003使ってた・・・
確かに、2007だと異様なペースで遅くなっていきますね(--;
OLEObjects.AddもPictures.Pasteも遅いんじゃ、代替手段が・・・
あ、あった!
なぜか、セルごとコピペすれば遅くならない。
1. 他シートの適当なセルに、PasteSpecial
2. 1で画像を貼った"セル"をCopy (画像ごと取れる)
3. 目的の位置に、"セル"をPaste (画像ごと貼れる)
よく思いついたと褒めてほしいですw
引き続きの回答有難う御座います!
ご指摘の方法で3倍早くなりました!
どういう仕様なんでしょうかね。。。
とりあえず一旦高速化はこれでよしとします。
長いお付き合いありがとうございました!
No.3
- 回答日時:
画像Pasteのみ1万回で10秒、処理速度は一定でした
遅くなるものとばかり・・・自分のプログラムも見直しそうかな(--;
「画像が多いとPasteSpecialが遅い」なら、一度他シートで画像化とか
原因箇所&条件が分かれば、工夫の余地もあるかも。
時間測定関数を添付します、いろいろ試してみてください。
Private Declare Function timeGetTime Lib "winmm.dll" () As Long
'イミディエイトウィンドウに時間(ミリ秒)とログを出力
Sub DevLog(str)
Static t&
Debug.Print Right(" " & timeGetTime() - t, 7) & " : " & str
t = timeGetTime()
End Sub
Sub test()
Dim r, c
Application.ScreenUpdating = False
ActiveSheet.Shapes("Picture 1").Copy
DevLog "---> test start"
For r = 1 To 100
DevLog "Row = " & r
For c = 1 To 100
ActiveSheet.Cells(r, c).Select
ActiveSheet.Paste
Next
Next
End Sub
Function部分でCopyとDelete、
メイン部分でPasteSpecialのみ実施するように変更しています。
一つのバーコードを複数貼り付ける場合があるため、
この方法でも少し速度改善しています。
上記PasteSpecial部分のみコメントアウトすると、
速度は一定で10秒ほどで完了します。
試しに、700枚ほどのバーコード付きの完成したシートに対して、
追加する形でコードを実行したところ、
最初からマクロ実行速度は遅かったです。
やはり、画像が多くなるに連れ処理速度は低下してしまうものなのでしょうか。
No.2
- 回答日時:
毎回Addせず、オブジェクトを使い回してみては?
Add&Deleteを繰り返すと、内部でどーなっちゃうのか・・・
Sheetsだとファイルサイズが増えていったり、信用できない部分です。
速度に関係なく、避けたい気はします。。
コレクション(~s)は要素数によって徐々に遅くはなるんですが、
700程度じゃ僅かです。描画を止めてるなら、他要因だと思いますよ。
一度Addしたものをひな形に、
Valueを変更してコピーする方法に変えてみたところ、
半分ぐらいの実行時間に改善されました。
どうもありがとうございます。
それでも700個で120秒ほどかかり、
後半に行くに従い遅くなっていきました。
No.1
- 回答日時:
試したわけではないので効果は不明ですが、
' バーコードを削除
myShp1.Delete
Set myShp1 = Nothing
Application.cutcopymode = false
だとどうでしょ?
メモリにゴミが溜まって遅くなっているような気がします。
藪医者の診たてなので、期待しないでください (^^ゞ
回答有難う御座います。
実行して見ましたが速度改善は見られませんでした。
同シート内にオブジェクトを貼り付け過ぎなのが原因と思われますので明確な改善方法が見つかりません。
でも、回答嬉しかったです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Visual Basic(VBA) EXCEL VBAにて動的にCheckBOXを複数作成し、同BOXにイベントを追加したい 1 2023/03/16 07:05
- Visual Basic(VBA) QRコード作成マクロについて 3 2022/11/26 16:55
- Visual Basic(VBA) エクセルVBAで以下のようなコードを書いたらエラーになりました。何処が間違っているの教えて? 1 2023/02/10 18:30
- PowerPoint(パワーポイント) ExcelのVBAコードについて教えてください。 3 2022/05/25 14:32
- Visual Basic(VBA) ①ExcelVBAでカレンダーを作り、別のユザーフォームで日付を入力したいのですがエラーになります。 1 2023/02/17 18:39
- Visual Basic(VBA) Excel vbaについての質問 3 2023/04/18 16:14
- Visual Basic(VBA) このVBAでExcelアプリケーションを作成は必要ですか? 3 2023/07/19 21:13
- Visual Basic(VBA) 【VBA】写真の縦横比を変えずに貼り付ける 5 2023/06/13 11:42
- Excel(エクセル) 【マクロ】スクショ印刷がうまく動かない件 5 2022/12/06 17:37
このQ&Aを見た人はこんなQ&Aも見ています
-
プロが教える店舗&オフィスのセキュリティ対策術
中・小規模の店舗やオフィスのセキュリティセキュリティ対策について、プロにどう対策すべきか 何を注意すべきかを教えていただきました!
-
EXCEL VBA マクロ 実行する度に処理速度がどんどん遅くなる原因が知りたい
Excel(エクセル)
-
Excelの Microsoft バーコードコントロール 14.0
Excel(エクセル)
-
エクセルvbaでの図形のカット(コピー)ペーストについて
Excel(エクセル)
-
-
4
エクセルのVBAでクリップボードにコピーした画像をpng(or jpg or bmp)保存したい
Visual Basic(VBA)
-
5
VBA シートをコピーする際に Copyメソッドは失敗しましたのエラーが出てしまいます
Visual Basic(VBA)
-
6
EXCEL VBAで全選択範囲の解除
Excel(エクセル)
-
7
エクセル関数で日付かどうかの確認?
Excel(エクセル)
-
8
EXCEL VBAでオートシェイプの重なりを検知するには?
Excel(エクセル)
-
9
VBAを何回も作り直して、容量が増えた
Excel(エクセル)
-
10
押したボタンの位置取得(共通のマクロ)
Excel(エクセル)
-
11
拡張メタファイルにて貼り付け
Visual Basic(VBA)
-
12
オートシェイプ図形をクリックでコメントを表示したい
Excel(エクセル)
-
13
Excel(VBA)
Excel(エクセル)
-
14
worksheet_changeがループする
PowerPoint(パワーポイント)
-
15
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
16
複数の条件に合う行番号を取得するには
その他(Microsoft Office)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
読み取ったQRコード/バーコード...
-
EXCELでバーコードを作成すると...
-
バーコードコントロールが印刷...
-
ANAの2次元バーコードがスマホ...
-
Excelでバーコードリーダーで読...
-
マクロでバーコードのリンクセ...
-
エクセル バーコード作成で他の...
-
国内線航空券をJALのアプリにて...
-
バーコードってダブらない?
-
バーコードを使って在庫管理をa...
-
バーコードリーダーは逆さまで...
-
JANコード(バーコード)を間違...
-
黒い無地のバーコードのみのカ...
-
Access2016Runtimeをインストー...
-
差し込み印刷のバーコードを小さく...
-
SMGカードって、なんのカード??
-
レシートにバーコード
-
EXCEL関数LOOKUPとFILTERについ...
-
JANコードとEANコードの違い
-
コンビニ決済の用紙で支払いの...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
読み取ったQRコード/バーコード...
-
国内線航空券をJALのアプリにて...
-
ANAの2次元バーコードがスマホ...
-
EXCELでバーコードを作成すると...
-
バーコードってダブらない?
-
バーコードコントロールが印刷...
-
レシートにバーコード
-
振込請求書が破れてしまいました
-
Excelでバーコードリーダーで読...
-
差し込み印刷のバーコードを小さく...
-
エクセル バーコード作成で他の...
-
コンビニのアルバイトでやらか...
-
コンビニ決済の用紙で支払いの...
-
POVO2.0の128kbpsでPaypayやRPa...
-
Access2016Runtimeをインストー...
-
マクロでバーコードのリンクセ...
-
バーコードの値段の付け方はど...
-
エクセルでCODE128バー...
-
QRコードとバーコードについて
-
コンビニバイトで商品バーコー...
おすすめ情報