将选定单元格的总和复制到剪贴板

有时想出一些东西需要很长时间。 但是当它们已经被发明出来时,事实上它们看起来很明显,甚至是平庸的。 来自“什么,有可能?”系列。

从最初的版本开始,Microsoft Excel 窗口底部的状态栏通常会显示选定单元格的总数:

将选定单元格的总和复制到剪贴板

如果需要,甚至可以右键单击这些结果并从上下文菜单中准确选择我们想要查看的功能:

将选定单元格的总和复制到剪贴板

就在最近,在最新的 Excel 更新中,微软开发人员添加了一个简单而巧妙的功能——现在当您单击这些结果时,它们会被复制到剪贴板!

将选定单元格的总和复制到剪贴板

美: 

但是那些还没有(或已经?)拥有这样一个 Excel 版本的人呢? 这就是简单的宏可以提供帮助的地方。

使用宏将所选单元格的总和复制到剪贴板

在选项卡中打开 开发人员 (开发商) 编辑 Visual Basic中 或使用此键盘快捷键 其他+F11. 通过菜单插入新的空模块 插入 - 模块 并在那里复制以下代码:

Sub SumSelected() If TypeName(Selection) <> "Range" Then Exit Sub With GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}") .SetText WorksheetFunction.Sum(Selection) .PutInClipboard 以 End Sub 结束  

它的逻辑很简单:

  • 首先是“防止傻瓜”——我们检查突出显示的内容。 如果没有选择单元格(但是,例如,图表),则退出宏。
  • 然后使用命令 获取对象 我们创建一个新的数据对象,稍后将存储我们选定单元格的总和。 一个长而难以理解的字母数字代码实际上是指向库所在的 Windows 注册表分支的链接 Microsoft Forms 2.0对象库,它可以创建这样的对象。 有时这个技巧也被称为 隐式后期绑定. 如果您不使用它,则必须通过菜单在文件中创建指向该库的链接 工具——参考.
  • 所选单元格的总和被认为是一个命令 WorksheetFunction.Sum(选择),然后使用命令将结果量放在剪贴板上 放入剪贴板

为了便于使用,您当然可以使用 按钮将此宏分配给键盘快捷键 标签 开发人员 (开发者——宏).

如果您想查看运行宏后究竟复制了什么,您可以使用相应组右下角的小箭头打开剪贴板面板 (首页) 标签:

将选定单元格的总和复制到剪贴板

不仅金额

如果除了平庸的数量之外,您还想要其他东西,那么您可以使用该对象为我们提供的任何功能 工作表功能:

将选定单元格的总和复制到剪贴板

例如,有:

  • 总和 - 总和
  • 平均值——算术平均值
  • 计数 - 带有数字的单元格数
  • CountA - 填充单元格的数量
  • CountBlank – 空单元格的数量
  • Min – 最小值
  • Max – 最大值
  • 中位数 – 中位数(中心值)
  • ...等

包括过滤器和隐藏的行列

如果行或列在所选范围内被隐藏(手动或通过过滤器)怎么办? 为了不在总数中考虑它们,我们需要通过添加到对象来稍微修改我们的代码 选择 财产 特殊细胞(xlCellTypeVisible):

Sub SumVisible() If TypeName(Selection) <> "Range" Then Exit Sub With GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}") .SetText WorksheetFunction.Sum(Selection.SpecialCells(xlCellTypeVisible)) 。 PutInClipboard 以 End Sub 结束  

在这种情况下,任何总函数的计算将仅应用于可见单元格。

如果你需要一个活的配方

如果你有梦想,你可以想出一些场景,最好不要将数字(常数)而是将一个活的公式复制到缓冲区中,它计算我们需要的选定单元格的总数。 在这种情况下,您必须从片段中粘贴公式,添加删除美元符号并用分号替换逗号(在 VBA 中用作几个选定范围的地址之间的分隔符):

Sub SumFormula() If TypeName(Selection) <> "Range" Then Exit Sub With GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}") .SetText "=СУММ(" & Replace(Replace(Selection.地址, ",", ";"), "$", "") & ")" .PutInClipboard End With End Sub  

附加条件求和

最后,对于完全疯子,您可以编写一个宏,它不会总结所有选定的单元格,而只会总结那些满足给定条件的单元格。 因此,例如,如果它们的值大于 5 并且同时填充任何颜色,则宏将看起来像这样将所选单元格的总和放入缓冲区:

 Sub CustomCalc() Dim myRange As Range If TypeName(Selection) <> "Range" Then Exit For Each cell In Selection If cell.Value > 5 And cell.Interior.ColorIndex <> xlNone Then If myRange Is Nothing 然后设置 myRange = cell Else Set myRange = Union(myRange, cell) End If End If Next cell With GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}") .SetText WorksheetFunction.Sum(myRange) .PutInClipboard 以 End Sub 结束  

正如您可以轻松想象的那样,条件可以任意设置——最多为单元格格式——任意数量(包括通过逻辑运算符或或与将它们连接在一起)。 有很大的想象空间。

  • 将公式转换为值(6种方式)
  • 什么是宏,如何使用它们,在哪里插入 Visual Basic 代码
  • Microsoft Excel 状态栏中的有用信息

发表评论