Добрый вечер. Написал макрос унификации возможных опечаток "шт", "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]
Добрый вечер. Написал макрос унификации возможных опечаток "шт", "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
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]
[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
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
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]
Код
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
Оказалось всё так просто, я даже не думал в этой плоскости. Действительно, все опечатки в области единиц измерения связаны с точками и пробелами. Возможно и будут встречаться двухсловные единицы измерения, но за мою практику я таких не встречал.
Оказалось всё так просто, я даже не думал в этой плоскости. Действительно, все опечатки в области единиц измерения связаны с точками и пробелами. Возможно и будут встречаться двухсловные единицы измерения, но за мою практику я таких не встречал.
А от нас Вы чего хотите? Чтобы мы Вам парсили фразы на русском языке? Так я Вам заранее скажу — распарсить "непонял, чо за ерунда", означающее "мне кажется, здесь необходим другой формат данных", невозможно.
А от нас Вы чего хотите? Чтобы мы Вам парсили фразы на русском языке? Так я Вам заранее скажу — распарсить "непонял, чо за ерунда", означающее "мне кажется, здесь необходим другой формат данных", невозможно.StoTisteg
Интуитивно понятный код - это когда интуитивно понятно, что это код.
Сообщение отредактировал StoTisteg - Среда, 09.03.2016, 22:04
Число возможностей ошибиться во всяческих "шт" практически не ограниченно, как это ни странно и предусмотреть всё Вам просто не удастся. Проще сделать выпадающий список с единицами измерения.
Число возможностей ошибиться во всяческих "шт" практически не ограниченно, как это ни странно и предусмотреть всё Вам просто не удастся. Проще сделать выпадающий список с единицами измерения.StoTisteg
Интуитивно понятный код - это когда интуитивно понятно, что это код.
Под "ошибкой" я понимаю не саму ошибку, а не стандарт. Часто люди употребляют в общепризнанных сокращениях точки, а некоторые люди эти точки часто ставят после пробела. Я не говорю, что это не правильно и я не говорю, что это правильно. Мне не важно это. Мне интересно, чтобы все вариации со "шт." были унифицированы после завершения воспроизведения макроса. Это "часто" не стоит принимать как общепринятое "часто" - это "часто" я взял из моей практики инженера-сметчика. У каждого из нас своё "часто". Философия окончена...
В данном случае мне подошёл вариант: [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
Под "ошибкой" я понимаю не саму ошибку, а не стандарт.Часто люди употребляют в общепризнанных сокращениях точки, а некоторые люди эти точки часто ставят после пробела
Я тоже. И т. д., и т.п. Рано или поздно Вы обнаружите, что кто-то написал "10тш. " вместо "10 шт", а Вам всё это парсить
Под "ошибкой" я понимаю не саму ошибку, а не стандарт.Часто люди употребляют в общепризнанных сокращениях точки, а некоторые люди эти точки часто ставят после пробела
Я тоже. И т. д., и т.п. Рано или поздно Вы обнаружите, что кто-то написал "10тш. " вместо "10 шт", а Вам всё это парсить StoTisteg
Интуитивно понятный код - это когда интуитивно понятно, что это код.