Получение диапазона ячеек для функции

Программирование на Visual Basic for Applications
M@SKIT
Новичок
Новичок
 
Сообщения: 42
Зарегистрирован: 10.04.2006 (Пн) 11:10
Откуда: Одесса

Получение диапазона ячеек для функции

Сообщение M@SKIT » 11.02.2014 (Вт) 18:47

Подскажите пожалуйста, как при создании пользовательской функции в Excel использовать указанный пользователем диапазон ячеек, по примеру того, как это делает функция СУММА(). Т.е. есть данные в ячейках A1:A10 нужно произвести конкатенацию данных из этих строк через некоторый разделитель. Т.е. функция должна иметь вид Функция(A1:A10;"разделитель") и вывести результат в виде: "Содержимое А1 разделитель Содержимое А2 разделитель .." и т.д.

У меня не получается получить диапазон ячеек для использования в функции.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Получение диапазона ячеек для функции

Сообщение Mikle » 11.02.2014 (Вт) 18:58

Когда не знаешь подобные вещи в Excel - это очень легко найти самому: включаешь "Сервис/макрос/начать запись", далее выделяешь мышкой какой-нибудь диапазон, нажимаешь на кнопку "Автосумма", останавливаешь запись макроса, открываешь его, и смотришь, как это записано.

M@SKIT
Новичок
Новичок
 
Сообщения: 42
Зарегистрирован: 10.04.2006 (Пн) 11:10
Откуда: Одесса

Re: Получение диапазона ячеек для функции

Сообщение M@SKIT » 11.02.2014 (Вт) 19:09

Спасибо, но это дает понимание как работать с конкретным диапазоном. А как получить этот диапазон:
Код: Выделить всё
Function MakeDescription(Krange)

Dim KCell As Variant
       
    For Each KCell In Range(Krange)
   
     MakeDescription = MakeDescription & KCell
       
    Next KCell
   
End Function


Вопрос в том как заставить эту конструкцию понимать выделенный пользователем диапазон.

Template
Обычный пользователь
Обычный пользователь
 
Сообщения: 73
Зарегистрирован: 09.09.2006 (Сб) 18:03

Re: Получение диапазона ячеек для функции

Сообщение Template » 11.02.2014 (Вт) 20:13

Код: Выделить всё
Function MyFunction(rngSource As Range, strDelim As String) As String

    Dim rngCell As Range

    For Each rngCell In rngSource
        If Not IsEmpty(rngCell) Then _
        MyFunction = MyFunction + CStr(rngCell.Value) + strDelim
    Next
   
    If Len(MyFunction) > 0 Then _
    MyFunction = Left(MyFunction, Len(MyFunction) - 1)
       
End Function

M@SKIT
Новичок
Новичок
 
Сообщения: 42
Зарегистрирован: 10.04.2006 (Пн) 11:10
Откуда: Одесса

Re: Получение диапазона ячеек для функции

Сообщение M@SKIT » 11.02.2014 (Вт) 21:01

Спасибо, я понял свою ошибку. Я пытался обращаться к объекту Range, хотя нужно было обращаться непосредственно к переменной.

Sam777e
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 157
Зарегистрирован: 16.09.2010 (Чт) 4:33

Re: Получение диапазона ячеек для функции

Сообщение Sam777e » 11.02.2014 (Вт) 21:30

Почитай Help для

Function InputBox(Prompt As String, [Title], [Default], [Left], [Top], [HelpFile], [HelpContextID], [Type])
Member of Excel.Application

[ особенно - про Type = 8 ]

и будешь счастлив.

Можно заметить, что немногие знают / используют этот метод
Здоровья и удачи


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: SemrushBot и гости: 12

    TopList