动态设置范围到VBA中的列

时间:2014-12-16 00:34:42

标签: vba excel-vba excel-2010 excel

我正在将一些日期导入工作表,需要在其他工作表中进行验证和参考。

假设我在工作表(WS1)中有4列,但每次导入时行数都是动态的。如何对列进行排列(A:D)?

请帮忙。

此致 摩尼

3 个答案:

答案 0 :(得分:1)

使用lastRow变量确定最后一行。我列举了几个例子。同样在这个例子中是一个lastCol变量..如果Columns的数量也是动态的,你可以使用它。

Private Sub lastRow()

Dim lastRow As Long
Dim lastCol As Long
Dim sheet As String

    sheet = "WS1"

    lastRow = Sheets(sheet).Range("A" & Rows.Count).End(xlUp).row   'Using Range()
    lastRow = Sheets(sheet).Cells(Rows.Count, "A").End(xlUp).row    'Using Cells()

    lastCol = Sheets(sheet).Cells(2, Columns.Count).End(xlToLeft).Column
End Sub

您也可以使用变量轻松地遍历工作表。使用单元格(row,col)代替Range(A1)。您可以在列的引号中使用数字或字母,如示例所示。

此示例查看WS1并匹配someValue。如果WS1的A列中的值= somevalue,则将记录复制到" Master"片。

Sub LoopExample()
Dim mRow As Long  'used for a master row
    For lRow = 2 To lastRow
        If Sheets(sheet).Cells(lRow, 1) = someValue Then
            'perform something here like this.  Copy columns A:D to the Master Sheet if match
            For lCol = 1 To 4   'or you could go 1 to lastCol if you needed it dynamic
                Sheets("MASTER").Cells(mRow, lCol) = Sheets(sheet).Cells(lRow, lCol) 'mRow as Row on Master
            Next lCol
            mRow = mRow + 1   'Increment the Master Row
        End If
    Next lRow
End Sub

答案 1 :(得分:0)

无论如何,谢谢。但我想要的只是名称范围工作表中的列。

我已完成复制和粘贴(加载数据黑白工作表)。

这就是我想要的。

vRowCount = DestWorkSheet.Cells(1, 1).SpecialCells(xlCellTypeLastCell).Row
vColCount = DestWorkSheet.Cells(1, 1).SpecialCells(xlCellTypeLastCell).Column

DestWorkSheet.usedRange.Columns.AutoFit
AddNamedRange Dest_RATES, DATA_Dest_RATES

AddNamedRange是一个函数,

    Public Sub AddNamedRange(ByVal sheetCodeName As String, ByVal namedRange As String)
    Dim rngToBeNamed As Range
    Dim ws As Worksheet

   On Error GoTo AddNamedRange_Error

   Set rngToBeNamed = GetUsedRange(sheetCodeName)
   Set ws = rngToBeNamed.Worksheet
   ws.Names.Add name:=namedRange, RefersTo:=ws.Range(rngToBeNamed.Address)

   On Error GoTo 0
   Exit Sub


  AddNamedRange_Error:

    MsgBox "Error " & Err.Number & " (" & Err.Description & ") in procedure AddNamedRange of Module     UtilitiesRange"

    End Sub

此致

摩尼

答案 2 :(得分:0)

好像你可以在图书模块中使用这样的东西:

    Private Sub Worksheet_Change(ByVal target As Range)
        Dim i As Long
        Dim NamesOfNames(1 To 4) As String

            NamesOfNames(1) = "NameOfColumn1"
            NamesOfNames(2) = "NameOfColumn2"   
            NamesOfNames(3) = "NameOfColumn3"
            NamesOfNames(4) = "NameOfColumn4" 

        For i = 1 To 4
            ThisWorkbook.Names.Add Name:=NamesOfNames(i), _ 
                RefersTo:=Range(Cells(1, i), Cells(Cells(Rows.Count, i).End(xlUp).Row, i))
        Next i
    End Sub