|
▼ponpon さん:
こんにちは。tokiです。
ご指摘の通りマクロ記録でやってみましたが、マクロ記録ではやはり、セル範囲が特定されてしまうので、運用に耐えないようです。
見出し 6行目まで
社員データ 7行目以降
現在までご説明したように仕様としては7行以降の社員データ行は追加や削除によって可変のため、マクロ記録ですと難しいです。
そこで、次のようなマクロを作成しましたが・・・
Private Sub データクリアボタン_Click()
Dim myDR As Range
Dim daTa As Variant
Dim daTagyo As Variant
Dim ans As Integer
Application.DisplayAlerts = False
ans = MsgBox("全社員の得点データを一括削除します。本当に削除しますか?", vbYesNo + vbExclamation, "オールクリア")
Select Case ans
Case vbYes
MsgBox "全社員の得点データを削除します。", vbInformation, "オールクリア"
'****************************************
'各月シートから得点データ領域を削除
'****************************************
For i = 1 To 12
With Worksheets(i & "月")
’データ領域は7行目以降の各行D列〜N列。この範囲を指定
Set myDR = .Range("D7", .Range("N65536").End(xlUp)).SpecialCells(xlCellTypeVisible)
myDR.ClearContents
End With
Next
Case vbNo
End Select
Application.DisplayAlerts = True
End Sub
実行すると一見うまく行くのですが、全データを削除した後に、再度削除ボタンを押すとエラーがでます。
.Range("D7", .Range("N65536").End(xlUp)).SpecialCells(xlCellTypeVisible)
にしているため、7行目以降のN列のデータが無い状態では、.Range("N65536").End(xlUp)が6行目の見出し部分を示すことになり
エラーとなってしまうのでしょうか?
やはり、各行を指定して該当行にクリアの繰り返し処理を入れていく方法がよいのかな、と思っています。
そこで方法として、A列の職務から可視データすべてを抽出し、順番にデータ領域(4列目〜14列目)を削除する、という繰り返し処理ができないでしょうか?
A列の全ての職務は"*職"で抽出できます。
例えば
Private Sub データクリアボタン_Click()
Dim myDR As Range
Dim daTa As Variant
Dim daTagyo As Variant
Dim ans As Integer
Dim i As Integer
Dim k As Variant
Application.DisplayAlerts = False
ans = MsgBox("全社員の得点データを一括削除します。本当に削除しますか?", vbYesNo + vbExclamation, "オールクリア")
Select Case ans
Case vbYes
MsgBox "全社員の得点データを削除します。", vbInformation, "オールクリア"
'****************************************
'各月シートから得点データ領域を削除
'****************************************
For i = 1 To 12
With Worksheets(i & "月")
k = Application.Match("*職", .Range("A:A"), 0)
If Not IsError(k) Then
.Cells(k, 4).ClearContents
.Cells(k, 5).ClearContents
.Cells(k, 6).ClearContents
.Cells(k, 7).ClearContents
.Cells(k, 8).ClearContents
.Cells(k, 9).ClearContents
.Cells(k, 10).ClearContents
.Cells(k, 11).ClearContents
.Cells(k, 12).ClearContents
.Cells(k, 13).ClearContents
.Cells(k, 14).ClearContents
Else
Exit Sub
End If
End With
Next
Case vbNo
End Select
Application.DisplayAlerts = True
End Sub
こういう感じにすると、各シートの1行目だけは削除できます。
これを、A列において"*職"が存在している限り、ループさせる、というマクロにするためにはどのように改造すればよいでしょうか?
ご指導お願いいたします。
|
|