Я написал макрос в VBA, который копирует значения из одного листа в другой, используя функцию поиска.
Моя рабочая книга рассчитывает определенные переменные в зависимости от длины пролета моста. Длина пролета меняется итеративно, и я назвал переменную SpanLength. Каждый раз, когда длина диапазона изменяется, макрос копирует максимальные значения и вставляет их в лист «МАКСИМАЛЬНЫЙ» (показан на прилагаемом изображении). В MAXIMUM я назвал всю верхнюю строку длины пролета (1, 1.2, 1,4 и т. Д.) "FindSpanLength". Затем макрос находит подходящую длину диапазона и вставляет рядом с ним максимальные значения. Этот макрос работает за исключением случаев с длинами промежутков 2, 4, 6 и 8, где вместо того, чтобы находить эти длины промежутков в MAXIMUM, он находит длины промежутков 1,2, 1,4, 1,6 и 1,8 и копирует результаты там.

Я пытался использовать Lookat: = xlWhole, но это усугубляет проблему. У кого-нибудь есть другие решения?

Private Sub Max()
' Chooses correct column: Find the span length column and name this outputcolumn
Dim spanlengthcell As Range, outputcolumn As Integer
Set spanlengthcell = Range("FindSpanLength").Find(Range("SpanLength").Value, LookIn:=xlValues, Lookat:=xlPart)
If Not spanlengthcell Is Nothing Then
outputcolumn = spanlengthcell.Column
End If
' Chooses correct row: If the cell to the left of spanlengthcell is empty then this is the first row of output otherwise find next empty cell down
If MAXIMUM.Cells(4, outputcolumn + 1).Value = "" Then
outputrow = 4
ElseIf MAXIMUM.Cells(5, outputcolumn + 1).Value = "" Then
outputrow = 5
Else
outputrow = MAXIMUM.Cells(4, outputcolumn + 1).End(xlDown).Row + 1
End If
' Copy starting point, max bending moment and max shear from calculate to output
MAXIMUM.Cells(outputrow, outputcolumn + 1).Value = Sheets("Calculate").Range("StartPoint").Value
MAXIMUM.Cells(outputrow, outputcolumn + 2).Value = Sheets("Calculate").Range("[enter image description here][1]MaxBM").Value
MAXIMUM.Cells(outputrow, outputcolumn + 3).Value = Sheets("Calculate").Range("MaxSF").Value
End Sub