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

Вход

Регистрация

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

 

= Мир MS Excel/Макрос несколько условий IF в одной строке и одном блоке - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Макрос несколько условий IF в одной строке и одном блоке (Макросы/Sub)
Макрос несколько условий IF в одной строке и одном блоке
Yar4i4 Дата: Суббота, 05.03.2016, 14:47 | Сообщение № 1
Группа: Пользователи
Ранг: Участник
Сообщений: 71
Репутация: 0 ±
Замечаний: 20% ±

Excel 2013
Добрый вечер.
Написал макрос унификации возможных опечаток "шт", "10шт" и "100шт" (заменяющий их к определённому одному виду).
Всё работает, когда раскидываю на три блока с началом "For Each rng In Selection" и концовкой каждого блока "End If". Но стоит начать экономить место и ... перестало выполняться условие "10 шт." и "100 шт.".
Первое условие выполняется.

[vba]
Код
Columns("D:E").Select
  
       For Each rng In Selection
       If rng = "шт." Or rng = "шт ." Or rng = "шт." Then
             rng.Offset = "шт"
       If rng = "10 шт" Or rng = "10 шт." Or rng = "10 шт ." Then
             rng.Offset = "10шт"
       If rng = "100 шт" Or rng = "100 шт." Or rng = "100 шт ." Then
             rng.Offset = "100шт"
     End If
     End If
     End If
      Next rng
[/vba]
К сообщению приложен файл: 3091992.xlsx (81.4 Kb)
 
Ответить
СообщениеДобрый вечер.
Написал макрос унификации возможных опечаток "шт", "10шт" и "100шт" (заменяющий их к определённому одному виду).
Всё работает, когда раскидываю на три блока с началом "For Each rng In Selection" и концовкой каждого блока "End If". Но стоит начать экономить место и ... перестало выполняться условие "10 шт." и "100 шт.".
Первое условие выполняется.

[vba]
Код
Columns("D:E").Select
  
       For Each rng In Selection
       If rng = "шт." Or rng = "шт ." Or rng = "шт." Then
             rng.Offset = "шт"
       If rng = "10 шт" Or rng = "10 шт." Or rng = "10 шт ." Then
             rng.Offset = "10шт"
       If rng = "100 шт" Or rng = "100 шт." Or rng = "100 шт ." Then
             rng.Offset = "100шт"
     End If
     End If
     End If
      Next rng
[/vba]

Автор - Yar4i4
Дата добавления - 05.03.2016 в 14:47
Pelena Дата: Суббота, 05.03.2016, 15:35 | Сообщение № 2
Группа: Админы
Ранг: Местный житель
Сообщений: 19158
Репутация: 4411 ±
Замечаний: ±

Excel 365 & Mac Excel
[vba]
Код
For Each rng In Selection
    If rng = "шт." Or rng = "шт ." Or rng = "шт." Then rng.Offset = "шт"
    If rng = "10 шт" Or rng = "10 шт." Or rng = "10 шт ." Then rng.Offset = "10шт"
    If rng = "100 шт" Or rng = "100 шт." Or rng = "100 шт ." Then rng.Offset = "100шт"
    Next rng
[/vba]
или
[vba]
Код
For Each rng In Selection
    If rng = "шт." Or rng = "шт ." Or rng = "шт." Then
            rng.Offset = "шт"
    End If
    If rng = "10 шт" Or rng = "10 шт." Or rng = "10 шт ." Then
            rng.Offset = "10шт"
    End If
    If rng = "100 шт" Or rng = "100 шт." Or rng = "100 шт ." Then
            rng.Offset = "100шт"
    End If
    Next rng
[/vba]

А в чём тайный смысл конструкции rng.Offset
Может, так короче будет
[vba]
Код
For Each rng In Selection
rng=Replace(Replace(rng,".","")," ","")
Next
[/vba]


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
Сообщение[vba]
Код
For Each rng In Selection
    If rng = "шт." Or rng = "шт ." Or rng = "шт." Then rng.Offset = "шт"
    If rng = "10 шт" Or rng = "10 шт." Or rng = "10 шт ." Then rng.Offset = "10шт"
    If rng = "100 шт" Or rng = "100 шт." Or rng = "100 шт ." Then rng.Offset = "100шт"
    Next rng
