Excel - 计算与 ID 匹配的唯一值,针对 100,000 多个案例进行了优化

2024-01-27

参考下面的 Excel 屏幕截图,我正在寻找一个公式解决方案,用于计算 A 列中每个 ID 号的 B 列(颜色)中唯一值的数量。

我已将所需结果归入 C 列。因此,例如,ID 1 (A2) 只有一种唯一颜色:灰色 (B2),这将在 C2 中返回 1。 ID 2 只有一种唯一颜色,即黄色(B3、B4),并且在 C3 和 C4 中返回 1。 ID 3 有两种独特的颜色:蓝色和紫色,因此在 C5 到 C8 中返回 2。 ETC。

因为这将运行接近 100,000 行,所以我遇到的许多基于索引和/或匹配的解决方案需要很长时间才能计算。我发现 ID 值全部按升序排列,可以通过以 =IF(A2=A1 或类似的内容开始公式来加快速度。提前感谢任何对如何计算有想法的人用精益公式解决这个问题。

注意:我正在处理的文件也有接近 100 列。不需要辅助列的解决方案将是理想的。

编辑/添加:在我的主数据文件中,B 列中有空白单元格的实例。在计算 C 列结果时是否有办法忽略空白单元格?


下面是一个 VBA 例程,对于该数量的条目应该可以快速运行。我们创建一个类模块(用户定义对象),其中包含与每个 ID 关联的颜色集合(字典)以及该颜色的计数。 (实际上并不需要计数,但添加它很简单,以防万一您需要它用于其他目的;也可以作为一些可以完成的操作的演示)。

然后我们在相邻列中输出结果,如屏幕截图所示。结果可以输出到其他地方,甚至可以输出到不同的工作表上,只需更改少量代码即可。

请务必阅读模块开头的注释,以获取重要信息以及有关正确设置的信息。

班级模块


Option Explicit
'RENAME this module:  cID

Private pID As String
Private pColor As String
Private pColors As Dictionary

Public Property Get ID() As String
    ID = pID
End Property
Public Property Let ID(Value As String)
    pID = Value
End Property

Public Property Get Color() As String
    Color = pColor
End Property
Public Property Let Color(Value As String)
    pColor = Value
End Property

Public Property Get Colors() As Dictionary
    Set Colors = pColors
End Property
Public Function ADDColor(Value As String)
    'Might as well also count # of times this color assigned
    If Not pColors.Exists(Value) Then
        pColors.Add Key:=Value, Item:=1
    Else
        pColors(Value) = pColors(Value) + 1
    End If
End Function

Private Sub Class_Initialize()
    Set pColors = New Dictionary
End Sub

常规模块

EDIT (编辑以消除空白行的计数)


Option Explicit
'Set reference to Microsoft Scripting Runtime (Tools/References)

Sub IDColorCount()
    Dim cID As cID, dID As Dictionary
    Dim wsData As Worksheet, rData As Range
    Dim vData As Variant, vRes As Variant
    Dim I As Long

'Set the data worksheet and range
'Read the data into an array for faster calculations
Set wsData = Worksheets("sheet1")
With wsData
    Set rData = .Range(.Cells(1, 1), .Cells(.Rows.Count, 1).End(xlUp)).Resize(columnsize:=2)
    vData = rData
End With

'Go through the data and collect the information
Set dID = New Dictionary
For I = 2 To UBound(vData, 1)
  If Not vData(I, 1) = "" Then
    Set cID = New cID
    With cID
        .ID = vData(I, 1)
        .Color = vData(I, 2)
        .ADDColor .Color

        If Not dID.Exists(.ID) Then
            dID.Add Key:=.ID, Item:=cID
        Else
            dID(.ID).ADDColor .Color
        End If
    End With
  End If
Next I

'Size the results array
ReDim vRes(1 To UBound(vData), 1 To 1)
vRes(1, 1) = "Count"
For I = 2 To UBound(vData, 1)
    If Not vData(I, 1) = "" Then _
        vRes(I, 1) = dID(CStr(vData(I, 1))).Colors.Count
Next I

'The results can  be written anyplace
With rData.Offset(0, 2).Resize(columnsize:=1)
    .EntireColumn.Clear
    .Value = vRes
End With

End Sub

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Excel - 计算与 ID 匹配的唯一值,针对 100,000 多个案例进行了优化 的相关文章

  • SSIS使用列位置而不是名称导入Excel文档

    我想知道是否可以通过按位置引用列来使用 SSIS 导入 Excel 文档 例如 导入列 A D M AA 等 我问这个问题是因为我需要从第三方加载多个 Excel 文档 每个文档在相应的列中包含相同的数据类型 但每个文档的列名称不同 Tha
  • Windows Azure 远程站点“Microsoft.ACE.OLEDB.12.0”提供程序未在本地计算机上注册[重复]

    这个问题在这里已经有答案了 以下代码在我的本地开发计算机上可以正常运行 但是当我部署它时 我收到以下错误消息Azure 远程网站 我已经查看了SO答案和谷歌搜索结果 但我仍然不清楚我必须在本地计算机上安装什么 这样当我将代码推送到Azure
  • 需要在Excel中合并3列

    我有 3 列 A B C 我需要合并这 3 列 并且我已经应用了 forumala A1 B1 C1输出为 E 列 我需要输出为 D 列 下面的公式将达到您想要的结果 TEXTJOIN TRUE A1 C1 Textjoin 的工作方式类似
  • mysql计算唯一行值

    TABLE quotation id clientid 1 25 2 25 3 25 4 25 5 26 如何查询有多少个不同的客户端TABLE quotation 我不希望重复的条目被计算多次 我需要的答案是2 在 1 行中 因为唯一的非
  • 强力查询历年产品利润对比

    我有一个数据集 其中包含公司 产品 利润和年份 公司每年都会销售少量产品并获得利润 公司没有必要在明年销售相同的产品 他们可能会省略以前的产品并添加新的少量产品 我只想对两年的产品进行逐个比较 如下所示 我的数据集是 Company Pro
  • 如果 FIND 函数在 vba 中找不到任何内容,那么[重复]

    这个问题在这里已经有答案了 我目前正在自动化执行以下步骤的手动流程 1 提示用户打开一个数据文件并打开文件 2 插入4列 3 使用文件中已有的数据创建格式为 DD MM YYYY TEXT 的唯一字符串 其中文本是变量 4 使用 if 语句
  • 使用 MemoryStream 创建 Open XML 电子表格时的 Excel 和“不可读内容”

    使用 Open XML SDK v2 0 创建 Excel 电子表格时 我们的 Excel 输出最初可以成功运行几个月 最近Excel 所有版本 开始抱怨 Excel在 zot xlsx 中发现不可读的内容 是否要恢复此工作簿的内容 我们正
  • 通过 PHP 检测 excel .xlsx 文件 mimetype

    我无法通过 PHP 检测 xlsx Excel 文件的 mimetype 因为它是 zip 存档 文件实用程序 file file xlsx file xlsx Zip archive data at least v2 0 to extra
  • Excel 宏与 Javascript

    我希望使用 Javascript 中的宏而不是默认的 VBA 来操作 Excel 电子表格 我可以使用以下 VBA 代码执行 javascript 代码 javascript to execute Dim b As String b fun
  • SQL如何将两个日期之间一小时内的事件相加并显示在一行中

    我正在使用 C 和 SQL Server 2005 开发一份报告 我只需显示我们每小时获得的点击次数 桌子很大 输出应如下所示 Row Date Time Hit Count 1 07 05 2012 8 00 3 2 07 05 2012
  • 将包含换行符的文本文件导入到 Excel 中

    我有一个纯文本文件 如下所示 some text containing line breaks 我正在尝试说话excel 2004 Mac v 11 5 正确打开此文件 我希望只看到一个单元格 A1 包含上述所有内容 不带引号 但可惜的是
  • 选择在 Excel 宏(VBA 中的范围对象)中具有值的列

    如何修改 VBA 中的这一行以仅选择具有值的列 Set rng Range A1 Range A65536 End xlUp SpecialCells xlCellTypeVisible 我不认为我做的事情是正确的CountLarge财产是
  • 标准 VBA 函数“找不到项目或库”

    因此 我必须在我的 PC 上运行别人的 Excel 应用程序 并且在标准函数 如日期 格式 十六进制 中间等 上收到 找不到项目或库 的信息 一些研究表明 如果我在这些函数前加上 VBA 前缀 如 VBA Date 中那样 它会正常工作 网
  • 在 VBA 中按键对字典进行排序

    我使用 VBA 创建了一个字典CreateObject Scripting Dictionary 将源单词映射到要在某些文本中替换的目标单词 这实际上是为了混淆 不幸的是 当我按照下面的代码进行实际替换时 它将按照源单词添加到字典中的顺序替
  • For...VBA 中的下一个循环超出限制

    我正在使用一个For Next循环填充数组 如下所示 ReDim array 1 to 100 1 to 100 For i 1 to 100 Next i But the i计数器似乎总是转到 101 而不是停止在 100 因此 这会在我
  • 在 VBA 中循环合并单元格

    是否可以循环遍历合并的单元格vba questions tagged vba 我的范围内有 6 个合并单元格B4 B40 我只需要这 6 个单元格中的值 6 次迭代 上面的答案看起来已经让你排序了 如果您不知道合并的单元格在哪里 那么您可以
  • laravel中过滤后如何导出excel?

    我想仅导出视图刀片中过滤的数据 我正在使用 Laravel 7 和 maatwebsite excel 3 1 和 PHP 7 4 2 我浏览了文档并应用了这个 View a href class btn btn success i cla
  • 如何使用VBA根据条件删除Excel中的行?

    我目前正在构建一个宏来格式化数据表并删除不适用的数据行 具体来说 我希望删除列 L ABC 的行以及删除列 AA DEF 的行 到目前为止 我已经实现了第一个目标 但还没有实现第二个目标 现有代码是 Dim LastRow As Integ
  • Pandas 0.22.0:IndexError:读取 xls 时列表索引超出范围

    我正在尝试将 282Mb 65536 行 x 138 列 xls 文件加载到 pandas 数据框中 import pandas as pd import os filename r invoicing xls dir os path di
  • 文件夹.文件的相对路径

    我有一个 Excel 文件 在同一文件夹中还有一个包含我想要包含的 CSV 文件的文件夹 使用 来自文件夹 查询 第一步将给出以下查询 Folder Files D OneDrive Documents Health Concept2 现在

随机推荐

  • Slurm 多处理 Python 作业

    我有一个 4 节点 Slurm 集群 每个节点有 6 个核心 我想提交一个利用多重处理的测试 Python 脚本 它会生成打印正在运行的节点的主机名的进程 如下所示 def print something print gethostname
  • 仅限水平滚动!

    我有一个包含水平菜单的菜单 菜单由无序列表组成 我希望每当菜单超出宽度时 div 都会获得水平滚动条 div 我尝试使用这些 CSS 定义 div position absolute width 380px overflow auto ov
  • 输入“用户|未定义”不可分配给类型“用户”

    用户控制器 import User from user export class UserController public static async getuser ctx BaseContext const userRepository
  • Safari 中的 CSS 过渡变换 z-index 冲突(适用于 Chrome / FF)

    我正在尝试使用 CSS 过渡和旋转效果来显示名片 我在 Chrome 和 FF 中一切正常 但在 Safari 中它扭曲了 div 我尝试应用以下属性但无济于事 transform translateZ 0px transform styl
  • d3 力定向图中的缩放和刷动

    我在执行缩放时让 D3 执行正确的刷牙时遇到问题 我在这里创建了一个 jsFiddlehttp jsfiddle net Gwp25 2 http jsfiddle net Gwp25 2 用我在其他地方找到的一些虚拟数据显示网络 接下来的
  • 以编程方式将音乐添加到 iOS

    假设我想创建一个从互联网下载音乐文件的 iOS 应用程序 那么是否可以将此音乐文件放在音乐库中以便我可以播放它 这是不可能的 将音乐添加到资料库的唯一方法是通过 iTunes 或 iTunes Store 应用程序 即使您确实找到了一种方法
  • 通过使用 React 按钮设置状态来循环遍历数组中的对象

    所以我有一些想要循环浏览的数据 const data names name Jordan additional data name Holly additional data name Sean additional data Using
  • 使用 PrintDocument 打印多页

    我正在尝试打印发票 发票应该能够在多页上打印 但这就是问题出现的地方 我可以在单页上完美地打印发票 但是一旦发票不适合在单页上打印 打印作业就会退出第一页 这是我正在使用的代码 artikelen 是文章列表 List 我读过几个类似的例子
  • 生产环境中的 Rails 服务器如何工作?

    我想知道 总的来说 它更像 PHP 它加载到内存中 执行 然后在每次连接时终止 或者像 Node js 单个实例保留在内存中并接受所有请求 从技术上讲是后者 但根据应用程序服务器 可以将其设置为look喜欢前者 因为前者更容易管理 Phus
  • 如何在 Dropwizard(泽西岛)中记录 JSON 响应

    我想知道如何配置 Dropwizard 来记录 JSON 响应 在 Service 子类 例如 HelloWorldService 的 run 方法中 添加 environment setJerseyProperty ResourceCon
  • pthread的调度方法?

    由于没有显式调度 pthread 被调度为由内核以随机方式运行 pthread 库中是否定义了相同的调度方法 例如优先级 线程的优先级被指定为增量 该增量被添加到进程的优先级上 更改进程的优先级会影响该进程中所有线程的优先级 线程的默认优先
  • 如何向 DetailDisclosureButton 添加标签文本?

    我正在使用 iOS Swift 2 0 应用程序 我一生都无法弄清楚如何将文本设置在右侧UITableViewCell就在披露指示符 V 形之前 除了创建自定义cell accessoryView 这是 设置应用程序 的屏幕截图 它正是我想
  • PHP 命令,未找到

    我尝试安装composer通过 PHP 命令 如 getcomposer 站点中所述 但 bash 抛出错误 bash php command not found 所以我在谷歌上搜索了一下 我得到了一些答案 1 添加php二进制文件路径 P
  • C# 中灵活的日志记录接口设计

    我想编写自己的日志记录类 用 C 编写 它实现一个标准接口 我可以从代码的任何部分调用该接口 我的想法是让多个 Log 类实现 Logger 接口 每个类都有其特定的日志目的地 例如 FileLogger 将实现记录到文件 TextBox
  • 从 scala 访问公共静态 java 方法

    我正在尝试在这里使用 Java facebook 库http restfb com publishing http restfb com publishing在 scala play2 应用程序中 但是当尝试调用静态时with下面的方法 它
  • 我该如何修复 AttributeError: 'dict_values' 对象没有属性 'count'?

    这是我的code http pastebin com tzPpqE97文本文件是here http www dropbox com s 2bklv7p4ylq8wur web graph zip dl 0http import networ
  • IBM MQ v8 和 Glassfish 本地设置端口配置问题

    给出以下本地设置 IBM WebSphere MQ Advanced for Developers V8 0 帕亚拉4 1 2 172 我想通过默认端口 1414 以外的 JMS 连接到本地队列管理器 尽管我向连接工厂添加了几个属性来配置端
  • 如何将对象注入到 WCF 服务中

    如果我有这样的服务定义 实现 using System using System ServiceModel namespace aspace service ServiceContract Namespace http aspace ser
  • Web API 方法返回 JSON 数据

    我正在使用 ASP net Web API 2 0 并且希望我的方法仅以 JSON 格式返回数据 请建议对 API 控制器类中的以下方法进行代码更改 public async Task
  • Excel - 计算与 ID 匹配的唯一值,针对 100,000 多个案例进行了优化

    参考下面的 Excel 屏幕截图 我正在寻找一个公式解决方案 用于计算 A 列中每个 ID 号的 B 列 颜色 中唯一值的数量 我已将所需结果归入 C 列 因此 例如 ID 1 A2 只有一种唯一颜色 灰色 B2 这将在 C2 中返回 1