我在VBA編碼真的很新的,目前我有一個電子表格包含組及帳戶不同層次,下面是一個簡單的例子:最佳環路我的VBA任務
集團碼是所有的數字和帳戶代碼以3個字母開頭,說ABC後面跟着2或3個數字,所以一個例子是ABC100,第一個2個帳戶代碼字母總是相同的,即在該例子中是「AB」,所以另一個帳戶代碼可能是ABS80。 組/賬戶代碼位於對應於組/賬戶的單獨列中。
我的目標是建立一個宏這會爲我提供一個總結,在被稱爲一個單獨的標籤說結果,所有組(只)以上給定帳戶/的集團在層次結構樹,與主題帳戶/組在底部。
所以說明使用上面的例子。如果拍攝對象帳戶是ABC100
,然後運行宏後,我希望在結果看標籤:
到目前爲止,我設法宏觀找到位置在層次結構中的主體帳戶和複製一行到結果」標籤。但是我卡上的下一步是隻提取直接上級組(同時忽略賬戶 & 組之間)並將它們粘貼到結果選項卡中。
我知道我需要使用循環,並嘗試For Next
與If Then
之間的語句,但不斷收到錯誤消息。真的很感激,如果有人能夠讓我正確的使用哪個循環。
謝謝!下面是我當前的代碼:
Sub SearchRelevantAccGp()
'
' This macro finds the account or group and provides a summary of all affected groups
' within the Hierarchy
Dim searchvalue As Variant
searchvalue = Sheets("Dashboard").Range("B2")
Dim hierarchy As Integer
Sheets("Main Tree").Select
cells.Find(What:=searchvalue, After:=ActiveCell, LookIn:=xlFormulas, LookAt _
:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False, SearchFormat:=False).Activate
hierarchy = ActiveCell.Offset(0, 5)
Dim startref As Variant
startref = "I" & ActiveCell.Row
Dim rownumber As Integer
rownumber = ActiveCell.Row
ActiveCell.EntireRow.Select
Selection.Copy
Sheets("Result").Select
Rows(hierarchy).Select
ActiveSheet.Paste
Sheets("Main Tree").Select
Range(startref).Select
For i = rownumber To 2 Step -1
If cells(i - 1, 9).Value - 1 = cells(i, 9).Value And cells(i - 1, 3).Value = "Group" Then
Rows(i).Select
Selection.Copy
Sheets("Result").Select
Rows(hierarchy - 1).Select
ActiveSheet.Paste
End If
Next i
End Sub
非常感謝Paul的解決方案。我猜在這種情況下最終的結果是一樣的。我會嘗試實施這些代碼,看看是否能解決我的問題。 – Jay
嗨保羅,我測試了代碼,不幸的是它沒有按預期工作。我認爲代碼定義「組」的方式出了問題。您可以在我的原始數據集中看到,如果它是B列中的帳戶代碼(ABC100),則A列將顯示「帳戶」而不是「組」,您的屏幕截圖就是這種情況。當我運行宏時,它只會取消隱藏標題行和「查找」行。另外,'find'函數不是基於匹配整個單元格的值,因此如果我要找到「ABC10」,例如,如果它位於「ABC10」之上,則會出現帳號「ABC109」。謝謝! Jay – Jay
我做了你所提到的改變:它檢查A列中的「Group」一詞,Find函數查看整個單元格值 - 如果搜索「ABC10」,它將不會返回值「ABC109」 –