[英]Loop columns using VBA
我想遍历各列。
我不确定范围。 我应该在字母作为列的地方使用正常范围吗?
我尝试了不同的代码。 例如:
Sub copytest()
Dim x As Workbook
Dim j As Integer, i As Integer
Application.ScreenUpdating = False
Workbooks.Open ("D:\test\COMP.xlsx")
i = 3
For j = 3 To 14
Sheets("Compliance").Range(Cells(18, i), Cells(30, i)).Copy
Windows("KP.xlsm").Activate
Sheets("MOH").Range(Cells(12, j), Cells(24, j)).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
i = i + 2
Next j
x.Close
End Sub
您可以将数字用于列。 假设您要遍历前5行和前5列,然后可以将其写为
For i = 1 To 5 '<~~~ Rows
For j = 1 To 5 '<~~~ Columns
With ThisWorkbook.Cells(i, j)
'~~> Do something
End With
Next j
Next i
在Excel 2013中,最后一列是XFD,其列号为16384。
A - 1
B - 2
C - 3
.
.
and so on...
XFD - 16384
如果您想循环使用列名,则可以这样使用它
Dim ColName As String
For i = 1 To 5 '<~~~ Rows
For j = 1 To 5 '<~~~ Columns
ColName = Split(Cells(, j).Address, "$")(1)
With ThisWorkbook.Range(ColName & i)
'~~> Do something
End With
Next j
Next i
通过列循环的另一种方法是For Each cell in my1RowRange
循环中的For Each cell in my1RowRange
,其中
cell
是在my1RowRange
Range
上循环的单单元格Range
对象
my1RowRange
必须为1行Range
除此之外,您的代码还存在一些主要缺陷:
您的范围引用使用简单的 Cells(...)
引用,之前没有任何明确的worksheet
和workbook
引用
这样他们就可以继续引用活动 worksheet
workbook
中的活动 workbook
worksheet
这是不好的,因为在循环过程中,您似乎只在不断更改正确的工作簿,而实际上在开始时只对其进行了一次更改( Windows("KP.xlsm").Activate
),然后它始终是唯一被引用的工作簿工作簿
避免使用Activate
/ ActiveXXX
(以及Select
/ Selection
)编码,因为
它容易出错,就像事实证明的那样,因为它很可能导致您失去对实际活动工作簿/工作表的控制
这很耗时,并且会出现屏幕闪烁
因此,请考虑以下代码重构:
Option Explicit
Sub copytest()
Dim i As Long
Dim compWb As Workbook
Dim compRng As Range, cell As Range
Set compWb = Workbooks.Open "D:\test\COMP.xlsx" '<--| set the workbook to open to a specific variable of 'Workbook' type
With compWb.Worksheets("Compliance") '<--| refer to "compliance" worksheet of the "right" (you're explicitly referencing it!) workbook
Set compRng = .Range(.Cells(18, 3), .Cells(30, 3)) '<--| set the "source" range: all the dots means we're referencing the object after the last "With" statement
End With
i = 3
With Workbooks("KP.xlsm").Worksheets("MOH") '<--| refer to "MOH" worksheet of "KP" workbook
For Each cell In .Range(.Cells(12, 3), .Cells(12, 14)) '<--| loop through cells of a 1-row range of the referenced worksheet: this means looping through columns!
cell.Resize(13).Value = compRng.Offset(, i - 3).Value '<--| paste values while offsetting the "souce" range columns (first iteration with offset=0)
i = i + 2
Next cell
End With
compWb.Close '<--| close the opened workbook
End Sub
Sub Columns()
Dim rng As Range
Dim col As Range
Sheets("Sheet1").Select 'make shure its in the correct sheet
Set rng = Range("C3:G6") 'select the range of the whole table
For Each col In rng.Columns 'this performs a tasks column by column
'Do Something
col.Select
Selection.RemoveDuplicates Columns:=1, Header:=xlNo
'end something
Next col 'move to next column
End Sub
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.