问题描述
|
我已经从Google Analytics(GA)API导入了以下格式的客户及其网站的列表:
Account Profile
Client 1 www.client1.com
Client 1 sub.client1.com
Client 1 tst.client1.com
Client 2 www.client2.com
Client 3 www.client3.com
Client 3 sub.client3.com
我需要的是一个具有唯一帐户名称的下拉列表,然后是另一个具有所选帐户相关配置文件的下拉列表。看起来像这样:
Account Profile
Client 1 www.client1.com
sub.client1.com
tst.client1.com
我们一直在向Google Analytics(分析)添加帐户和配置文件,因此每次运行报告时都需要刷新列表。
我将如何去做呢?
解决方法
只要您具有按帐户排序的列表,就可以使用
Offset
CountA
的混合物来提供所需的所有范围。
步骤将是:
一种。从“帐户”列中获取唯一值(我在此步骤中使用VBA,但您也可以使用频率公式将其混搭-如果可以在此使用VBA,我会避免使用它)。大致情况:
Sub FindUniqueValues(SourceRange As Range,TargetCell As Range)
SourceRange.AdvancedFilter xlFilterCopy,TargetCell,True
End Sub
(为方便起见,我从我的worksheet_change事件中调用了此方法,但是如果您使用vba提取G.A.数据,则可以将其集成到其中)
b。将其输入具有论坛名称=$D$2:INDEX($D$2:$D$5000,COUNTA($D$2:$D$5000))
的命名范围(例如AccountsRange
)-假设您在上一步中将D1
指定为TargetCell
且唯一值不会超过4999(在我的情况下,第一个值是行标题-因此开始来自D2
)
C。将这个名为“ 5”的范围添加为“数据验证列表”的来源-此时您的帐户组合框已完成。我假设您将这个组合框放在E2
中,我将以此为基础导出第二个ComboBox
d。使用公式=INDEX($B$1:$B$5000,MATCH($E$2,$A$1:$A$5000,0),1):INDEX($B$1:$B$5000,COUNTIF($A$1:$A$5000,$E$2)+MATCH($E$2,0)-1,1)
创建一个新的命名范围,例如ProfilesRange
注意:如果您从此处复制粘贴,则上面的公式将在COUNTIF($A
之后包含换行符,并且excel将抱怨无效的公式,只需在COUNTIF
的$A$1
部分中重新输入即可,应该没问题
A2
是G.A.的Account列的开始。导入的数据(标题为“ 18”,此处最多假定4999个数据行)“ 11”是上一个AccountsRange下拉步骤中的组合框。 Match
步骤中需要-1,因为第一个值行的偏移量必须为0,而不是从Match
返回的1。第二个是列偏移量(如果您需要跳几个列来获取辅助数据,则可以更大)。 CountIf
可以很容易地说明:)这基本上使我们从起点开始在最终范围内需要的单元数。
e。创建使用ProfilesRange作为其源的新数据验证列表,并完成第二个组合框。
可能出现的问题:
当您更改帐户组合框时,配置文件组合框可能会出错,因为配置文件中的值不太可能出现在新客户端中。您可以忽略该错误(一旦您从新刷新的下拉列表中选择了正确的值,该错误将自行修复,或者当值更改为ѭ11changes时,在其中抛出更多的VBA仙尘以清除下拉单元格。
数据验证列表抱怨您尝试设置ProfilesRange时评估错误。可以忽略此错误并继续操作。基本上,这意味着ProfilesRange不会返回任何可计算的内容(很可能是因为您没有在AccountsRange中选择任何实际可计算为ProfilesRange的内容-当然,假设此处使用的公式的实际单元格范围实际上对您的工作表是正确的)
感谢osknows的技巧和对forumlae的改进(在下面的评论中):避免使用OFFSET,因为OFFSET在较大范围内非常慢,并且易变。 = OFFSET($ D $ 2,0,COUNTA($ D $ 2:$ D $ 5000)可以替换为= $ D $ 2:INDEX($ D $ 2:$ D $ 5000,COUNTA($ D $ 2:$ D $ 5000) )(指定的范围)(此技巧现已纳入此解决方案中,因此除非您查看版本历史记录,否则您将看不到原始的Offset论坛)。