循环列名称:对于变量= A到Z.

时间:2016-11-17 14:10:28

标签: vba excel-vba excel

是否可以循环使用列字母?

For col = A to Z
   column(col:col).select
   selection.copy
Next

或者我是否有义务使用函数将字母转换为数字?

4 个答案:

答案 0 :(得分:1)

将公式转换为值:

Dim cols As Range, c As String
Set cols = UsedRange.Columns

For Each c In Split("N Q T")   ' add the rest of the column letters
    cols(c).Value = cols(c).Value ' or .Value2 if no dates or currencies in the range
Next

如果它是列N中的每三个列,则另一种方法可以是:

Dim col As Range, i As Long
Set col = UsedRange.Columns("N")

For i = 1 To 17            ' to repeat 17 times
    col.Value = col.Value
    Set col = col.Offset(, 3)
Next

答案 1 :(得分:0)

无需将字母转换为数字,因为您可以将字母传递给ColumnsCells

Columns("B") 'the same as Columns(2)
Cells(1, "B") 'same as Cells(1, 2)

然而,通过字母循环是一种麻烦,你必须首先将一个数字转换成一个字母,例如使用Chr(64 + Num)

答案 2 :(得分:0)

我不知道是否需要花费大量的计算时间,但实际上我已经

Columns("N:N").Select
selection.Copy
selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False


Columns("Q:Q").Select
selection.Copy
selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False


Columns("T:T").Select
selection.Copy
selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

我有17次这一组排,你认为这是浪费时间吗?

修改

回答下面评论中的链接,感谢@Rdster

答案 3 :(得分:0)

我建议使用以下两种解决方案之一: 1-列A是第一列,Z是第26列

'Declaration
Dim iFirstCol as integer
Dim iLastCol as integer
iFirstCol = 1 'the first column (A)
iLastCol = 26 'the last column (Z)

'Looping
FOR col = iFirstCol to iLastCol
    Columns(col:col).Select
    Selection.Copy
    '....
LOOP col

2-字母A到Z的ASCII值为65到90.

'Declaration
Dim Cols as string

您的循环可以轻松转换为:

'Looping
FOR col = 65 to 90
    Cols=CHR(col) & ":" & CHR(col)
    Columns(Cols).Select
    Selection.Copy
'...
LOOP col

希望这有帮助!