#excel #vba
#excel #vba
Вопрос:
Эта функция возвращает несколько поисковых соответствий в одной ячейке:
Function NBlookup(lookupval, lookuprange As Range, indexcol As Long)
Dim result As String
Dim x As Range
result = ""
For Each x In lookuprange
If x = lookupval Then
result = result amp; " " amp; x.Offset(0, indexcol - 1) amp; x.Offset(0, 5)
End If
Next x
NBlookup = result
End Function
Следующая часть объединяет ее с числовым значением:
amp; x.Offset(0, 5)
Я хочу округлить значение: if amp; x.Offset(0, 5) >= 5 then
округление, в противном случае округление в меньшую сторону.
Как я могу это реализовать?
Комментарии:
1. Принудительно преобразуйте ее в целое число
2.
iif( x.Offset(0, 5) >=5,application.worksheetfunction.roundup( x.Offset(0, 5),0),application.worksheetfunction.rounddown( x.Offset(0, 5) ,0))
Ответ №1:
Просто используйте Round()
функцию, вот так : Round(x.Offset(0, 5), 0)
После повторного прочтения вашего сообщения кажется, что вы пытаетесь округлить в большую или меньшую сторону, примерно на 5, а не на 0,5
Если это так, я сделаю что-то вроде этого : Round(x.Offset(0, 5)/10, 0)*10
Public Function NBlookup(lookUpVal, lookUpRange As Range, indexCol As Long)
Dim Result As String
Dim x As Range
Result = ""
For Each x In lookUpRange
If x = lookUpVal Then
Result = Result amp; " " amp; x.Offset(0, indexCol - 1) amp; Round(x.Offset(0, 5), 0)
End If
Next x
NBlookup = Result
End Function
Я добавил несколько заглавных букв в имена ваших переменных (нижний регистр camel), чтобы немного понять, что есть что.
Я также объявил вашу функцию как Public
, чтобы вы могли использовать ее непосредственно в ячейках Excel. В любом случае, хорошей практикой является объявление области видимости (общедоступной, частной, дружественной) ваших функций или вспомогательных модулей. 😉
Ответ №2:
Попробуйте заменить amp; x.Offset(0, 5)
на
amp; Application.WorksheetFunction.Round(x.Offset(0, 5),0)
Комментарии:
1. Есть ли конкретная причина рекомендовать функцию worksheet, а не VBA?
2. @R3uK Честно говоря, совсем нет, лол. Это определенно личная фиксация. Боюсь, я не могу придумать какой-либо конкретной причины рекомендовать функцию worksheet, а не функцию VBA в этом случае, потому что оба они используют банковские правила round.
3. NP, я спросил, потому что знаю, что мне следует больше использовать WF, поскольку большинство из них действительно эффективны 😉