#excel #vba #excel-formula
#excel #vba #excel-формула
Вопрос:
У меня есть два столбца: время и позиция, и мне нужно найти соответствующее время позиции, ближайшей к переменной.
время: диапазон B: B позиция: диапазон C: C переменная = цель
Я смог сделать это в Excel, используя следующую формулу, но когда я делаю это в макросах (вставка Application.WorksheetFunction
перед индексом, совпадение и минимум), я получаю ошибку
‘Ошибка времени выполнения ‘13’.
Я перечислил данные как диапазоны. Не уверен, что еще делать.
=INDEX(data,MATCH(MIN(ABS(data-value)),ABS(data-value),0))
Комментарии:
1. можете ли вы добавить точный код, который вы использовали с
Application.WorksheetFunction
Ответ №1:
Мне было на удивление сложно найти решение. Прежде всего, в vba нельзя вычислить вектор как разность двух других векторов (например, data-value). Я надеюсь, что это сработает для вас.
Sub mm()
Dim rdata As Range, rvalue As Range
Set rdata = Range("A1:A20")
Set rvalue = Range("B1:B20")
Dim i As Long
Dim dt As Variant, vl As Variant, AbsDelta As Variant
dt = Application.WorksheetFunction.Transpose(rdata.value)
vl = Application.WorksheetFunction.Transpose(rvalue.value)
AbsDelta = Application.WorksheetFunction.Transpose(rdata.value) 'just for reserve place
For i = LBound(dt) To UBound(dt)
AbsDelta(i) = Abs(dt(i) - vl(i)) 'This line is updated
Next i
Dim minAbsDelta As Double
minAbsDelta = Application.WorksheetFunction.Min(AbsDelta)
Range("C1").value = Application.WorksheetFunction.Index(dt, Application.WorksheetFunction.Match( _
minAbsDelta, AbsDelta, 0))
End Sub
Комментарии:
1. Где будет значение поиска? Значение поиска находится в диапазоне B: B, но значение, которое я ищу, — это соответствующее время.
2. Мой код просто демонстрирует решение. Берет некоторую тестовую дату из «A1: A20» и «B1: B20», затем записывает результат в «C1». Я также обнаружил ошибку в коде. Смотрите обновленную версию.