アプリ版:「スタンプのみでお礼する」機能のリリースについて

月間の勤務割表を作成しています。
3列3行を一枡として一人・一日の枡とし、勤務の割り振り状態を表示するものです。
列に日付、行を個人名(max16名)としますから、3列3行の枡が496個となります。
各枡とも1列目の1行目に勤務種別コード(1~5)を記述し、このコードNoにより4種の図形を貼付けています。
1つ1つの枡(496個)に以下のコードを書き実行しています。膨大な行数を要します。
使用するパソコンにおいては実行速度がかなりかかります。
これをもっと単純化する手法についてご教示いただければ幸いです。

Sub Macro1()
Select Case Range("I6").Value '1人目-1日
Case 1:
ActiveSheet.Shapes("四角形1").Select
Selection.Copy
Range("J7").Select
ActiveSheet.Paste
Case 2:
ActiveSheet.Shapes("四角形2").Select
Selection.Copy
Range("I7").Select
ActiveSheet.Paste
Case 3:
ActiveSheet.Shapes("四角形3").Select
Selection.Copy
Range("J7").Select
ActiveSheet.Paste
Case 4:
ActiveSheet.Shapes("直線1").Select
Selection.Copy
Range("I6").Select
ActiveSheet.Paste
Case 9:
ActiveSheet.Shapes("四角形3").Select
Selection.Copy
Range("J7").Select
ActiveSheet.Paste
End Select
 '|
  '| <同じことを一つ一つの枡ごとに繰り返し記述しています。>
  '|
Select Case Range("CU51").Value '16人目-31日
Case 1:
ActiveSheet.Shapes("四角形1").Select
Selection.Copy
Range("CV52").Select
ActiveSheet.Paste
Case 2:
ActiveSheet.Shapes("四角形2").Select
Selection.Copy
Range("CU52").Select
ActiveSheet.Paste
Case 3:
ActiveSheet.Shapes("四角形3").Select
Selection.Copy
Range("CV52").Select
ActiveSheet.Paste
Case 4:
ActiveSheet.Shapes("直線1").Select
Selection.Copy
Range("CU51").Select
ActiveSheet.Paste
Case 9:
ActiveSheet.Shapes("四角形3").Select
Selection.Copy
Range("CV52").Select
ActiveSheet.Paste
End Select

End Sub

A 回答 (1件)

For文を使えばコードを短くすることはできますが、図形を496個貼付けているかぎり実行時間は変わりません。


なんのために図形を貼付けているのか分かりませんが、実行時間を短くしたかったら別の方法を考える必要があります。


とりあえず、コードを短くする方法だけ。

Sub Macro1()
For i = 6 To 51 Step 3
For j = 9 To 99 Step 3
Select Case Cells(i, j).Value 'i人目-j日
Case 1:
ShapeCopy "四角形1", i + 1, j + 1
Case 2:
ShapeCopy "四角形2", i + 1, j
Case 3:
ShapeCopy "四角形3", i + 1, j + 1
Case 4:
ShapeCopy "直線1", i, j
Case 9:
ShapeCopy "四角形3", i + 1, j + 1
End Select
Next
Next
End Sub

Sub ShapeCopy(Zukei As String, i As Integer, j As Integer)
ActiveSheet.Shapes(Zukei).Select
Selection.Copy
Cells(i, j).Select
ActiveSheet.Paste
End Sub
    • good
    • 0
この回答へのお礼

nag0720さま

早速ご回答を付けていただき有難うございました。

おかげで、For...Next の意味をハッキリと理解することができました。

実際は、ご提示のSub ShapeCopy(Zukei As String, i As Integer, j As Integer) 以下の
行は使わず、”Case”の中でPasteまでを行うように書換え使用させていただくことにしました。
以前のなごりでどうしても図形貼付で行いたくこのような形にしています。また、実は実行時間の遅速は
たいしたことではなく、より単純化したコードを記述する欲求からきた質問でした。
重ねてお礼申し上げます。

お礼日時:2012/03/12 12:26

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!