大きな Excel ファイルがあり、12 列のすべての値を完全に置き換える必要があります。
現在、各セルに数式があり、その数式を独自の数式に置き換える必要があります。
どの行から始まるかはわかっているが、最後の行がわからない(ファイルは常に更新されている)すべての列をループするにはどうすればよいですか。「A600000」のハックはやり過ぎのようです。
私はVBAが初めてなので、いくつかのガイダンスをいただければ幸いです。
大きな Excel ファイルがあり、12 列のすべての値を完全に置き換える必要があります。
現在、各セルに数式があり、その数式を独自の数式に置き換える必要があります。
どの行から始まるかはわかっているが、最後の行がわからない(ファイルは常に更新されている)すべての列をループするにはどうすればよいですか。「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
編集:タイプミスを修正
以下の関数は、可変長の列で範囲を構築します。関数を使用して目的の範囲を返し、関連するすべてのセルを 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