【问题标题】:Is there a way to distribute data according to a logic in Excel vba?有没有办法根据 Excel vba 中的逻辑分配数据?
【发布时间】:2021-11-04 21:12:17
【问题描述】:

我有一张包含以下数据的 Excel 表格。

有 10,000 个数据行。 9000 个来自“美国”,1000 个来自“其他”国家/地区。

我想均匀分布数据,这样当我有 9 个“美国”后跟 1 个“其他”数据时,分布在各处。

Name Country
Alice USA
Brook Other
Cathy USA
David USA
Esther Other
Freddy USA
Galin USA
Henry Other
Indigo USA
Jenny USA
Kalin Other
Linda USA

如何使用手动和 Excel VBA 完成此操作?欣赏这两种解决方案。谢谢

【问题讨论】:

  • 请访问帮助页面进行询问,例如How to ask,并请注意,除其他外,您应该做一些研究并尝试首先解决您自己的问题。您的问题需要包括您尝试过的内容并描述它是如何失败的。因此,请编辑您的问题以展示您自己的尝试。

标签: excel vba excel-formula


【解决方案1】:

如果您拥有最新版本的 Excel,则可以使用公式来实现。

尝试类似(根据需要调整范围和过滤内容):

=LET(x, FILTER($B$1:$C$12, $C$1:$C$12="a"),
y, FILTER($B$1:$C$12, $C$1:$C$12="b"),
z, ROW(D1:D12), myrows, MAX(z),
ratio, MAX((COUNTA(x)/2)/(COUNTA(y)/2), (COUNTA(y)/2)/(COUNTA(x)/2))+1,
IF(MOD(z,ratio)<>0,
INDEX(x, IF(MOD(SEQUENCE(myrows),ratio)=0, 0, SEQUENCE(myrows)-CEILING(ROW(G1:G12)/ratio-1,1)), SEQUENCE(1,2)),
INDEX(y, IF(MOD(SEQUENCE(myrows),ratio)<>0,0,SEQUENCE(myrows)/ratio), SEQUENCE(1,2))))

例如:

诀窍是为每个结果创建“正确”的序列;对于第一个数组,您要跳过每第 n 行(在您的情况下为 10),并且第 n+1 行不是默认为 n+1,而是 n,而在第二个数组中,您要跳过不是的每一行n 的某个倍数,并按顺序计算第 n 行。

一个警告——事实上,我不相信该公式适用于除 1 之外的重复,即如果您想做 8 行后跟 2 行之类的操作,这将行不通。

【讨论】:

  • 你说:如果你有最新版本的 Excel。看到excel-2010excel-2007 标签了吗?
【解决方案2】:

这甚至适用于旧版 Excel:

如果这是您的数据:

在C2中添加一个Sort列,下面的公式并拉下来:

=IF(B2="USA",COUNTIF($B$2:B2,"USA")+INT((COUNTIF($B$2:B2,"USA")-1)/ROUNDUP(COUNTIF(B:B,"USA")/(COUNTA(B:B)-COUNTIF(B:B,"USA")),0)),COUNTIF($B$2:B2,"Other")*(ROUNDUP(COUNTIF(B:B,"USA")/(COUNTA(B:B)-COUNTIF(B:B,"USA")),0)+1))

然后按C列排序,USAOther均匀分布:

【讨论】:

    猜你喜欢
    • 2013-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-29
    • 1970-01-01
    • 2021-06-05
    相关资源
    最近更新 更多