VBA - Select columns using numbers?

前端 未结 9 2185
北荒
北荒 2021-02-05 08:06

I\'m looking for an alternative to this code, but using numbers. I want to select 5 columns, the start column is a variable, and then it selects 5 columns from this

相关标签:
9条回答
  • 2021-02-05 08:14
    Columns("A:E").Select
    

    Can be directly replaced by

    Columns(1).Resize(, 5).EntireColumn.Select
    

    Where 1 can be replaced by a variable

    n = 5
    Columns(n).Resize(, n+4).EntireColumn.Select
    

    In my opinion you are best dealing with a block of columns rather than looping through columns n to n + 4 as it is more efficient.

    In addition, using select will slow your code down. So instead of selecting your columns and then performing an action on the selection try instead to perform the action directly. Below is an example to change the colour of columns A-E to yellow.

    Columns(1).Resize(, 5).EntireColumn.Interior.Color = 65535
    
    0 讨论(0)
  • 2021-02-05 08:18

    In the example code below I use variables just to show how the command could be used for other situations.

    FirstCol = 1
    LastCol = FirstCol + 5
    Range(Columns(FirstCol), Columns(LastCol)).Select
    
    0 讨论(0)
  • 2021-02-05 08:19

    I was looking for a similar thing. My problem was to find the last column based on row 5 and then select 3 columns before including the last column.

    Dim lColumn As Long
    
    lColumn = ActiveSheet.Cells(5,Columns.Count).End(xlToLeft).Column
    MsgBox ("The last used column is: " & lColumn)
    Range(Columns(lColumn - 3), Columns(lColumn)).Select
    

    Message box is optional as it is more of a control check. If you want to select the columns after the last column then you simply reverse the range selection

    Dim lColumn As Long
    
    lColumn = ActiveSheet.Cells(5,Columns.Count).End(xlToLeft).Column
    MsgBox ("The last used column is: " & lColumn)
    Range(Columns(lColumn), Columns(lColumn + 3)).Select
    
    0 讨论(0)
  • 2021-02-05 08:24

    you can use range with cells to get the effect you want (but it would be better not to use select if you don't have to)

    For n = 1 to 5
    range(cells(1,n).entirecolumn,cells(1,n+4).entirecolumn).Select
    do sth
    next n
    
    0 讨论(0)
  • 2021-02-05 08:30

    no need for loops or such.. try this..

    dim startColumnas integer
    
    dim endColumn as integer
    
    startColumn = 7
    
    endColumn = 24
    
    Range(Cells(, startColumn), Cells(, endColumn)).ColumnWidth = 3.8 ' <~~ whatever width you want to set..* 
    
    0 讨论(0)
  • 2021-02-05 08:37

    You can use resize like this:

    For n = 1 To 5
        Columns(n).Resize(, 5).Select
        '~~> rest of your code
    Next
    

    In any Range Manipulation that you do, always keep at the back of your mind Resize and Offset property.

    0 讨论(0)
提交回复
热议问题