[/vba]
или
[vba]
Код
For Each rng In Selection
    If rng = "шт." Or rng = "шт ." Or rng = "шт." Then
            rng.Offset = "шт"
    End If
    If rng = "10 шт" Or rng = "10 шт." Or rng = "10 шт ." Then
            rng.Offset = "10шт"
    End If
    If rng = "100 шт" Or rng = "100 шт." Or rng = "100 шт ." Then
            rng.Offset = "100шт"
    End If
    Next rng
[/vba]

А в чём тайный смысл конструкции rng.Offset
Может, так короче будет
[vba]
Код
For Each rng In Selection
rng=Replace(Replace(rng,".","")," ","")
Next
[/vba]

Автор - Pelena
Дата добавления - 05.03.2016 в 15:35
RAN Дата: Суббота, 05.03.2016, 15:41 | Сообщение № 3
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Проанализируйте внимательно написанное
[vba]
Код
    For Each Rng In Selection
        If Rng = "шт." Or Rng = "шт ." Or Rng = "шт." Then
            Rng.Offset = "шт"
            If Rng = "10 шт" Or Rng = "10 шт." Or Rng = "10 шт ." Then
                Rng.Offset = "10шт"
                If Rng = "100 шт" Or Rng = "100 шт." Or Rng = "100 шт ." Then
                    Rng.Offset = "100шт"
                End If
            End If
        End If
    Next Rng
[/vba]

Без цикла
[vba]
Код
    Selection.Replace " ", ""
    Selection.Replace "шт", "шт."
    Selection.Replace "..", "."
[/vba]


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеПроанализируйте внимательно написанное
[vba]
Код
    For Each Rng In Selection
        If Rng = "шт." Or Rng = "шт ." Or Rng = "шт." Then
            Rng.Offset = "шт"
            If Rng = "10 шт" Or Rng = "10 шт." Or Rng = "10 шт ." Then
                Rng.Offset = "10шт"
                If Rng = "100 шт" Or Rng = "100 шт." Or Rng = "100 шт ." Then
                    Rng.Offset = "100шт"
                End If
            End If
        End If
    Next Rng
[/vba]

Без цикла
[vba]
Код
    Selection.Replace " ", ""
    Selection.Replace "шт", "шт."
    Selection.Replace "..", "."
[/vba]

Автор - RAN
Дата добавления - 05.03.2016 в 15:41
Wasilich Дата: Суббота, 05.03.2016, 15:55 | Сообщение № 4
Группа: Друзья
Ранг: Старожил
Сообщений: 1232
Репутация: 326 ±
Замечаний: 0% ±

2003
А может так?
[vba]
Код
Sub WWW()
    Range("E32:E220").Replace ".", "", xlPart
    Range("E32:E220").Replace " ", "", xlPart
End Sub
[/vba]
 
Ответить
СообщениеА может так?
[vba]
Код
Sub WWW()
    Range("E32:E220").Replace ".", "", xlPart
    Range("E32:E220").Replace " ", "", xlPart
End Sub
[/vba]

Автор - Wasilich
Дата добавления - 05.03.2016 в 15:55
МВТ Дата: Суббота, 05.03.2016, 16:20 | Сообщение № 5
Группа: Проверенные
Ранг: Обитатель
Сообщений: 476
Репутация: 137 ±
Замечаний: 0% ±

Excel 2007
Как вариант: работает с любыми целыми числами и произвольным количеством пробелов перед "шт", игнорирует наличие или отсутствие точки после "шт"
[vba]
Код
Option Explicit
Sub tt()
Dim Rng As Range, arr(), I As Long
On Error Resume Next
Set Rng = Application.InputBox("Выберите диапазон", , Selection.Address, , , , , 8)
If Err Then
    Err.Clear
    Exit Sub
End If
If Rng.Rows.Count > 1 Then
    arr = Rng.Value
Else
        ReDim arr(1 To 1, 1 To 1): arr(1, 1) = ActiveCell.Value
End If
With CreateObject("vbscript.regexp")
    .Pattern = "(\d+) +(шт)\.?"
    For I = 1 To UBound(arr)
        arr(I, 1) = .Replace(arr(I, 1), "$1$2")
    Next
End With
Rng.Value = arr
End Sub
[/vba]
 
