繁体   English   中英

使用字符串变量为列字母设置范围

[英]set range using string variable for column letter

我想知道如何将这个范围改变 "G" 写入字符串变量strColumn

这是我要更改的代码:

   Dim lastRowElemento As Integer
   lastRowElemento = Cells(Rows.Count, "G").End(xlUp).Row
   Set rngElemento = ws.Range("G2:G" & lastRowElemento)

引用“非空”列范围

  • 其实有两个要求:

    • ColumnString = G (我更喜欢字符串,因为例如XFD是字母s
    • FirstRow = 2

    如果你把它们放在一起,你会得到G2 (想想一个,而不是两个变量)。

  • 由于在查找列中最底部(最后一个)非空单元格时,使用Find方法比使用End属性更可靠,​​因此我使用它来编写RefColumn函数,在您的情况下,该函数可以通过以下方式使用:

     Set rngElemento = RefColumn(ws.Range("G2"))
  • 如果你要测试是否有数据(通常你知道有),我会留给你,但我更喜欢在代码中至少保留一个“简化”的测试:

     If rngElemento is Nothing Then Exit Sub ' no data ' Continue...

编码

Option Explicit

Sub RefColumnTEST()
    Dim wb As Workbook: Set wb = ThisWorkbook ' workbook containing this code
    Dim ws As Worksheet: Set ws = wb.Worksheets("Sheet1")
    Dim rg As Range: Set rg = RefColumn(ws.Range("G2"))
    If rg Is Nothing Then ' the range 'G2:G1048576' is empty
        MsgBox "No data.", vbCritical
    Else
        MsgBox rg.Address(0, 0), vbInformation
    End If
End Sub

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Purpose:      Creates a reference to the one-column range from the first cell
'               of a range ('FirstCell') to the bottom-most non-empty cell
'               of the first cell's worksheet column.
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Function RefColumn( _
    ByVal FirstCell As Range) _
As Range
    If FirstCell Is Nothing Then Exit Function
    
    With FirstCell.Cells(1)
        Dim lCell As Range
        Set lCell = .Resize(.Worksheet.Rows.Count - .Row + 1) _
            .Find("*", , xlFormulas, , , xlPrevious)
        If lCell Is Nothing Then Exit Function
        Set RefColumn = .Resize(lCell.Row - .Row + 1)
    End With

End Function

满足您的要求

  • 与我的首选方式类似,您可以使用RefData函数:
Function RefData( _
    ByVal ws As Worksheet, _
    ByVal ColumnIndex As Variant) _
As Range
    On Error GoTo ClearError
    
    With ws.Columns(ColumnIndex).Resize(ws.Rows.Count - 1).Offset(1)
        Set RefData = _
            .Resize(.Find("*", , xlFormulas, , , xlPrevious).Row - 1)
    End With

ProcExit:
    Exit Function
ClearError:
    Resume ProcExit
End Function

您可以通过以下方式使用它:

Set rngElemento = RefData(ws, "G")
Set rngElemento = RefData(ws, 7)
' or:
Const strColumn As String = "G"
Set rngElemento = RefData(ws, strColumn)

应用OP的方法,试试这个:

Sub TEST()
Dim ws As Worksheet, Rng As Range, sCol As String
    sCol = "G"
    Set ws = ThisWorkbook.Sheets("TEST")    'change as required
    With ws.Columns(sCol)
        Set Rng = Range(.Cells(2), .Cells(.Rows.Count).End(xlUp))
    End With
    End Sub

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM