我有這個工作簿,我一直試圖通過宏代碼工作。我有一些幫助,但似乎沒有人明白我的所作所爲。這是一本工作手冊,用於跟蹤和保存公司中每位用戶的工作量總結。所以,基本上,我有工作簿中的三個工作表:https://skydrive.live.com/view.aspx?cid=5D018DB0458F03ED&resid=5D018DB0458F03ED%21163Excel VBA - 協助比較範圍和數組
- 摘要
- 用戶
- 文章
總的想法是,我將創建從數據透視表彙總表。但我希望使用vba代碼的工作簿是動態的。所以我會在這裏討論每張表。
用戶:本工作手冊僅包含一列(A),A1被稱爲「名稱」,其下的每行包含公司中的每個用戶。
文章:此工作簿包含兩列,A1是文章的名稱(褲子等),另一個是該項目的價格。
摘要:這是一個棘手的部分。此表格應反映其他兩張表格中的數據,但我需要跟蹤每個用戶收到的每件物品的多少個。我將這些數據保存在彙總表的D列中。因此,用戶表中的每個名稱需要重複的次數與「文章」表中的項目一樣多。如果該文章中有10個項目,則該名稱必須重複10次。這樣,我可以說出用戶收到的每件物品有多少。
所以,棘手的部分是實際鏡像來自Users和Articles表單的內容,但仍然保留彙總表中D列的數據。另外請記住,如果我從用戶表中刪除一行,則需要將該用戶從摘要表中完全刪除,包括已註冊的每個項目的數量。如果我將項目添加到「文章」工作表中,則需要爲「彙總」工作表中的每個用戶添加該項目。
我有一些宏代碼,有人幫助我,但我真的沒有得到什麼事情。我沒有那麼堅強的數組和循環。這就是我現在想學習的東西,因爲我看到了學習它的潛力。
但是,我確實需要從自己的範圍內的所有工作表中收集數據,存儲所有數據。然後,我需要比較用戶範圍和彙總範圍,以查看用戶是否在該範圍內。如果是,請確保更新Articles Range中的數據並保留ColumnD的金額。如果它不在彙總表中,請添加它。每個項目也是如此。
但是,如果我輸錯用戶,直到我爲該用戶添加金額之後才意識到該怎麼辦?如果我然後回到Users表並重命名用戶,我是否會丟失之前添加的所有數據?或者是否有可能能夠重命名用戶?在那種情況下,我可能需要爲每個用戶提供一些ID,就像Windows中的CID一樣?這是否有點太矯枉過正?這一切都歸結爲它在時間上更值得的。我真的很感激一些幫助這裏:)
Public Sub NewCollect()
' Declare variables
Dim shtUsers, shtmyArticles, shtmySummary, shtmyAmount As Worksheet
Dim arrUsers, arrarticles, arramount, arrsummary As Long
' Set worksheets
Set shtUsers = Sheets("Brukere")
Set shtArticles = Sheets("Artikler")
Set shtSummary = Sheets("Oppsummering")
Set shtAmount = Sheets("Antall")
' Get range from shtUsers
With shtUsers
If Not .Range("A2") = "" Then
arrUsers = .Range("A2", .Cells(Rows.Count, "A").End(xlUp)).Resize(, 2)
End If
End With
' Get range from shtArticles
With shtArticles
If Not .Range("A2") = "" Then
arrarticles = .Range("A2", .Cells(Rows.Count, "A").End(xlUp)).Resize(, 3)
End If
End With
' Get range from shtAmount (The new sheet)
With shtAmount
If Not .Range("A2") = "" Then
arramount = .Range("A2", .Cells(Rows.Count, "A").End(xlUp)).Resize(, 2)
End If
End With
' Get range from shtSummary
With shtSummary
If Not .Range("A2") = "" Then
'Here I have no idea where to even begin
Else
' If Summary sheet is blank, get data from other sheet and insert
ReDim tempArr(1 To UBound(arrUsers) * UBound(arrarticles), 1 To 6)
For u = 1 To UBound(arrUsers)
For i = 1 To UBound(arrarticles)
j = j + 1
tempArr(j, 1) = arrUsers(u, 1)
tempArr(j, 2) = arrUsers(u, 2)
tempArr(j, 3) = arrarticles(i, 1)
tempArr(j, 4) = arrarticles(i, 2)
tempArr(j, 6) = arrarticles(i, 3)
Next
Next
' Add the data
.Range("A2").Resize(j, 6).Value = tempArr
End If
End With
編輯:我只是增加了一個新的列,以用戶和物品張kalled ID,我可以爲每個項目添加一個ID。現在更新我的SkyDrive上的實際工作表。
啊,現在看起來更像它了! :)但它似乎有點令人生畏和更復雜。你願意做一個小例子嗎?或者這會問得太多?如果你想要更多的觀點,我可以給這個問題增加一個賞金:)這基本上是我還沒有信心的循環。 –
@Kenny,我試圖發佈宏,但他們的重量在37K,我被限制爲30K。 – paxdiablo
好的,我現在添加了一些代碼。這基本上就是我現在所處的位置。 –