Sub mondai7()
Dim ws As Worksheet
Dim lnShukei As Long
Dim wsShukei As Worksheet
Dim wsMx As Long
lnShukei = 2
Set wsShukei = Worksheets("集計")
For Each ws In Worksheets
If ws.Name <> "集計" Then
wsMx = ws.Range("B65536").End(xlUp).Row
ws.Tab.Color = 49407
wsShukei.Range("A" & lnShukei).Value = lnShukei - 1
wsShukei.Range("B" & lnShukei).Value = ws.Name
wsShukei.Range("C" & lnShukei).Value = ws.Range("K" & wsMx).Value
lnShukei = lnShukei + 1
End If
Next
End Sub
Sub mondai7()
Dim ws As Worksheet
Dim lnShukei As Long
Dim wsShukei As Worksheet
Dim wsMx As Long
lnShukei = 2
Set wsShukei = Worksheets("集計")
For Each ws In Worksheets
If ws.Name <> "集計" Then
wsMx = ws.Range("B65536").End(xlUp).Row '[1]
ws.Tab.Color = 49407
wsShukei.Range("A" & lnShukei).Value = lnShukei - 1
wsShukei.Range("B" & lnShukei).Value = ws.Name
' wsShukei.Range("C" & lnShukei).Value = ws.Range("K" & wsMx).Value '[2]
wsShukei.Range("C" & lnShukei).Value = ws.Range("K" & ws.Range("B65536").End(xlUp).Row).Value '[3]
lnShukei = lnShukei + 1
End If
Next
End Sub
荏隈 直樹さんの投稿
(投稿ID: 163)
No.7の、頭の体操の意味を取り違えておりました。
[2]
[1]で追加したワークシートの名前を、"test"にする
(※すでに"test"という名前のシートがある場合は、何か別の名前にしてください)
という問題文ですが、
if文で条件分岐して、すでに"test"という名前のシートがある場合には別の名前にするマクロを作る話だと思いました。
なので、既存のシートに"test"があるかどうかを探るマクロを考えて思いつかずに回答を見たら「あれ?」となってしまいました(^^;;
本文の問題は、こんな感じで、問題なく出来ました。
小川慶一さんのコメント
(コメントID: 875)
>No.7の、頭の体操の意味を取り違えておりました。
あらら。すいません。分かりにくかったでしょうか。
いただいたマクロ。
レベル高い人向けにコメントすると、[1], [2]を一行で済ませて、[3]のように書くのもあり。
wsMxは一度しか使ってないから、このほうがよいかもしれない。
可読性はどっちのほうが高いか?というと、どっちもどっちです。読む人のスキルによって意見が分かれそう。
あと、For Each文の前の段階で[1]をして、[2]では、投入したい値をlnShukei と wsMx を使って表現するとか。