我需要一些幫助來遍歷三個範圍(工作表)和來回檢查數據。但這些For循環正在殺死我..三個循環對我來說有點過分,我甚至不知道如何在邏輯上分散代碼,什麼地方等。Excel vba - 比較三個範圍
好吧,所以基本上我收集這三個範圍到自己的變體數組:
- 摘要
- 用戶
- 文章
我這裏有片,在線觀看。不需要下載它或任何東西。如果彙總表爲空,那麼我在那裏收集數據的宏代碼。這是按照它應該做的。 https://skydrive.live.com/view.aspx?cid=5D018DB0458F03ED&resid=5D018DB0458F03ED%21164
該電子表格中有一些挪威語的話,但這應該不重要:)它基本上是反對(總結),Brukere(用戶)和Artikler(文章)。
無論如何,我想確保彙總表包含每個用戶多次有文章。基本上它應該是鏡像的。如果我從用戶工作表中刪除一行(姓名),那麼這些行也應該從彙總表中刪除。但同時我也想保留彙總表中D列的數據。因此,我需要保留這些數據以及用戶ID和文章ID,以確保D列中的數據位於正確的位置。
這是我的(壞)的代碼,因爲它是現在..
With shtSummary
ReDim tempArr(1 To UBound(arrUsers) * UBound(arrarticles), 1 To 6)
If Not .Range("A2") = "" Then
arrsummary = .Range("A2", .Cells(Rows.Count, "A").End(xlUp)).Resize(, 6)
' Start collecting data, make sure summary sheet contains refreshed data while keeping the amount of each item for that particular user
For u = 1 To UBound(arrsummary)
For i = 1 To UBound(arrUsers)
For p = 1 To UBound(arrarticles)
j = j + 1
' Check ID
If arrsummary(u, 1) = arrUsers(i, 1) And arrsummary(u, 3) = arrarticles(p, 1) Then
' ID
tempArr(j, 1) = arrUsers(u, 1)
' Name
tempArr(j, 2) = arrUsers(u, 2)
' Article Number
tempArr(j, 3) = arrarticles(i, 1)
' Article Name
tempArr(j, 4) = arrarticles(i, 2)
' Amount of that item
tempArr(j, 5) = arrsumary(u, 5)
' Price of that article
tempArr(j, 6) = arrarticles(i, 3)
End If
Next
Next
Next
Else
' If summary sheet is empty, add all data from the two other sheets
For u = 1 To UBound(arrUsers)
For i = 1 To UBound(arrarticles)
j = j + 1
' ID
tempArr(j, 1) = arrUsers(u, 1)
' Name
tempArr(j, 2) = arrUsers(u, 2)
' Article number
tempArr(j, 3) = arrarticles(i, 1)
' Article name
tempArr(j, 4) = arrarticles(i, 2)
' Article price
tempArr(j, 6) = arrarticles(i, 3)
Next
Next
' Finally add data to spreadsheet Summary
.Range("A2").Resize(j, 6).Value = tempArr
End If
End With
注意如何有三個For循環,這是一個有點太多對我來說,我認爲。我之前在這裏有過類似的線程在Stackoverflow和有人推薦我添加了另一個工作表,基本上覆制摘要工作表中的數據。這樣我就可以從最後的彙總表中清除數據。但我不明白爲什麼需要這樣做,我的意思是,我始終將彙總表中的所有數據保存在shtSummary中,它只是在Array中。但無論如何,這是相同的數據?
編輯:所以簡化這個東西的工作原理。重複每個項目在文章表中的每個用戶名。意思是,如果有10篇文章,請重複用戶名10次。文章可在文章頁面找到,用戶可在用戶表格中找到。但彙總表D列中的數據不是從另一張表中收集的,而是直接輸入彙總表。問題在於,如果我只是清空彙總表並從用戶和文章表中重新導入數據,數據就會丟失。原因很簡單(在上面的宏中完成)。它只是記住每個用戶的每個項目的數量數據,這就是問題所在。如果用戶ID「2」,articleNumber「452」在列D中的值爲2,那麼我想保留該值,並確保ColumnD中的值「2」粘貼到用戶標識「2」的行,articleNumber「452 」。
嗨,文件似乎是從SkyDrive中消失了? – brettdj
對不起,權限都是錯誤的,應該現在就工作吧! :) –
這部分搞糊塗了:「但在同一時間,我想保持從列d的數據彙總表,以及」如果我們刪除的用戶 - 例如Ringo - 那麼應該將與該用戶有關的所有行(本例中爲行20-25)全部刪除,否則應刪除列D以外的所有行? – barrowc