Ответить
СообщениеКак вариант: работает с любыми целыми числами и произвольным количеством пробелов перед "шт", игнорирует наличие или отсутствие точки после "шт"
[vba]
Код
Option Explicit
Sub tt()
Dim Rng As Range, arr(), I As Long
On Error Resume Next
Set Rng = Application.InputBox("Выберите диапазон", , Selection.Address, , , , , 8)
If Err Then
    Err.Clear
    Exit Sub
End If
If Rng.Rows.Count > 1 Then
    arr = Rng.Value
Else
        ReDim arr(1 To 1, 1 To 1): arr(1, 1) = ActiveCell.Value
End If
With CreateObject("vbscript.regexp")
    .Pattern = "(\d+) +(шт)\.?"
    For I = 1 To UBound(arr)
        arr(I, 1) = .Replace(arr(I, 1), "$1$2")
    Next
End With
Rng.Value = arr
End Sub
[/vba]

Автор - МВТ
Дата добавления - 05.03.2016 в 16:20
Yar4i4 Дата: Среда, 09.03.2016, 07:18 | Сообщение № 6
Группа: Пользователи
Ранг: Участник
Сообщений: 71
Репутация: 0 ±
Замечаний: 20% ±

Excel 2013

Оказалось всё так просто, я даже не думал в этой плоскости.
Действительно, все опечатки в области единиц измерения связаны с точками и пробелами. Возможно и будут встречаться двухсловные единицы измерения, но за мою практику я таких не встречал.

Проанализируйте

я пока многого не понимаю, но Selection.Replace " ", "" - из пробела пустоту, Selection.Replace "шт", "шт." - из шт в шт. Классно.

тайный смысл

я rng.Offset скопировал из ранее использованного макроса толком не зная что оно означает.

Спасибо, мне было приятно посмотреть все вариации этого решения.
 
Ответить
Сообщение
Оказалось всё так просто, я даже не думал в этой плоскости.
Действительно, все опечатки в области единиц измерения связаны с точками и пробелами. Возможно и будут встречаться двухсловные единицы измерения, но за мою практику я таких не встречал.

Проанализируйте

я пока многого не понимаю, но Selection.Replace " ", "" - из пробела пустоту, Selection.Replace "шт", "шт." - из шт в шт. Классно.

тайный смысл

я rng.Offset скопировал из ранее использованного макроса толком не зная что оно означает.

Спасибо, мне было приятно посмотреть все вариации этого решения.

Автор - Yar4i4
Дата добавления - 09.03.2016 в 07:18
StoTisteg Дата: Среда, 09.03.2016, 21:52 | Сообщение № 7
Группа: Авторы
Ранг: Старожил
Сообщений: 1161
Репутация: 103 ±
Замечаний: 0% ±

Excel 2010
А от нас Вы чего хотите? Чтобы мы Вам парсили фразы на русском языке? Так я Вам заранее скажу — распарсить "непонял, чо за ерунда", означающее "мне кажется, здесь необходим другой формат данных", невозможно.


Интуитивно понятный код - это когда интуитивно понятно, что это код.

Сообщение отредактировал StoTisteg - Среда, 09.03.2016, 22:04
 
Ответить
СообщениеА от нас Вы чего хотите? Чтобы мы Вам парсили фразы на русском языке? Так я Вам заранее скажу — распарсить "непонял, чо за ерунда", означающее "мне кажется, здесь необходим другой формат данных", невозможно.

Автор - StoTisteg
Дата добавления - 09.03.2016 в 21:52
Pelena Дата: Среда, 09.03.2016, 21:59 | Сообщение № 8
Группа: Админы
Ранг: Местный житель
Сообщений: 19158
Репутация: 4411 ±
Замечаний: ±

Excel 365 & Mac Excel
StoTisteg, сами свой пост отредактируете или мне бан Вам выписать за нарушение Правил форума?


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
СообщениеStoTisteg, сами свой пост отредактируете или мне бан Вам выписать за нарушение Правил форума?

Автор - Pelena
Дата добавления - 09.03.2016 в 21:59
StoTisteg Дата: Среда, 09.03.2016, 22:07 | Сообщение № 9
Группа: Авторы
Ранг: Старожил
Сообщений: 1161
Репутация: 103 ±
Замечаний: 0% ±

Excel 2010
Прошу прощения.


Интуитивно понятный код - это когда интуитивно понятно, что это код.
 
Ответить
СообщениеПрошу прощения.

