我有一个大型Excel文件,我需要完全替换12列中的所有值。
现在,每个单元格中都有一个公式,我需要用自己的公式替换该公式。
如何遍历所有这些列,知道它在哪一行开始但不知道结束行(文件不断更新)。 “A600000”的黑客似乎有些过分。
我是VBA的新手,我会非常感谢你的指导。
答案 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