VBA柜台|如何在Excel VBA中创建计数器? (带有示例)

Excel VBA计数器

MS Excel中具有各种功能,可对值(不管是字符串,数字)进行计数。可以根据一些标准进行计数。功能包括Excel中的COUNT,COUNTA,COUNTBLANK,COUNTIF和COUNTIFS。但是,这些函数无法执行某些任务,例如根据其颜色对单元格进行计数,仅对粗体值进行计数等。这就是为什么我们将在VBA中创建一个计数器,以便我们可以在excel中对这些类型的任务进行计数。

让我们在excel VBA中创建一些计数器。

Excel VBA计数器的示例

您可以在此处下载此VBA Counter Excel模板– VBA Counter Excel模板

以下是VBA中计数器的示例。

范例#1

假设我们有32行这样的数据。我们将创建一个VBA计数器,该计数器将对大于50的值进行计数,并再创建一个计数器以对小于50的值进行计数。我们将以这种方式创建VBA代码,以便用户可以获取Excel中的无限行。

为此,步骤将是:

确保 开发者 选项卡Excel是可见的。要使选项卡可见(如果不可见),请执行以下步骤:

点击 '文件' 功能区中的选项卡,然后选择 '选项' 从列表中。

选择 '自定义功能区” 从列表中,选中复选框 “开发人员”,然后点击 好的.

现在 “开发人员”标签 是可见的。

使用 '插入' 可用的命令 “控件”组 在里面 “开发人员”标签.

同时按下 ALT 键,用鼠标创建命令按钮。如果我们继续按 ALT键,然后命令按钮的边缘将自动与单元格的边界对齐。

右键单击命令按钮以打开上下文菜单(确保 “设计模式” 已激活,否则我们将无法打开上下文菜单)。

选择 '特性' 从菜单中。

更改命令按钮的属性,即名称,标题和字体等。

再次右键单击并选择 “查看代码” 从上下文菜单中。

现在将打开Visual Basic编辑器,默认情况下,已经为命令按钮创建了一个子例程。

我们现在将编写代码。我们将声明3个变量。一个用于循环,一个用于计数,一个用于存储最后一行的值。

我们将使用代码选择单元格A1,然后选择单元格A1的当前区域,然后选择最后填充的行以获取最后填充的行号。

我们将运行 '为了' 在VBA中循环,以检查将A2单元中写入到A列中最后一个填充单元中的值。我们将增加 '柜台' 如果该值大于50,则以1为变量,并将单元格的字体颜色更改为 '蓝色' 如果该值小于50,则该单元格的字体颜色为 '红色的'.

经过检查和计数后,我们需要显示这些值。为此,我们将使用 “ VBA MsgBox”。

代码:

 Private Sub CountingCellsbyValue_Click()Dim i,计数器为Integer Dim lastrow as Long lastrow = Range(“ A1”)。CurrentRegion.End(xlDown).Row For i = 2如果Cells(i,1).Value> 50则进行lastrow counter =计数器+ 1个Cells(i,1).Font.ColorIndex = 5其他Cells(i,1).Font.ColorIndex = 3 End如果下一个i MsgBox“有”&counter&“值大于50” &_ vbCrLf&“有”&lastrow-计数器&“值小于50” End Sub 

停用 “设计模式” 然后点击 “命令按钮”。结果如下。

范例#2

假设我们要使用excel VBA创建计时器,如下所示:

如果我们点击 '开始' 按钮,计时器启动,如果我们单击 '停止' 按钮,计时器停止。

为此,步骤将是:

在Excel工作表中创建这样的格式。

将单元格A2的格式更改为 ‘hh:mm:ss’.

通过使用合并和中心Excel合并单元格C3到G7 在命令 “对齐”组 在里面 “首页”标签.

为刚刚合并的单元格提供单元格A2的引用,然后像设置字体样式一样进行格式化 “巴斯克维尔”,字号为60等。

创建两个命令按钮 '开始''停止' 使用 “插入”命令 可在 “控件”组 在里面 “开发人员”标签.

使用 “属性”命令 可在 “控件”组 在里面 “开发人员”标签,更改属性。

一一选择命令按钮,然后选择 “查看代码” 来自的命令 “控件” 分组 “开发人员” 选项卡以编写代码,如下所示。

从下拉菜单中选择适当的命令按钮。

将模块插入 “ ThisWorkbook” 通过右键单击 “本工作簿” 然后选择 '插入' 接着 '模块'.

在模块中编写以下代码。

代码:

 Sub start_time()Application.OnTime Now + TimeValue(“ 00:00:01”),“ next_moment” End Sub Sub Sub end_time()Application.OnTime Now + TimeValue(“ 00:00:01”),“ next_moment”,, False End Sub Sub next_moment()如果Worksheets(“ Time Counter”)。Range(“ A2”)。Value = 0然后退出Sub Work Workss(“ Time Counter”)。Range(“ A2”)。Value = Worksheets(“ Time Counter“)Range(” A2“)。Value-TimeValue(” 00:00:01“)start_time End Sub 

我们已经使用了“准时应用 对象,用于在计划的时间运行过程。我们计划运行的程序是 “ next_moment”.

保存代码。在A2单元格中写下时间,然后点击 '开始' 按钮启动计时器。

例子#3

假设我们有一个学生名单以及他们打分的分数。我们要计算通过和失败的学生人数。

为此,我们将编写VBA代码。

步骤将是:

通过按打开Visual Basic编辑器 Excel Alt + F11中的快捷方式 然后双击 “ Sheet3(学生人数计数)” 基于Sheet3中的事件插入子例程。

选择 “工作表” 从下拉菜单中。

当我们选择 “工作表” 从列表中我们可以看到,相邻的下拉列表中有各种事件。我们需要选择 “ SelectionChange” 从列表中。

我们将声明VBA变量 “ lastrow” 可以增加最后一行作为学生列表的数量, '经过' 存储一些通过的学生 '失败' 储存一些失败的学生。

我们将最后一行的值存储在 “ lastrow”。

我们将创建 “ for”循环 根据条件进行计数。

如果总分数大于99,则设置了条件,然后将值1加到 '经过' 变量并将1值添加到 '失败' 如果条件失败,则为变量。

最后一条语句成为标题 '概括' 大胆的。

要在工作表中打印值,代码应为:

代码:

 Private Sub Worksheet_SelectionChange(ByVal Target as Range)Dim lastrow As Long Dim pass As Integer Dim failed as Integer lastrow = Range(“ A1”)。CurrentRegion.End(xlDown).Row For i = 2要在单元格(i,5)的情况下lastrow )> 99然后通过=通过+ 1其他失败=失败+ 1如果单元格(1,7).Font.Bold = True,则下一个i Range(“ G1”)。Value =“ Summary” Range(“ G2”)。值=“通过的学生人数为”&通过范围(“ G3”)。值=“失败的学生人数为”&失败End Sub 

现在,只要选择发生更改,值将再次按以下方式计算:

要记住的事情

  1. 在具有.xlsm excel扩展名的VBA中编写代码后,请保存文件,否则宏将无法工作。
  2. 如果已经确定VBA循环中的代码将运行多少次,则使用“ For”循环。