редактировать после уточнения OP, что LastRow
является функция, возвращающая ActiveSheet.Cells(Rows.Count, "L").End(xlUp).Row
назначения должен включать в себя исходный диапазон, в то время как последний «N154» и первые являются клетки в ряду Line
между колоннами " N»и„BF“, так что было бы работать только если Line
является 154.
кроме того, лучше определить как Line
и LastRow()
как из Long
типа в вместо Integer
так, что ваш код может измениться, как следует:
Sub randomCol()
Dim Line As Long
Line = Lastrow + 1
Range("N" & Line).Select
ActiveCell.FormulaR1C1 = "=RAND()"
Dim randomRange As String
randomRange = "N" & Line & ":BF" & Line
MsgBox randomRange
Selection.AutoFill Destination:=Range(randomRange), Type:=xlFillDefault
Range("N2:BF" & Line).Select
ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range("N" & Line), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Sheet1").Sort
.SetRange Range("N1:BF" & Line)
.Header = xlGuess
.MatchCase = False
.Orientation = xlLeftToRight
.Apply
End With
End Sub
Function LastRow() As Long
LastRow = ActiveSheet.Cells(Rows.count, "L").End(xlUp).Row
End Function
но вы можете также рассмотреть следующие вопросы:
, чтобы избежать выбора и активации
нет необходимости Autofill
Фактически, поскольку вы просто вставляете формулу
так что ваш код может стать:
Sub randomCol2()
Dim Line As Long
With ActiveWorkbook.Worksheets("Sheet1")
Line = .Cells(.Rows.count, "L").End(xlUp).Row + 1
.Columns("N:BF").Rows(Line).FormulaR1C1 = "=RAND()"
With .Sort
.SortFields.Clear
.SortFields.Add Key:=Range("N" & Line), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
.SetRange Range("N1:BF" & Line)
.Header = xlGuess
.MatchCase = False
.Orientation = xlLeftToRight
.Apply
End With
End With
End Sub
Функция LastRow As Integer LastRow = ActiveSheet.Cells (Rows.Count, "L") End (xlUp) .Row это функция End Function –