Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Как верно прописать условие IF - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
Страница 1 из 11
Модератор форума: _Boroda_, Pelena, Manyasha, SLAVICK 
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Как верно прописать условие IF (Макросы/Sub)
Как верно прописать условие IF
ant6729 Дата: Среда, 02.08.2017, 23:45 | Сообщение № 1
Группа: Проверенные
Ранг: Обитатель
Сообщений: 329
Репутация: -6 ±
Замечаний: 60% ±

Excel 2010
Добрый вечер, все время нарываюсь на коварство условия if

При дублировании код отрабатывает
Если хочу добавить else (закомментированный кусок кода) - неправильно отрабатывает

Хочу в случае отсутствия дубликатов, чтобы писало ссобщение, что дубликатов нет. И выходило из макроса.
А оно при наличии дубля все равно пишет, что дубля нет...
Прошу подсказать, что не так...
К сообщению приложен файл: 4591585.xlsm(15Kb)
 
Ответить
СообщениеДобрый вечер, все время нарываюсь на коварство условия if

При дублировании код отрабатывает
Если хочу добавить else (закомментированный кусок кода) - неправильно отрабатывает

Хочу в случае отсутствия дубликатов, чтобы писало ссобщение, что дубликатов нет. И выходило из макроса.
А оно при наличии дубля все равно пишет, что дубля нет...
Прошу подсказать, что не так...

Автор - ant6729
Дата добавления - 02.08.2017 в 23:45
KuklP Дата: Четверг, 03.08.2017, 07:44 | Сообщение № 2
Группа: Проверенные
Ранг: Старожил
Сообщений: 2331
Репутация: 477 ±
Замечаний: 0% ±

2003-2010
[vba]
Код
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    Dim lr2&, n&
    Cancel = True
    lr2 = Sheets("Лист2").Cells(Rows.Count, 1).End(xlUp).Row
    n = Application.CountIf(Sheets("Лист2").Range("a1:a" & lr2), Target)
    If n = 1 Then
        MsgBox "Не найден дубликат"
        Target.Interior.ColorIndex = xlNone
    ElseIf n = 0 Then MsgBox "Не найдено значение"
    Else
        MsgBox "Найден дубликат"
        Target.Interior.Color = RGB(250, 143, 150)
    End If
End Sub
[/vba]


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728
 
Ответить
Сообщение[vba]
Код
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    Dim lr2&, n&
    Cancel = True
    lr2 = Sheets("Лист2").Cells(Rows.Count, 1).End(xlUp).Row
    n = Application.CountIf(Sheets("Лист2").Range("a1:a" & lr2), Target)
    If n = 1 Then
        MsgBox "Не найден дубликат"
        Target.Interior.ColorIndex = xlNone
    ElseIf n = 0 Then MsgBox "Не найдено значение"
    Else
        MsgBox "Найден дубликат"
        Target.Interior.Color = RGB(250, 143, 150)
    End If
End Sub
[/vba]

Автор - KuklP
Дата добавления - 03.08.2017 в 07:44
_Boroda_ Дата: Четверг, 03.08.2017, 09:18 | Сообщение № 3
Группа: Модераторы
Ранг: Местный житель
Сообщений: 11512
Репутация: 4736 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Если хотите именно циклом, то так можно
[vba]
Код
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    Cancel = True
    lr2 = Sheets("Лист2").Cells(Rows.Count, 1).End(xlUp).Row
    For i = 1 To lr2
        If Target = Sheets("Лист2").Cells(i, 1).Value Then
            MsgBox "Найден дубликат"
            Target.Interior.Color = RGB(250, 143, 150)
            Exit Sub
        End If
    Next i
    MsgBox "Не найден дубликат"
End Sub
[/vba]
Можно еще примерно как у Сергея выше, только методом Find, еще можно диапазон в массив занести и там проверять. Или в словарь. В общем, много еще вариантов.


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеЕсли хотите именно циклом, то так можно
[vba]
Код
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    Cancel = True
    lr2 = Sheets("Лист2").Cells(Rows.Count, 1).End(xlUp).Row
    For i = 1 To lr2
        If Target = Sheets("Лист2").Cells(i, 1).Value Then
            MsgBox "Найден дубликат"
            Target.Interior.Color = RGB(250, 143, 150)
            Exit Sub
        End If
    Next i
    MsgBox "Не найден дубликат"
End Sub
[/vba]
Можно еще примерно как у Сергея выше, только методом Find, еще можно диапазон в массив занести и там проверять. Или в словарь. В общем, много еще вариантов.

Автор - _Boroda_
Дата добавления - 03.08.2017 в 09:18
ant6729 Дата: Четверг, 03.08.2017, 09:20 | Сообщение № 4
Группа: Проверенные
Ранг: Обитатель
Сообщений: 329
Репутация: -6 ±
Замечаний: 60% ±

Excel 2010
Спасибо, KuklP Вы сделали так, как я попросил
Но нужно немного иначе
Нужно, чтобы просто искало повторения листе. А CountIf там не при чем, то что там две 3 подряд на лист 2 - это к вопросу не относится.

Просто если есть таргет лист 1 = значение на лист2 - тогда "есть дубль"
Если дубля нет - тогда "нет дубля"
 
Ответить
СообщениеСпасибо, KuklP Вы сделали так, как я попросил
Но нужно немного иначе
Нужно, чтобы просто искало повторения листе. А CountIf там не при чем, то что там две 3 подряд на лист 2 - это к вопросу не относится.

Просто если есть таргет лист 1 = значение на лист2 - тогда "есть дубль"
Если дубля нет - тогда "нет дубля"

Автор - ant6729
Дата добавления - 03.08.2017 в 09:20
ant6729 Дата: Четверг, 03.08.2017, 09:23 | Сообщение № 5
Группа: Проверенные
Ранг: Обитатель
Сообщений: 329
Репутация: -6 ±
Замечаний: 60% ±

Excel 2010
Boroda_, да!

Спасибо!!
 
Ответить
СообщениеBoroda_, да!

Спасибо!!

Автор - ant6729
Дата добавления - 03.08.2017 в 09:23
KuklP Дата: Четверг, 03.08.2017, 11:51 | Сообщение № 6
Группа: Проверенные
Ранг: Старожил
Сообщений: 2331
Репутация: 477 ±
Замечаний: 0% ±

2003-2010
Тогда еще проще:
[vba]
Код
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    Dim lr2&
    Cancel = True
    lr2 = Sheets("Лист2").Cells(Rows.Count, 1).End(xlUp).Row
    If Application.CountIf(Sheets("Лист2").Range("a1:a" & lr2), Target) Then
        MsgBox "Найден дубликат"
        Target.Interior.Color = RGB(250, 143, 150)
    Else
        MsgBox "Не найден дубликат"
        Target.Interior.ColorIndex = xlNone
    End If
End Sub
[/vba]


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728
 
Ответить
СообщениеТогда еще проще:
[vba]
Код
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    Dim lr2&
    Cancel = True
    lr2 = Sheets("Лист2").Cells(Rows.Count, 1).End(xlUp).Row
    If Application.CountIf(Sheets("Лист2").Range("a1:a" & lr2), Target) Then
        MsgBox "Найден дубликат"
        Target.Interior.Color = RGB(250, 143, 150)
    Else
        MsgBox "Не найден дубликат"
        Target.Interior.ColorIndex = xlNone
    End If
End Sub
[/vba]

Автор - KuklP
Дата добавления - 03.08.2017 в 11:51
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Как верно прописать условие IF (Макросы/Sub)
Страница 1 из 11
Поиск:

Яндекс цитирования
© 2010-2017 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!