作業の無駄を見つけるコツ…
それは繰り返しです!
繰り返し同じ事を喋ったり…
繰り返し同じ事を書いたり…
1回で済ませろ!って思いますよね?
例えば
「このシート10こ複製して!」と言われた場合。
10回複製するしかないのか‥!?
いや!10回も繰り返してられるか!
「繰り返しがある=効率化できる」である!
ループ処理を覚えて1回で済ませてみよう!
VBAを覚えていくシリーズ第5弾!
目次
ループ文を1つ覚えよう
For文を覚えよう!
例えば何か処理を3回繰り返したい場合!
構文はこんな感じ!
1 2 3 4 |
Dim i As Long For i = 1 To 3 'ここに繰り返したい処理を書く Next i |
いや、どゆことや!
まず
「i」は数を数えてくれる変数です!
ここでは1、2、3…と数えてくれます!
こいつのおかげで
いま処理が何回目なのか分かります!
では次は動きを見てみよう!
※変数についてはこちらの記事を参考ください

For文の動きを見てみよう!
1 2 3 4 5 |
Dim i As Long For i = 1 To 3 '「i」の中身をメッセージ表示します MsgBox i Next i |
[1] For i = 1 To 3(1巡目)
i = 1 でスタート!
[2] MsgBox i (1巡目)
「1」と表示されます
[3] Next i (1巡目)
iを次の数字にする→ i = 2
[4] For i = 1 To 3 (2巡目)
「i = 2 <= 3 」を満たすので次行くぞ!
[5] MsgBox i(2巡目)
「2」と表示されます
[6] Next i (2巡目)
iを次の数字にする→ i = 3
[7] For i = 1 To 3 (3巡目)
「i = 3 <= 3 」を満たすので次行くぞ!
[8] MsgBox i(3巡目)
「3」と表示されます
[9] Next i (3巡目)
iを次の数字にする→ i = 4
[10] For i = 1 To 3 (4巡目)
「i = 4 <= 3 」を満たさないので終了!
次、この「i」が 1ずつ増えるのを利用していきます!
10回の繰り返しを1回の記述で!
10個のシート名を書き換えて見よう!
10個のシート名を

かぼちゃ1、かぼちゃ2、…と書き換えて見ましょう!

もしループ文を使わなかったら…
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
Option Explicit Sub rename() '書き換えたい名前 Dim name As String name = "かぼちゃ" 'シート名の書き換え ThisWorkbook.Worksheets(1).Name = name & 1 ThisWorkbook.Worksheets(2).Name = name & 2 ThisWorkbook.Worksheets(3).Name = name & 3 ThisWorkbook.Worksheets(4).Name = name & 4 ThisWorkbook.Worksheets(5).Name = name & 5 ThisWorkbook.Worksheets(6).Name = name & 6 ThisWorkbook.Worksheets(7).Name = name & 7 ThisWorkbook.Worksheets(8).Name = name & 8 ThisWorkbook.Worksheets(9).Name = name & 9 ThisWorkbook.Worksheets(10).Name = name & 10 ENd Sub |
うわあ。。なんか嫌だ!!
ループ文でコンパクトに!
ループ文を使ってみよう!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
Option Explicit Sub rename() '書き換えたい名前 Dim name As String 'カウント Dim i As Long name = "かぼちゃ" 'シート名の書き換え For i = 1 To 10 ThisWorkbook.Worksheets(i).Name = name & i Next i ENd Sub |
一目瞭然だね!!!
こういう風に
「繰り返し」という部分には
コンパクトにできる可能性が眠っているのです!
VbaForYoutube
YouTube動画で最後書き終わったVBAになります!
気になる方は是非動画見て下さい!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
Option Explicit Sub main() Dim wsList As Worksheet '①「リスト」シートってどれ? Dim intListCount As Integer '②シート名の「数」は? Dim intLastSheet As Integer '③シートの一番後ろって何番目? Dim wsTemplate As Worksheet '④「テンプレート」シートってどれ? Dim strSheetName As String '⑤「シート名」ってどれ? Dim i As Integer '①「リスト」シートってどれ? Set wsList = ThisWorkbook.Worksheets("リスト") '④「テンプレート」シートってどれ? Set wsTemplate = ThisWorkbook.Worksheets("テンプレート") '#1.「テンプレート」シートを複製する '*** 1-1.「リスト」シート内の「シート名」の数を数える intListCount = wsList.Range("A1").End(xlDown).Row - 1 For i = 1 To intListCount '*** 1-2.シート1番後ろを指定する intLastSheet = ThisWorkbook.Worksheets.Count '*** 1-3.「テンプレート」シートを複製する wsTemplate.Copy After:=ThisWorkbook.Worksheets(intLastSheet) '#2.複製したシート名を変更する '*** 2-1.「リスト」シート内の「シート名」の値を取ってくる strSheetName = wsList.Cells(i + 1, 1).Value '*** 2-2.1-3で複製したシート名を2-1に書き変える ThisWorkbook.Worksheets(intLastSheet + 1).Name = strSheetName Next i '#3.「リスト」シートのA1セルにカーソルを置く wsList.Activate wsList.Range("A1").Select End Sub |