VBA列循环

时间:2013-07-29 20:16:07

标签: excel vba excel-vba user-defined-functions

我有一个大型Excel文件,我需要完全替换12列中的所有值。

现在,每个单元格中都有一个公式,我需要用自己的公式替换该公式。

如何遍历所有这些列,知道它在哪一行开始但不知道结束行(文件不断更新)。 “A600000”的黑客似乎有些过分。

我是VBA的新手,我会非常感谢你的指导。

3 个答案:

答案 0 :(得分:2)

ActiveSheet.UsedRange是当前工作表中所有已使用单元格的范围 您可以使用ActiveSheet.UsedRange.Rows.Count.Columns.Count来获取此范围的高度和宽度。

这是一个非常粗略的功能,可以击中范围内的每个单元格:

Sub test()
    Dim thisRange As Range
    Set thisRange = ActiveSheet.UsedRange
    With thisRange
        For y = 1 To .Rows.Count
            For x = 1 To .Columns.Count
                thisRange.Cells(y, x).Value = "Formula here"
            Next x
        Next
    End With
End Sub

但你想要的可能会有所不同,你能更具体吗?

答案 1 :(得分:1)

以下将完成您需要做的事情。您只需提供startRow.Sheets("Name")i参数即可。如果列的长度都相同,那么如果没有随机单元格的值在您感兴趣的列之外和之下,则UsedRange将正常工作。否则,请在您的代码中尝试此操作(在丢弃的副本上你的工作簿)

Sub GetLastRowInColumn()

Dim ws as Excel.Worksheet
Set ws = Activeworkbook.Sheets("YOURSHEETNAMEHERE")

Dim startRow as long
    startRow = 1

Dim lastRow as long

Dim i as long    
For i = 1 to 12 'Column 1 to Column 12 (Adjust Accordingly)

    lRow = ws.Cells(ws.Rows.Count, i).End(xlUp).Row  
    ws.Range(ws.Cells(startRow, i), ws.Cells(lRow, i)).Formula = "=Max(1)"  'Sample Formula

Next


End Sub

答案 2 :(得分:1)

编辑:修正了拼写错误

以下函数将构建具有不同长度列的范围。使用该功能返回所需范围并一次性填充所有相关单元格。

Function GetVariantColumnRange(MySheet As Excel.Worksheet, _
      TopRow As Long, StartColumn As Long, LastColumn As Long) As Excel.Range

Dim topAddress As String
Dim bottomAddress As String

Dim addressString As String

Dim i As Long
For i = StartColumn To LastColumn

     topAddress = MySheet.Cells(TopRow, i).Address
     bottomAddress = MySheet.Cells(MySheet.Rows.Count, i).End(xlUp).Address
     addressString = addressString & ", " & topAddress & ":" & bottomAddress

Next

addressString = Right(addressString, Len(addressString) - _ 
                 InStr(1, addressString, ", ", vbBinaryCompare))

Set GetVariantColumnRange = MySheet.Range(addressString)

End Function

用法如下......

Sub Test()

Dim myrange As Range
Set myrange = GetVariantColumnRange(ThisWorkbook.Sheets(1), 1, 1, 12)

myrange.Select 'Just a visual aid.  Remove from final code.
myrange.Formula = "=APF($Jxx, "string1", "string2") "

End Sub