1

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

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

我如何遍历所有这些列,知道它从哪一行开始但不知道结束行(文件不断更新)。“A600000”的破解似乎有点矫枉过正。

我是 VBA 新手,非常感谢一些指导。

4

3 回答 3

2

ActiveSheet.UsedRange是当前工作表上所有已使用单元格的范围。
您可以使用ActiveSheet.UsedRange.Rows.Countand.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

但是你想要的可能不一样,你能说的更具体点吗?

于 2013-07-29T20:29:38.790 回答
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
于 2013-07-30T14:41:01.370 回答
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
于 2013-07-29T20:47:18.053 回答