基于Excel的比赛计时评分程序的实现

时间:2022-09-11 01:16:36

基于Excel的比赛计时评分程序的实现

摘 要:在日常工作中,经常会有各类比赛活动,而比赛活动对于计时、计分都有着一定要求。快速、准确的统计、反馈比赛信息,会大大提高比赛效率,同时,也能体现比赛的公开、公平、公正原则。本文将以Excel为工作环境,借助VBA功能实现一个实用高效的计时评分程序。

关键词:Excel;VBA;比赛;计时;评分

中图分类号:G434 文献标识码:A 文章编号:1671-7503(2015)13/15-0135-03

在各类大赛的比赛环节中,计时、评分模块是必不可少的重要组成部分。比赛过程中,在大屏幕上实时显示选手参赛用时、倒计时,在选手结束比赛后录入并显示得分、排名不仅可以提高比赛效率,也可以让比赛变得更为公开、公平、公正。本文将实现一个基于Excel软件制作的各类比赛通用的实时计时评分程序。

一、软件环境的选择

要实现计时、计分功能,可选择的开发环境众多,如:VB、VC、Java等等,但本文基于以下几点原因选择使用Excel 2013版本。

(一)Excel软件使用率高

Excel作为微软Office的套件之一,在一般的Windows平台上都会安装,且各种版本之间兼容性好,所制作出来的文件有着通用性。

(二)Excel数据操作功能完善

Excel软件功能完善,不仅能记录各类数据、数值,有着较为全面数据库操作功能,函数丰富,且数据呈现方便、快捷、美观、实用。免去了单独安装前端设计软件和数据库软件的麻烦。

(三)Excel配合VBA功能更强大

VBA是Visual Basic的一种宏语言,是微软开发出来在其桌面应用程序中执行通用的自动化(OLE)任务的编程语言。通过VBA可以让Excel实现更为复杂的数据操作。

二、程序工作界面设计

该程序需要在一个Excel工作簿中建立两个工作表。

“主界面”工作表中呈现的是在比赛过程中展现给观众的信息页面,该页面包含的元素有:比赛主题信息、倒计时信息、选手得分及排名等,以及对程序进行管理的相关交互按钮。具体可如图1所示。

图1

“评分表”工作表是一个后台数据表格,是用来存储比赛中评委所打的分数,以及通过相应比赛规则计算以后的得分、排名等信息。其字段大概包含以下几个方面,如:选手号码、评委1――评委N的得分、最高分1――最高分N(根据实际需要设置去除最高分的个数)、最低分1――最低分N(根据实际需要设置去除最低分的个数)、平均分、排名,等等。同时,其主要字段值将会被引用到“主界面”中的成绩区域内,用以实时公布。设计效果如图2所示。

图2

三、主要功能的实现

(一)比赛倒计时功能的实现

1.功能描述

在本程序中,需要实现的倒计时功能是,在图1所示的左上角倒计时提示框内“比赛时间”后输入设定的倒计时时长,然后,点击“开始计时”按钮,此时提示框内的“剩余时间”后的数值即开始倒计时。当时间剩余1分钟时,程序给予声音提示,当时间剩余10秒钟时,程序给予读秒提示,时间用完后,程序给予声音长鸣的提示,并终止计时。在此过程中,任意时刻按下“停止”键,终止计时,同时,倒计时归零。

2.功能实现

通过上述功能描述可知,程序需要通过读取C2单元格中设置的时间来确定倒计时的时间。因此,第一步操作是读取C2内容,并转化为时间格式,同时,启动计时功能。其VBA代码如下:

Sub 开始()

[c2] = Format([c2], "h:mm:ss") '设置单元格格式

a = [c2] '设定时间

b = Now() + a '计算结束时间

[c3] = Format(b, "yyyy-m-d h:mm:ss") '设置单元格格式

Call 计时

End Sub

第二步则是通过“计时”模块来进行倒计时,其VBA代码如下。

Sub 计时()

n = Now + TimeValue("00:00:01") '设定时间间隔为一秒

If Now() > b Then

Beep 400, 2000

MsgBox "倒计时结束": Call 停止: Exit Sub

End If

[c4] = Format(b - Now(), "h:mm:ss") '设置单元格格式

If CStr(Second([c4])) < 10 And CStr(Minute([c4])) = 0 Then

VBA.Beep

End If

If CStr(Second([c4])) = 0 And CStr(Minute([c4])) = 1 Then

Beep 400, 1200

End If

Application.OnTime n, "计时" '到指定时间后再执行本过程

End Sub

如果计时结束或者中途按钮“停止”按钮,则执行以下VBA代码:

Sub 停止()

On Error Resume Next

Application.OnTime n, "计时", , False '停止任务的执行

[c4] = "00:00:00"

End Sub

通过以上代码操作,即可实现倒计时及提醒功能。

