VBA列循环

我有一个大的Excel文件,我需要完全replace12列中的所有值。

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

我如何遍历所有这些列,知道它在哪一行开始,但不知道最后一行(文件不断更新)。 “A600000”的破解看起来过分。

我是新来的VBA和一些指导将非常感激。

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 

但是你想要什么可能是不同的,你可以更具体吗?

以下将完成你需要做的事情。 你只需要提供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 

编辑:修正了错字

下面的函数将build立不同长度列的范围。 使用该function返回所需的范围,并填充所有相关单元格。

 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