首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >VBA :列中的不同值及其相关的不同值

VBA :列中的不同值及其相关的不同值
EN

Stack Overflow用户
提问于 2020-10-27 08:27:20
回答 1查看 203关注 0票数 0

我试着在vba中做一些类似的事情,我只知道在python循环中。有人能教我如何用vba (函数或模块宏)来做这件事吗?

对于A4:A30栏中的每个不同值,C4:C30栏中不应超过9个不同值。如果为真,则在单元格A1中返回“OK”。如果为false,则在单元格A1中返回“错误”

如图中所示,山姆不应该有超过9种不同的水果。玛丽也是如此。

最新情况:

我尝试过filterxml方法,但不幸的是,它似乎对我不起作用:1

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-27 09:03:35

用过滤器/唯一公式求解excel

在Excel365中实现它的最简单的方法是:添加额外的列,该列对每个键(名称)的唯一值(水果)进行计数,并在该列中找到最大值。

从找到每一个非空白的公式开始,它符合关键。

代码语言:javascript
运行
复制
=FILTER($C$4:$C$30,($A$4:$A$30=A4)*($C$4:$C$30<>""))

然后删除重复的:

代码语言:javascript
运行
复制
=UNIQUE(FILTER($C$4:$C$30,($A$4:$A$30=A4)*($C$4:$C$30<>"")))

然后检查过滤后的数据中有多少单元格没有空白和重复:

代码语言:javascript
运行
复制
=COUNTA(UNIQUE(FILTER($C$4:$C$30,($A$4:$A$30=A4)*($C$4:$C$30<>""))))

然后将我们的新列(在我的例子中是B列)公式扩展到我们的键中的每一行。

最后,将公式添加到检查最大计数器的A1中:

代码语言:javascript
运行
复制
=IF(MAX($B$4:$B$30)<10,"OK","Error - to many velues")

*有一个小错误,应该是"Error - to多个值“=)

下面是工作表在我的测试文件中的外观

excel旧版本的解决方案

我已经检查了我是否能够在没有这些公式的情况下使它工作,并且有可能:

我们需要从计算当前行上方的键值开始。

代码语言:javascript
运行
复制
=COUNTIFS($A$4:A4,A4,$C$4:C4,C4)

如果我们上面有重复的,它们应该已经被计算,所以我们跳过它们:

代码语言:javascript
运行
复制
=IF(COUNTIFS($A$4:A4,A4,$C$4:C4,C4)>1,"",1)

现在我们有"1“或空白的colum。在这种情况下,我们需要计数每一个非空的单元格,其中正确的键(名称),并添加1所以而不是“和”,我们将有"“或1,2,3,4,.

代码语言:javascript
运行
复制
=IF(COUNTIFS($A$4:A4,A4,$C$4:C4,C4)>1,"",COUNTIFS($A$3:A3,A4,$F$3:F3,">0")+1)

编辑

如果值为空,我添加了一个额外的IF跳过键:

代码语言:javascript
运行
复制
=IF(C4="","",IF(COUNTIFS($A$4:A4,A4,$C$4:C4,C4)>1,"",COUNTIFS($A$3:A3,A4,$B$3:B3,">0")+1))

A1中的单元格公式是相同的

代码语言:javascript
运行
复制
=IF(MAX($B$4:$B$30)<10,"OK","Error - to many values")

快速说明:

  • 有些公式的范围从第3行开始,而不是第4行;它的目的是因为我们在上面计算单元格,而在第一行数据中,我们需要选择上面的内容。这段代码假设您在第3行中没有数字(B列)或名称(A列);下面的
  • 是用示例附加屏幕的;这个屏幕有额外的列( do ),这不是必需的,它只显示最终公式是如何创建的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64550587

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档