Автор - StoTisteg
Дата добавления - 09.03.2016 в 22:07
StoTisteg Дата: Среда, 09.03.2016, 22:14 | Сообщение № 10
Группа: Авторы
Ранг: Старожил
Сообщений: 1161
Репутация: 103 ±
Замечаний: 0% ±

Excel 2010
Число возможностей ошибиться во всяческих "шт" практически не ограниченно, как это ни странно и предусмотреть всё Вам просто не удастся. Проще сделать выпадающий список с единицами измерения.


Интуитивно понятный код - это когда интуитивно понятно, что это код.
 
Ответить
СообщениеЧисло возможностей ошибиться во всяческих "шт" практически не ограниченно, как это ни странно и предусмотреть всё Вам просто не удастся. Проще сделать выпадающий список с единицами измерения.

Автор - StoTisteg
Дата добавления - 09.03.2016 в 22:14
Yar4i4 Дата: Четверг, 17.03.2016, 12:30 | Сообщение № 11
Группа: Пользователи
Ранг: Участник
Сообщений: 71
Репутация: 0 ±
Замечаний: 20% ±

Excel 2013
Число возможностей ошибиться

Под "ошибкой" я понимаю не саму ошибку, а не стандарт.
Часто люди употребляют в общепризнанных сокращениях точки, а некоторые люди эти точки часто ставят после пробела. Я не говорю, что это не правильно и я не говорю, что это правильно. Мне не важно это. Мне интересно, чтобы все вариации со "шт." были унифицированы после завершения воспроизведения макроса.
Это "часто" не стоит принимать как общепринятое "часто" - это "часто" я взял из моей практики инженера-сметчика.
У каждого из нас своё "часто". Философия окончена...

В данном случае мне подошёл вариант:
[vba]
Код
Sub WWW()
    Range("E32:E220").Replace ".", "", xlPart
    Range("E32:E220").Replace " ", "", xlPart
End Sub
[/vba]
Также мне стало приятным открытием условие "Or" - я его с удовольствием пользую.
Спасибо огромное Вам (плюсики всем поставил)).
 
Ответить
Сообщение
Число возможностей ошибиться

Под "ошибкой" я понимаю не саму ошибку, а не стандарт.
Часто люди употребляют в общепризнанных сокращениях точки, а некоторые люди эти точки часто ставят после пробела. Я не говорю, что это не правильно и я не говорю, что это правильно. Мне не важно это. Мне интересно, чтобы все вариации со "шт." были унифицированы после завершения воспроизведения макроса.
Это "часто" не стоит принимать как общепринятое "часто" - это "часто" я взял из моей практики инженера-сметчика.
У каждого из нас своё "часто". Философия окончена...

В данном случае мне подошёл вариант:
[vba]
Код
Sub WWW()
    Range("E32:E220").Replace ".", "", xlPart
    Range("E32:E220").Replace " ", "", xlPart
End Sub
[/vba]
Также мне стало приятным открытием условие "Or" - я его с удовольствием пользую.
Спасибо огромное Вам (плюсики всем поставил)).

Автор - Yar4i4
Дата добавления - 17.03.2016 в 12:30
StoTisteg Дата: Четверг, 17.03.2016, 21:27 | Сообщение № 12
Группа: Авторы
Ранг: Старожил
Сообщений: 1161
Репутация: 103 ±
Замечаний: 0% ±

Excel 2010
Под "ошибкой" я понимаю не саму ошибку, а не стандарт.Часто люди употребляют в общепризнанных сокращениях точки, а некоторые люди эти точки часто ставят после пробела

Я тоже. И т. д., и т.п. Рано или поздно Вы обнаружите, что кто-то написал "10тш. " вместо "10 шт", а Вам всё это парсить :p


Интуитивно понятный код - это когда интуитивно понятно, что это код.
 
Ответить
Сообщение
Под "ошибкой" я понимаю не саму ошибку, а не стандарт.Часто люди употребляют в общепризнанных сокращениях точки, а некоторые люди эти точки часто ставят после пробела

Я тоже. И т. д., и т.п. Рано или поздно Вы обнаружите, что кто-то написал "10тш. " вместо "10 шт", а Вам всё это парсить :p

Автор - StoTisteg
Дата добавления - 17.03.2016 в 21:27
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Макрос несколько условий IF в одной строке и одном блоке (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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