[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『画像コピペの高速化』(たま)
こんにちは。
マクロの件で、質問をお願いします。
ファイルに26個シートがあって、先頭から25シート目までのシート名は
01,02・・・25という風に番号をふっています。
最後のシートは画像貼付け用で「画像」というシート名にしています。
01〜25のシートのB12からIH247を選択して図として画像シートに順番に
貼り付けるマクロを作成したのですが、処理時間が50秒ほどかかってしまいます。
しかもマクロ実行後はファイルサイズがかなり大きくなってしまいます。
画面の更新を停止すると画像が正しく表示されません。
(真っ白な画像が貼り付けられます。)
処理時間を短縮でき、かつファイルサイズが小さくなるのが理想です。
出来れば1シートに付き1秒弱くらいで処理ができればうれしいです。
すみません、どうぞよろしくお願いいたします。
ちなみに選択範囲のB12からIH247はセルにそれぞれ数値が入っていて
その数値ごとに色わけをしています。
以下が私が作成したマクロコードです。
添削の程、よろしくお願いいたします。
Option Explicit
Sub Sample()
Dim myWeekday As Integer
Dim myMsg As String, myStyle As String, Answer As String
Dim MaxRow As Long
Dim MaxCol As Long
Dim Grow As Integer
Dim i As Integer
Const myHeight = 150 '行の高さ。0-409を指定。
Const myWidth = 25 '列の幅。0 - 255を指定。
With Worksheets("画像")
.Activate ActiveWindow.Zoom = 100 .DrawingObjects.Delete .Cells.Clear .Rows(1).Delete .Rows.AutoFit .Range("A1").Select .Rows("1:6").RowHeight = myHeight .Columns("A:E").ColumnWidth = myWidth End With
With Worksheets(1)
.Activate MaxRow = .Range("A" & Rows.Count).End(xlUp).Row Grow = .Range("A1").End(xlDown).Row MaxCol = .Cells(Grow + 2, 2).End(xlToRight).Column End With
For i = 1 To 25
'<指定セル範囲をクリップボードへピクチャ (画像)としてコピーします。>
With Worksheets(i) .Activate .Range(Cells(Grow + 4, 2), Cells(MaxRow, MaxCol)) _ .CopyPicture xlScreen, xlBitmap End With
With Worksheets("画像")
.Activate '<新規シートに貼り付けします。> Select Case Worksheets(i).Name Case "01": ActiveSheet.Paste Destination:=Worksheets("画像").Range("A1") Case "02": ActiveSheet.Paste Destination:=Worksheets("画像").Range("B1") Case "03": ActiveSheet.Paste Destination:=Worksheets("画像").Range("C1") Case "04": ActiveSheet.Paste Destination:=Worksheets("画像").Range("D1") Case "05": ActiveSheet.Paste Destination:=Worksheets("画像").Range("E1") Case "06": ActiveSheet.Paste Destination:=Worksheets("画像").Range("A2") Case "07": ActiveSheet.Paste Destination:=Worksheets("画像").Range("B2") Case "08": ActiveSheet.Paste Destination:=Worksheets("画像").Range("C2") Case "09": ActiveSheet.Paste Destination:=Worksheets("画像").Range("D2") Case "10": ActiveSheet.Paste Destination:=Worksheets("画像").Range("E2") Case "11": ActiveSheet.Paste Destination:=Worksheets("画像").Range("A3") Case "12": ActiveSheet.Paste Destination:=Worksheets("画像").Range("B3") Case "13": ActiveSheet.Paste Destination:=Worksheets("画像").Range("C3") Case "14": ActiveSheet.Paste Destination:=Worksheets("画像").Range("D3") Case "15": ActiveSheet.Paste Destination:=Worksheets("画像").Range("E3") Case "16": ActiveSheet.Paste Destination:=Worksheets("画像").Range("A4") Case "17": ActiveSheet.Paste Destination:=Worksheets("画像").Range("B4") Case "18": ActiveSheet.Paste Destination:=Worksheets("画像").Range("C4") Case "19": ActiveSheet.Paste Destination:=Worksheets("画像").Range("D4") Case "20": ActiveSheet.Paste Destination:=Worksheets("画像").Range("E4") Case "21": ActiveSheet.Paste Destination:=Worksheets("画像").Range("A5") Case "22": ActiveSheet.Paste Destination:=Worksheets("画像").Range("B5") Case "23": ActiveSheet.Paste Destination:=Worksheets("画像").Range("C5") Case "24": ActiveSheet.Paste Destination:=Worksheets("画像").Range("D5") Case "25": ActiveSheet.Paste Destination:=Worksheets("画像").Range("E5") End Select
With .Shapes(i) .LockAspectRatio = msoTrue '縦横比を固定する。 .ScaleHeight 1, msoTrue '画像の幅を1に設定する .ScaleWidth 1, msoTrue '画像の高さを1に設定する。 .Width = ActiveSheet.Cells(1, 1).Width '画像の幅をセルの幅に合わせる。 End With
If i = 1 Then .Rows("1:5").RowHeight = .Shapes(i).Height
End With
Next i
End Sub
< 使用 Excel:Excel2010、使用 OS:Windows7 >
速くなるかどうかは、画像オブジェクトを他シートにコピーするところだけ試してみるとか。
(???) 2014/09/03(水) 16:33
.Activate .Select をやめるだけで結構早くなると思います。 (めいぷる) 2014/09/03(水) 16:58
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.