问题的提出:一般而言,考场座号都是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)
| | 1 | 2 | 3 | 4 5 | 6 |