我正在嘗試開發一個 Excel VBA 表,其中有一個摘要表。程式必須遍歷所有標題為“修訂”的活動作業表,如果當前修訂作業表中沒有任何內容,則能夠復制和粘貼最新修訂作業表中的所有內容。但是,如果它確實從以前的修訂表中找到了一些東西,它必須在該行的摘要表上進行反擊。
例如,在摘要頁面上會是這樣的:
修訂標題
0 蘋果
遍歷所有作業表
在修訂版 1 表上查找蘋果
將蘋果修訂版 1 粘貼到摘要表
修訂標題
1 蘋果
到目前為止,我的代碼是這樣的,但我認為它并不在正確的軌道上,其中“BOM”是上面示例中的摘要表。代碼還必須遍歷所有行,直到它檢測到第一個空白行,然后移動到下一張表,直到沒有更多的表名為“revision”。
Dim wkst As Worksheet
Dim row As Long 'if you ever exceed 32,000 this will fail as integer
row = 1
For Each wkst In ActiveWorkbook.Worksheets
' loop through the Open worksheets
If wkst.Name <> "Summary" Then
Sheets("BOM").Range("B2").Value = Worksheets(I 1).Range("B2")
Sheets(I 1).Range("B2").Copy
Sheets("BOM").Range("B5").PasteSpecial xlPasteValues
row = row 1
End If
Next
End Sub
uj5u.com熱心網友回復:
我很抱歉,因為我很難理解你想要什么。
特別是您提到了一張名為“summary”的作業表和一張名為“BOM”的作業表。
無論如何,下面是我對你想要什么的猜測

代碼假設上圖中 A 列的資料是作業表“rev1”的 A 列資料,C 列是作業表“rev2”的 A 列資料,E 列是作業表 A 列的資料表“rev3”。
目標是計算名稱包含“rev”的所有作業表上所有現有資料的出現次數。
因此,根據圖片中看到的示例,預期結果是 G 列圖片中的結果,該結果將放入名為“摘要”列 A 的作業表中。例如:標題“AA”的出現次數為兩次次(2 AA),即在作業表“rev1”中一次,在作業表“rev2”中一次......標題“G”的出現是四次(4 GG),即在作業表“rev1”中一次,并且在作業表“rev2”中兩次,在作業表“rev3”中一次......等等。其他“rev”表上不存在的標題是唯一的,前綴為“1”。
Sub test()
Dim arr As Object: Set arr = CreateObject("scripting.dictionary")
Dim el As Variant
Dim sh As Worksheet
Dim cnt As Integer
Dim c as Range
For Each sh In Worksheets
If InStr(sh.Name, "rev") Then _
For Each c In sh.Range("A2", sh.Range("A" & Rows.Count).End(xlUp)): arr(c.Value) = 1: Next
Next
For Each el In arr
For Each sh In Worksheets
If InStr(sh.Name, "rev") Then cnt = cnt Application.CountIf(sh.Range("A:A"), el)
Next sh
Sheets("summary").Range("A" & Rows.Count).End(xlUp).Offset(1, 0).Value = CStr(cnt) & " " & el
cnt = 0
Next el
End Sub
代碼的作用:
它收集每張紙上名稱包含“rev”的所有唯一值,從單元格 A2 開始,一直到變數 arr 中最后一個值的任何行。
然后它回圈到 arr 中的每個元素,以計算每個作業表上有多少個名稱包含“rev”的元素,并將其保存到變數 cnt 中。
然后最后它在作業表“摘要”列A中寫入cnt值和元素名稱。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/473817.html
