|
▼どじょりん さん:
こんにちは
アップされたコードを踏まえようかとも思いましたが、全くの別方式で。
以下を前提にしています。
1.コマンドボタンは、台帳シートに配置された「ActiveXボタン」(コントロールツールボックスのボタン)
2.で、CommandButton1_Click は台帳シートのシートモジュールに書かれている。
3.台帳シートの1行目は、完全に空白セル。(ボタンのみ配置されていて、値が入っていない)
また、勝手に、処理後、D列の在庫数を引落し、その結果、在庫が0になったものを消しています。
(実際には、削除は行わず、在庫があるものだけで上書きしています)
Private Sub CommandButton1_Click()
Dim wkCol As Long
Dim x As Long
Dim y As Long
If WorksheetFunction.Count(Columns("A")) = 0 Then
MsgBox "削除すべきデータがありません"
Exit Sub
End If
Application.ScreenUpdating = False
'まず空白以外を抽出
wkCol = Range("A2").CurrentRegion.Columns.Count + 2 '作業列番号
Cells(1, wkCol).Value = Range("A2").Value '販売数タイトル
Cells(2, wkCol).Value = "<>" '抽出条件 空白以外
Range("A2").CurrentRegion.AdvancedFilter Action:=xlFilterCopy, _
CriteriaRange:=Cells(1, wkCol).Resize(2), CopyToRange:=Cells(1, wkCol + 2), Unique:=False
With Cells(1, wkCol + 2).CurrentRegion
y = .Rows.Count - 1 '抽出データ行数
x = .Columns.Count '一覧列数
End With
With Worksheets("削除一覧")
.Rows(2).Resize(y).Insert
.Range("A2").Resize(y, x).Value = Cells(2, wkCol + 2).Resize(y, x).Value
.Range("A2").Resize(y).Value = Date
End With
'在庫引落
y = Range("A" & Rows.Count).End(xlUp).Row
Range("A3:A" & y).Copy
Range("D3").PasteSpecial Paste:=xlPasteAll, Operation:=xlSubtract, _
SkipBlanks:=False, Transpose:=False
Cells(1, wkCol + 2).CurrentRegion.Clear
Cells(1, wkCol).Value = Range("D2").Value '在庫数タイトル
Cells(2, wkCol).Value = ">0" '抽出条件 在庫 0
Range("A2").CurrentRegion.AdvancedFilter Action:=xlFilterCopy, _
CriteriaRange:=Cells(1, wkCol).Resize(2), CopyToRange:=Cells(1, wkCol + 2), Unique:=False
'リスト置換え
With Range("A2").CurrentRegion
.Value = Cells(1, wkCol + 2).Resize(.Rows.Count, .Columns.Count).Value
End With
Cells(1, wkCol).CurrentRegion.Clear
Cells(1, wkCol + 2).CurrentRegion.Clear
Application.ScreenUpdating = True
MsgBox "処理が終わりました"
End Sub
|
|