VBA实战技巧精粹019:如何快速填充考场号及座号

问题的提出:一般而言,考场座号都是1至30号,如果考场数较少的话,完全可以采用鼠标操作,但是如果考场数太多,尤其是在填充考场号时才是麻烦!!比如高考考场的安排,那工作量可想而知,以前都是鼠标操作的方式进行,感觉特别别扭,现在想着用VBA实现自动操作。

实现的思路:先计算出共有多少个学生需要编排考场,然后利用ceiling函数取得向上的最小整数,即为考场数。利用考场数即为需要循环操作的次数即可实现。

源代码如下:

Sub 自动填充座号及考场号()
' 实现可以自动填充座号,关键是在不足30人的考场中如何实现按实际人数进行填充
    Dim i As Integer, totalR As Integer, k As Integer, j As Integer
    i = Application.WorksheetFunction.Ceiling((Range("A65536").End(xlUp).Row - 1) / 30, 1)
    For k = 1 To i
        For j = 2 + (k - 1) * 30 To 31 + (k - 1) * 30
            Cells(j, 2).Value = j - (k - 1) * 30 - 1  '第2列填充座号。
            Cells(j, 3).Value = k  '第3列填充考场号。
            Cells(j, 4).Value = Worksheets("sheet2").Cells(k, 1).Value '利用事先准备的考场位置进行填充
        Next j
    Next k
    Columns(1).SpecialCells(xlCellTypeBlanks).EntireRow.Delete '利用第1列为姓名或其它,将为空的单元格所在行删除即为最终结果
End Sub

解释如下:

首先,为什么在((Range("A65536").End(xlUp).Row - 1) / 30, 1)中要减去1呢?因为有列标题嘛。

其次,用到了Ceiling函数,为Excel工作表函数,作用是取得向上的整数。

说明

将参数 Number 向上舍入(沿绝对值增大的方向)为最接近的 significance 的倍数。例如,如果您不愿意使用像“分”这样的零钱,而所要购买的商品价格为 ¥4.42,可以用公式 =CEILING(4.42,0.05) 将价格向上舍入为以“角”表示。

语法

CEILING(number, significance)

CEILING 函数语法具有下列参数 (参数:为操作、事件、方法、属性、函数或过程提供信息的值。)

  • Number    必需。要舍入的值。
  • Significance    必需。要舍入到的倍数。

说明

  • 如果参数为非数值型,CEILING 返回错误值 #VALUE!。
  • 无论数字符号如何,都按远离 0 的方向向上舍入。如果数字已经为 Significance 的倍数,则不进行舍入。
  • 如果 number 和 significance 都为负,则对值按远离 0 的方向进行向下舍入。
  • 如果 number 为负,significance 为正,则对值按朝向 0 的方向进行向上舍入。

示例

如果将示例复制到一个空白工作表中,可能会更容易理解该示例。

显示如何复制示例?

  • 选择本文中的示例。

 要点   不要选择行或列标题。

从“帮助”中选择示例

从“帮助”中选择示例
  • 按 Ctrl+C。
  • 在 Excel 中,创建一个空白工作簿或工作表。
  • 在工作表中,选择单元格 A1,然后按 Ctrl+V。

 要点   若要使该示例能够正常工作,必须将其粘贴到工作表的单元格 A1 中。

  • 要在查看结果和查看返回结果的公式之间进行切换,请按 Ctrl+`(重音符),或在“公式”选项卡上的“公式审核”组中,单击“显示公式”按钮。

将示例复制到一个空白工作表中后,可以按照您的需要改编示例。

 
1
2
3

4
5

6
A B
公式 说明(结果)
=CEILING(2.5, 1) 将 2.5 向上舍入到最接近的 1 的倍数 (3)
=CEILING(-2.5, -2) 将 -2.5 向上舍入到最接近的 -2 的倍数 (-4)
=CEILING(-2.5, 2) 将 -2.5 向上舍入为最接近的 2 的倍数 (-2)
=CEILING(1.5, 0.1) 将 1.5 向上舍入到最接近的 0.1 的倍数 (1.5)
=CEILING(0.234, 0.01) 将 0.234 向上舍入到最接近的 0.01 的倍数 (0.24)
43 Things: Excel VBA
BuzzNet: Excel VBA
del.icio.us: Excel VBA
Flickr: Excel VBA
IceRocket: Excel VBA
LiveJournal: Excel VBA
Technorati: Excel VBA
posted @ 2011-08-13 08:22  surfacetension  阅读(844)  评论(0编辑  收藏  举报