月間の勤務割表を作成しています。
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
No.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
nag0720さま
早速ご回答を付けていただき有難うございました。
おかげで、For...Next の意味をハッキリと理解することができました。
実際は、ご提示のSub ShapeCopy(Zukei As String, i As Integer, j As Integer) 以下の
行は使わず、”Case”の中でPasteまでを行うように書換え使用させていただくことにしました。
以前のなごりでどうしても図形貼付で行いたくこのような形にしています。また、実は実行時間の遅速は
たいしたことではなく、より単純化したコードを記述する欲求からきた質問でした。
重ねてお礼申し上げます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセル VBAでシートのコピーを作りたい 1 2023/05/18 07:42
- Visual Basic(VBA) いつもお世話になります 下記のコード実行すると エラーになります わかるかた教えてくれませんでしょう 6 2022/12/17 15:01
- Visual Basic(VBA) マクロを短くする 1 2023/01/15 00:11
- Visual Basic(VBA) マクロで最終行を取得してコピーしたい 3 2022/04/06 19:07
- Visual Basic(VBA) 動きっぱなしです。止め方とプロシージャの間違いを教えて下さい! 5 2022/08/15 23:08
- Visual Basic(VBA) データのある範囲を選択するVBAについて 2 2022/09/03 00:20
- Visual Basic(VBA) エクセルのVBAでダブルクリックでチェックを入れたあと 1 2022/10/26 20:30
- Visual Basic(VBA) vbaのエラー対応(実行時エラー7:メモリが不足しています) 4 2023/04/24 00:20
- Excel(エクセル) ②Excel 簡単にシートコピーしたら前日の残高と日付を変更させたい→マクロの記録でエラーが出ます 8 2022/07/16 20:40
- Visual Basic(VBA) select caseの入れ子 3 2023/03/08 18:48
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
内角の和が1440°である多角形は...
-
エクセルvbaでの図形のカット(...
-
60°、30°、50°、40°の作図の問題
-
数学Aの空間図形について質問で...
-
四角形の中心の求め方
-
数学Aの図形の性質について質問...
-
数学I
-
定規・コンパスで20度を作図...
-
4辺の長さが分かっている四角形...
-
孤を3等分する点の作図
-
なぜ「n」を使うか?
-
円の中に図形が何個入るのか
-
なぜ四角形
-
一辺がaの正n角形に外接する円...
-
星型って
-
WORD 2段組にしてその外側に囲...
-
角錐台の体積の公式について
-
この図の正六角柱においてABとK...
-
角度を求めて下さい。
-
コンパスと定規で作図可能な角度
おすすめ情報