Sub mondai3()
Dim gyo
Dim jyokyo
Dim komoku
Dim sname
Dim ws As Worksheet
For jyokyo = 4 To 7
komoku = Worksheets("リスト").Range("C" & jyokyo).Value
sname = Worksheets("リスト").Range("D" & jyokyo).Value
For Each ws In Worksheets
If ws.Name = sname Then
Application.DisplayAlerts = False
Worksheets(sname).Delete
Application.DisplayAlerts = True
Exit For
End If
Next
Sheets("本番").Copy After:=Sheets(7)
Sheets("本番 (2)").Name = sname
For gyo = 29 To 4 Step -1
If Worksheets(sname).Range("D" & gyo).Value <> komoku Then
Worksheets(sname).Rows(gyo & ":" & gyo).Select
Selection.Delete Shift:=xlUp
End If
Next
Next
End Sub
コメントがないためさびしい限りですが第1号になって見ます。
2017/09/29 00:53
小川慶一さんのコメント
(コメントID: 4926)
金子 伊智郎さん:
コメント1号、ありがとう&おめでとうございますw
おお、 For Each構文。 ここは、基礎編レベルのスキルだけで書くなら、以下の流れです。 worksheets.count は、アクティブなワークブックの、ワークシートの枚数を教えてくれます。
Dim i
For i = 1 To Worksheets.Count
If Worksheets(i).Name = sname Then
Application.DisplayAlerts = False
Worksheets(i).Delete
Exit For
Application.DisplayAlerts = True
End If
Next
Dim i
> For i = 1 To Worksheets.Count
> If Worksheets(i).Name = sname Then
> Application.DisplayAlerts = False
> Worksheets(i).Delete
> Exit For
> Application.DisplayAlerts = True
> End If
> Next
金子 伊智郎さんの投稿
(投稿ID: 3461)
ポイントはシートコピーする前に存在したら削除するようにした点です。
下から上に処理をしていくというヒントをもらっていたのでスムーズに
できました。
上から順に処理するとなると行削除する際にカウンターを-1でしょうか..
気持ち悪いコードになりそうです。
コメントがないためさびしい限りですが第1号になって見ます。
小川慶一さんのコメント
(コメントID: 4926)
コメント1号、ありがとう&おめでとうございますw
おお、 For Each構文。
ここは、基礎編レベルのスキルだけで書くなら、以下の流れです。
worksheets.count は、アクティブなワークブックの、ワークシートの枚数を教えてくれます。
> 上から順に処理するとなると行削除する際にカウンターを-1でしょうか..
> 気持ち悪いコードになりそうです。
For Next構文では、カウンター変数の値はループの中でいじらないのが大原則です。
ということで、NGです。動かないことはないですが、気持ち悪いですね。
ループの中で行番号を示す変数の値をいじるなら、 DoLoop構文を使います。
金子 伊智郎さんのコメント
(コメントID: 4928)
コメントありがとうございます。
確かにこのやり方でもできますね。
For文のカウンター変数については存じております。
やっと動画30まで終わりました。終わりが見えて来ました...
> 金子 伊智郎さん:
>
> コメント1号、ありがとう&おめでとうございますw
>
> おお、 For Each構文。
> ここは、基礎編レベルのスキルだけで書くなら、以下の流れです。
> worksheets.count は、アクティブなワークブックの、ワークシートの枚数を教えてくれます。
>
>
>
> > 上から順に処理するとなると行削除する際にカウンターを-1でしょうか..
> > 気持ち悪いコードになりそうです。
>
> For Next構文では、カウンター変数の値はループの中でいじらないのが大原則です。
> ということで、NGです。動かないことはないですが、気持ち悪いですね。
>
> ループの中で行番号を示す変数の値をいじるなら、 DoLoop構文を使います。
>
小川慶一さんのコメント
(コメントID: 4931)
> やっと動画30まで終わりました。終わりが見えて来ました...
早いですね (^^*
ご興味ありましたら、 DoLoop も調べてみてください。
なお、DoLoop構文を含むプログラムの実行には永久ループがつきものですが、先回りしてお伝えすると、実行中のプログラムを強制終了するには、 [Esc] キーです。
実務での成果報告も、楽しみにしてますね☆
> 小川慶一さん:
>
> コメントありがとうございます。
> 確かにこのやり方でもできますね。
> For文のカウンター変数については存じております。
>
> やっと動画30まで終わりました。終わりが見えて来ました...