Excel это не сложно
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
23.04.2024, 19:20:45

Войти
Интересные и полезные статьи по работе с Excel и VBA можно найти в разделе ХИТРОСТИ
33 242 Сообщений в 5 457 Тем от 6 758 Пользователей
Последний пользователь: Сергей2662
*
Перейти на сайт Хитрости Надстройка MulTEx Обучающие тренинги Наша группа ВКонтакте
Правила форума Начало Помощь Поиск Календарь Войти Регистрация Выйти
+  Excel это не сложно
|-+  Основные форумы
| |-+  Вопросы по Excel и VBA
| | |-+  Прошу помощи в макросе с циклом на основе одного значения и таблицы
Страниц: [1]   Вниз
Печать
Автор Тема: Прошу помощи в макросе с циклом на основе одного значения и таблицы  (Прочитано 4301 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Yurets_Y
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 4


Просмотр профиля E-mail
« : 04.09.2015, 14:20:18 »

Добрый день, в VBA я еще не силен, а в циклах и массивах вообще запутался. Помогите в реализации макроса (в дальнейшем пользовательской функции). Есть исходные данные: число (расстояние) и таблица, на выходе должно получиться также число (индекс).  Исходное число должно сверяться построчно с данными в исходной таблице, начиная с первой строки, если расстояние больше ячейки 1 и меньше ячейки 2, тогда индекс равен значению в ячейке 3, если нет переходим к следующей строке. Исходные данные худо-бедно записал, но само тело For each n in Range реализовать вообще не могу.
Код: (vb)

Sub Find_Index(dist As Integer, MyChart As Range)
Dim Index As Integer

    For Each Cell In MyChart
        'Если значение dist больше ячейки 1 и меньше ячейки 2
        'тогда переменная Index равна значению в ячейки 3
        If Cell1 <= dist <= Cell2 Then Index = Cell3
        End If
        'Если нет тогда сверить значения в следующей строке диапазона MyCart
        Next Cell
End Sub

В приложении файл с огрызком макроса и исходными данными.
Записан
vikttur
Глобальный модератор
Ветеран
*****

Репутация: +124/-0
Офлайн Офлайн

Сообщений: 1 816



Просмотр профиля
« Ответ #1 : 04.09.2015, 14:48:27 »

Формулы мало?
=ВПР(D2;$B$7:$D$58;3)
Записан
nilem
Эксперты
Постоялец
*

Репутация: +39/-0
Офлайн Офлайн

Сообщений: 194


Просмотр профиля E-mail
« Ответ #2 : 04.09.2015, 14:54:43 »

вот так попробуйте
Код: (vb)
Sub Find_Index()
Dim r As Range, dist As Long, idx As Long
dist = Range("D2").Value

For Each r In Range("B7:B58")
    'Если расстояние dist больше ячейки 1 и меньше ячейки 2
    'тогда Index равен значению в ячейке 3
    If r <= dist And r.Offset(, 1) >= dist Then
        idx = r.Offset(, 2)
        Exit For
    End If
    'r - 1-я ячейка в строке
    'r.Offset(, 1) - 2-я ячейка в строке
    'r.Offset(, 2) - 3-я ячейка в строке
    'Если нет перейти к сравнению в следующей строке таблицы MyCart
Next r
MsgBox idx
End Sub

или вот такую формулу
=ВПР(D2;B7:D58;3;ИСТИНА)
пока искал теги для формул, Виктор уже нарисовал Улыбка
Записан
Yurets_Y
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 4


Просмотр профиля E-mail
« Ответ #3 : 04.09.2015, 15:23:19 »

Благодарю всем ответившим,
vikttur спасибо за лаконичный способ без использования VBA (Фунцкию ВПР с самого начала забраковал, а зря, просто не умел пользоваться интервальным просмотром).
nilem благодарствую за макрос, данный способ мне больше подходит для последующей реализации данной таблицы внутри других таблиц.
Записан
Страниц: [1]   Вверх
Печать
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2011, Simple Machines Valid XHTML 1.0! Valid CSS!
Яндекс.Метрика Рейтинг@Mail.ru