(二)分数录入功能的实现

分数录入在本程序中是较为重要的一环,通过点击“主界面”中的“录入分数”按钮,调出录入分数的窗体,将分数录入完毕后,点击窗体中的“得分”按钮,则将分数写入到“评分表”工作表中,并通过设置好的计分规则进行计算。

1.窗体设计

进入到VBA界面,新建一个窗体,并在窗体上放置相应的控件,如用于填写选手号码的TextBox,用于录入评委得分的TextBox,当然也可以添加评委照片、姓名等信息,同时放置一个用于写入信息的Button,并将其Caption改为“得分”。

2.数据写入

由于在点击“得分”按钮后,需要将窗体上的各个TextBox中的数据写入到工作表“评分表”的相应位置中,因此,需要对“得分”按钮进行相应的程序设置。具体的VBA代码如下。

Private Sub CommandButton1_Click()

Dim iRow&, j%, arr(1 To 10), i%

With Sheets("评分表")

iRow = .Range("A65536").End(xlUp).Row + 1

For j = 1 To 10

arr(j) = Me.Controls("textbox" & j)

Me.Controls("textbox" & j) = ""

Next j

.Cells(iRow, 1).Resize(1, 6) = arr

End With

Unload Me

End Sub

(三)选手得分的计算

选手得分的计算主要集中在“评分表”工作表内,当评委分数写入进去之后,需要根据规则进行运算,特别是去掉最高分和去掉最低分环节。

如果规则要求只是去掉1个最高分和1个最低分,那么,可以使用max和min函数来获取评委分数中的最高分和最低分。

如果规则要求去掉2个以上的最高分和最低分,则有两种方法来进行。

方法一:采用Larger和Small函数来进行。

如“=LARGE(B10:J10,1)”是表示获取B10到J10中最大的数值,而“=LARGE(B10:J10,2)”则是表示获取B10到J10中第二大的数值。然后通过公式法来求出结果。

方法二:采用TRIMMEAN函数来进行。

TRIMMEAN函数具有下列参数:

第一,Array:需要进行整理并求平均值的数组或数值区域。

第二,Percent:计算时所要除去的数据点的比例,例如:如果 percent = 0.2,在20个数据点的集合中,就要除去4个数据点(20×0.2):即头部除去2个,尾部除去2个。

而本例中,在9个数据中去除2个最大值和2个最小值则可以使用“=TRIMMEAN(B10:J10,4/9)”来实现。

至此,本案例程序中最为核心的功能均已实现。之后需要进行制作的,就是将“评分表”中的相关信息引用到“主界面”中去。这些步骤相对简单,本文中不再赘述。

(四)程序工作环境的美化

为了让程序在工作时能最大化的工作界面,排除Excel自身工作环境的干扰,可以将Excel窗口中无关的元素在程序工作时置于隐藏状态。此时,可以通过以下VBA代码来实现。

编写两个函数,一个是ShowRibbon,该函数用来显示Excel工作环境,一个是HideRibbon,该函数用来隐藏Excel工作环境,其代码分别如下。

Sub ShowRibbon()

Application.ExecuteExcel4Macro "SHOW.TOOLBAR(""Ribbon"",True)"

ActiveWindow.DisplayHeadings = True

Application.DisplayFormulaBar = True

Application.DisplayStatusBar = True

ActiveWindow.DisplayWorkbookTabs = True

ActiveWindow.DisplayHorizontalScrollBar = True

ActiveWindow.DisplayVerticalScrollBar = True

End Sub

Sub HideRibbon()

Application.ExecuteExcel4Macro "SHOW.TOOLBAR(""Ribbon"",False)"

ActiveWindow.DisplayHeadings = False

Application.DisplayFormulaBar = False

Application.DisplayStatusBar = False

ActiveWindow.DisplayWorkbookTabs = False

ActiveWindow.DisplayHorizontalScrollBar = False

ActiveWindow.DisplayVerticalScrollBar = False

End Sub

然后,再将它们分别加入到Workbook_Activate和Workbook_Deactivate中,以方便在该程序打开时隐藏工作环境,在其关闭时还原工作环境。

综上,利用VBA的相关功能以及Excel自身的数据处理优势,一个基于Excel软件制作的比赛计分、计时单文件程序由此实现。其已多次运用在日常活动比赛中,效果良好。

参考文献:

[1] 杜茂康编著.Excel与数据处理[M].北京:电子工业出版社,2002.

[2] 高煜妤.基于Excel VBA的教学工作量统计模板设计[J].科教导 刊(上旬刊),2010,(02).

[3] 许国.自定义Excel函数在工资调整中的运用[J].中国会计电算 化,2003,(04).

上一篇:国有经济的故乡 下一篇:骨肉瘤患者化疗Ⅳ度骨髓抑制的精细护理效果评...