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+`(重音符),或在“公式”选项卡上的“公式审核”组中,单击“显示公式”按钮。
将示例复制到一个空白工作表中后,可以按照您的需要改编示例。
|
|