【问题标题】:How does one count the number of occurances of a string on separate worksheets?如何计算一个字符串在不同工作表上出现的次数?
【发布时间】:2019-09-04 14:29:30
【问题描述】:

我有一个工作簿,其中包含多个工作表,用于我正在工作的项目的数据输入和状态监控。 “概述”工作表包含多个列,其中包含基本信息 [编号、联系信息、页码、问题、评论、状态](从 A 列到 F 列)。 “联系人”列在一个单元格中包含用户的姓名、电话号码、电子邮件和组织。

每一行都是一个唯一的条目,但联系人字段会根据同一个人是否有多个输入而重复使用。

我有另一个名为“联系人”的工作表,它与“概述”工作表中“联系信息”单元格中的信息相同,但分为单独的列 [姓名、电话号码、电子邮件、组织](来自列A 到 D)。

数据输入的所有代码都在一个用户表单中,该用户表单将信息添加到两个工作表,特别是提交唯一联系人时的“联系人”工作表。

“联系人”工作表中没有重复的行。

问题来了:

我想在“联系人”工作表的“概览”工作表中跟踪每个联系人的出现次数。该计数还将用于在“概述”工作表上为每个联系人保留唯一的枚举。 (即 John Doe 有 5 个条目,因此 “概述”工作表将为每个条目显示“JD-1”“JD-2”...“JD-5”)。

目的是获得所有输入的汇总列表,但为每个唯一联系人使用唯一编号方法。

任何指导将不胜感激。

我遇到的问题:

我会在单元格中使用 CountIf 类型的函数,但它超出了我在工作表之间的技能水平。

此外,联系人工作表的填充方式是在下一个空行附加唯一条目,因此如果单元格中有公式,则不会将其视为空行。

此工作簿由多个用户使用,并且必须从一开始就可以正常工作。

【问题讨论】:

  • 这里有很多讲述,而较少展示。像英语这样的自然语言往往不精确。最好用输入和预期输出的实际数据来说明示例。

标签: excel vba


【解决方案1】:

不应该需要 VBA,因为你可以用公式来做......


您可以使用CountIf 作为名称,其中联系表上的名称很简单

B1 = CountIf(Overview!A:A,A1) 

概览表本身将是一个自计数表,其中

B2 = CountIf(A$2:A2,A2)

这并不意味着需要拆分您的字符串以包含首字母“JD”,但在您的联系表和index/match 输出中定义这些可能更合适,与您的计数连接,类似于

B2 = Index(Contacts!C:C,Match(A2,Contacts!A:A,0))&"-"&CountIf(A$2:A2,A2)

Sheets("Contacts") 的假定布局:

ColA      ColB     ColC
Name      Count    Initials
John Doe  5       JD

编辑1:

由于用户窗体正在输入新行(假设您已找到 lr(最后一行)并将使用该变量),您可以调整公式以支持 VBA 输入:

' to input formula as is to the sheet:
Cells(lr+1,2).value = "=Index(Contacts!C:C,Match(A" & lr+1 & ",Contacts!A:A))&"-"&CountIf(A$2:A" & lr+1 & ",A" & lr+1 & ")"

'tweak to have VBA do calc
With Sheets("Overview")
    Cells(lr+1,2).value = Application.Index(Sheets("Contacts").Columns(3),Match(.Cells(lr+1,1).value,Sheets("Contacts").Columns(1)) & "-" & Application.CountIf(.Range(.Cells(2,1),.Cells(lr+1,1)),.Cells(lr+1,1).value)
End with

'I use cell references above, but you may want to swap .Cells(lr+1,1).value with the TextBox.Value from the userform

我从匹配公式中删除了“精确匹配”(0),因此请谨慎对待,这可能需要更多努力才能适合您的精确模型。

您可能应该预先确定联系人姓名供人们选择(考虑下拉),这样您就不会在可以/需要找到的姓名中出现差异。

【讨论】:

  • 我在想一些类似的东西!问题是,数据是通过将数据添加到下一个空行的用户表单输入的。如果单元格中有公式,则行不会被视为空。所以我希望在输入数据时动态地做这些事情,这就是为什么我在寻找一个 VBA 选项来标记数据输入表单的末尾。尽量避免后期处理。
  • 另外,“概览”表联系人不仅仅是每个单元格中的名称。所以它需要包含名称,但不完全匹配(因为单元格中的附加信息)。
  • @HealyRT 您可以使用这些公式并进行调整以适应 VBA...实际上让 VBA 将公式粘贴到其中,或者您可以让它计算并输出答案...将更新帖子以举例每个使用联系人公式
  • @HealyRT 见 Edit1。
猜你喜欢
  • 1970-01-01
  • 2014-11-14
  • 1970-01-01
  • 2011-07-01
  • 2014-05-26
  • 1970-01-01
  • 1970-01-01
  • 2011-07-13
  • 1970-01-01
相关资源
最近更新 更多