VBA是比较简单的编程语言,只要安装用microsoft office就可以用来调试代码,不用安装第三方工具,值得大家抽空学一学。如果有Python编程的基础,学起来就非常的简单了。今天我们来学习一下如何用VBA打印出某列单元格的值。
比如:我们在Excel中有A列10行从1..10的数值,现在我们想用debug.print打印出这些值,应该如何操作呢?
一、用cells获取单元格的值
用Cells()来获取单元格的值,用for循环来遍历。代码如下:
Sub PrintColumnValues()Dim i As IntegerFor i = 1 To 10 '要打印的列数debug.print Cells(i, 3).Value '指定要打印的列,这里是第3列Next i
End Sub
这个宏代码会打印第3列前10个单元格的值。
您可以修改i的范围和Cells(i, 3)中的列号,来打印您想要的单元格列。
debug.print会在VBA编辑器的“即时窗口”中打印输出。您可以在运行宏前打开“视图”菜单的“即时窗口”选项卡。
这在调试VBA代码时非常有用,可以轻松查看变量和单元格的值,而不需要在Excel工作表中插入消息框。
二、用Range对象获取单元格的值
先定义一个Range对象,然后定义其范围
Sub PrintColumnValues()Dim col As RangeSet col = Range("A1:A10") '指定第3列For Each cell In coldebug.print cell.ValueNext cell
End Sub
这会打印第1列A1:A10的所有单元格值。
我们使用Set关键字创建col作为第3列的范围。 然后我们可以使用For Each循环遍历这个范围内的每个单元格,并打印每个单元格的值。
这比使用固定的行数i更为灵活,可以打印列中的所有单元格。 如果列在未来添加了更多行,此宏仍然可以正常工作。
使用range和For Each循环是VBA中访问和操作Excel范围的强大方式。
三、用worksheets对象来遍历打印
我们还可以通过worksheets对象的属性rows来实现遍历打印
Sub PrintNonBlankColumn1Values()Dim ws As WorksheetSet ws = Worksheets("Sheet1")For Each Row In ws.RowsIf Row.Cells(1).Value <> "" Then '检查第1列(索引1)是否非空Debug.Print Row.Cells(1).Value '如果非空,打印值End IfNext Row
End Sub
循环每行时,首先检查当前行的第一列(索引1)单元格值是否为空:row.Cells(1).Value <> ""
如果非空,则打印该值:debug.print row.Cells(1).Value
如果为空,则跳过循环,不做任何操作
继续循环,直到处理完所有行
这样只会打印工作表第一列中所有非空单元格的值。留空的单元格会被跳过,从而实现了所需功能。
row.Cells(1)访问每行的第一列(索引1)单元格。这是获取特定行和列交叉点单元格值的常用方法。
四、用ThisWorkbook对象来遍历
这种方法用isempty来判断是否为空,用ws.Cells(ws.Rows.Count, 1).End(xlUp).Row来获取第一列的最后一行。
用ThisWorkbook.sheets获取工作表
Sub PrintNonBlankColumn1Values()Dim ws As WorksheetDim lastRow As LongDim cell As RangeSet ws = ThisWorkbook.Sheets("Sheet1")lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).RowFor Each cell In ws.Range("A1:A" & lastRow)If Not IsEmpty(cell.Value) Then '检查第1列(索引1)是否非空Debug.Print cell.Value '如果非空,打印值End IfNext cell
End Sub
四、学后反思
- 综合来看用cell和Range的方法更为简单,运行的效率也更高。
- 与Python不同,注意for循环中没有冒号,而多了next,书写时一定不要忘记。