アップデート:
タブを開くたびに、注文リストが自動的に生成されます。
私が知る限り、コードには 1 つのバグがあります。
- "Full List" の最初の行 (この場合は C8:P8) は、そこに何があるかに関係なく、常にコピーされ、新しい配列に挿入されます。
空白の行をコピーするようにしましたが、[注文] タブに貼り付けると、注文項目のみが表示されます。最初の行を除いて結果配列からすべての項目を貼り付けようとしましたが、成功しませんでした。ああ、これに関するすべての支援に対して@David-Zemensに感謝します。あなたは自分が何をしているのかを知っており、それが示しています:)
Private Sub Worksheet_Activate()
Dim wsList As Worksheet, wsOrder As Worksheet
Dim rng As Range
Set wsList = Worksheets("Full List")
Set wsOrder = Worksheets("Order")
wsList.Unprotect
'Clear Columns B, C, & D below row 3 in the Order sheet
wsOrder.Range("B3:D" & Rows.Count).ClearContents
'Set Range to include all columns from C to P starting with row 8
Set rng = wsList.Range("C8:P" & GetLastRow(wsList, 3))
wsList.AutoFilterMode = False
'filter so that only numeric values in column P are showing
rng.AutoFilter Field:=14, Criteria1:=">0", _
Operator:=xlAnd
'Copy column C (in wsList) to column B (in wsOrder)
rng.Columns(1).SpecialCells(xlCellTypeVisible).Copy
wsOrder.Range("B2").PasteSpecial xlPasteValues
'Copy column D (in wsList) to column C (in wsOrder)
rng.Columns(2).SpecialCells(xlCellTypeVisible).Copy
wsOrder.Range("C2").PasteSpecial xlPasteValues
'Copy column P (in wsList) to column D (in wsOrder)
rng.Columns(14).SpecialCells(xlCellTypeVisible).Copy
wsOrder.Range("D2").PasteSpecial xlPasteValues
wsList.AutoFilterMode = False
wsList.Protect
End Sub
Function GetLastRow(sh As Worksheet, column As Long)
' Function will return the last effective cell in specified column on worksheet
' sh: Worskheet object i.e., Worksheets("Sheet1")
' column: long/integer value of column, i.e., column A = 1, column N = 12, etc.
' Modified from :
' http://stackoverflow.com/questions/11169445/error-in-finding-last-used-cell-in-vba
'
With sh
If Application.WorksheetFunction.CountA(.Cells) <> 0 Then
lastRow = .Cells.Find(What:="*", _
After:=.Cells(1, column), _
Lookat:=xlPart, _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious, _
MatchCase:=False).Row
Else
lastRow = 1
End If
End With
GetLastRow = lastRow
End Function
元の投稿:
誰かが助けてくれることを願っていました。
在庫レベルを確認し、カウント値または期待値と比較できるようにする Excel プログラムを作成しました。これにより、注文する必要があるアイテムの数を確認できます。
私が望んでいたのは、(別のタブで) 製品コード、製品名、および注文する数量のみを表示する別のリストを生成することでした。
すべてがカウントされるメイン タブは、Sheet06 とも呼ばれる「フル リスト」という名前です。
複数の行がありますが、私が興味を持っているのは行 9 から始まり、列 C (製品コード)、D (製品名)、および P (注文数) にあり、製品の行は 1000 を超えています読みやすくするためにいくつかの空白行が使用されています (必要に応じて、これらの行を何かで埋めるか、列 Q を使用して TRUE/FALSE "=ISNUMBER(P9)" 式を使用できます)。
列 P に注文が必要ない場合は、空白スペース (="") またはテキストがあります。
|A|B|Product Code|Name |E|F|G|H|I|J|K|L|M|N|O|Order
9 | | |00002 |something| | | | | | | | | | | |""
10| | |345663 |something| | | | | | | | | | | |3
11| | |6534214 |something| | | | | | | | | | | |15
12| | | | | | | |(Blank row)| | |
13| | |24435224 |something| | | | | | | | | | | |DONT ORDER
14| | |8784347 |something| | | | | | | | | | | |8
15| | |357823 |something| | | | | | | | | | | |""
私が作成しようとしている (そして失敗している) のは、"Order" aka Sheet07 と呼ばれる別のタブです。
他のタブの行 P に数字がある場合にのみ、製品コード、名前、および注文数をコピーすることになっています。また、式 (=E9-F9+G9....) ではなく、オーダー (18、4 など) に対して生成された値をコピーする必要があります。
|A|Product Code|Name |Order
4| |345663 |something|3
5| |6534214 |something|15
6| |8784347 |something|8
私はかなり長い間これに苦労してきましたが、精神的な障害に達しました。
どんな助けでも大歓迎です:)