我在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” –