Использовать функцию Round в функции VBA

#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, поскольку большинство из них действительно эффективны 😉