Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.09.2010, 18:35   #11
Smaragdov
Пользователь
 
Регистрация: 30.11.2009
Сообщений: 13
По умолчанию

Вопрос с ошибкой в заливке фона ячеек снят.
Проглядел, что дважды ошибочно вызывал функцию, меняющую фон ячеек.

Уважаемый doober, спасибо!
код
If (j = 6 And Not cDbArr(6) Like "######") Then
это как раз то, что нужно! Похоже, что использование Like значительно упростит мой код в нескольких местах!

Цитата:
Я думаю улица всегда присутствует.
Увы, но далеко не всегда. Частенько попадаются такие адреса:
123456, г.Урюпинск, главпочтамт, довостребования Иванов А.Б.
или
123456, Саратов, п/я 123, Петренко И.П.

Завтра надо показать начальству то, что успел сделать, поэтому все дополнительные проверки, украшательства и прочие "рюшечки" отложу на вторник-среду...

Если, что-нибудь напишу для удаления индекса и города, выложу сюда.
Однако, если у кого-то есть готовые идеи, приму совет с благодарностью!
Smaragdov вне форума Ответить с цитированием
Старый 05.09.2010, 18:53   #12
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Для показа начальству можно и так.Отсекает индекс и город

Код:
If InStr(1, cDbArr(7), cDbArr(5), vbTextCompare) > 0 And InStr(1, cDbArr(7), cDbArr(6), vbTextCompare) > 0 Then
rr = Split(cDbArr(7), ",", -1)

For n = 2 To UBound(rr)
sl = sl & rr(n) & ","
Next
cDbArr(7) = Mid(sl, 1, Len(sl) - 1)

End If
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 06.09.2010, 07:35   #13
Smaragdov
Пользователь
 
Регистрация: 30.11.2009
Сообщений: 13
По умолчанию

Проверка на повтор города и индекса делается для исключения тавтологии на конверте, например, вместо
ИНДЕКС: 162600
ГОРОД: Череповец
АДРЕС: 162600, Череповец, ул.Ленина д.30. оф5
КОМУ: Иванова Е.П.


должно быть
ИНДЕКС: 162600
ГОРОД: Череповец
АДРЕС: ул.Ленина д.30. оф5
КОМУ: Иванова Е.П.


при этом адрес
ИНДЕКС: 123456
ГОРОД: Лесной
АДРЕС: Свердловская область, город Лесной, улица.К.Маркса, д.1
КОМУ: Петрова А.Б.

выглядит вполне допустимо

Просмотрел ~1000 заявок с адресами и понял, что полностью автоматизировать "чистку" адреса невозможно, т.к. заказчики могут писать свой адрес, как им заблагорассудится, например:
  • 426011 Ижевск ул Холмогорова 13
  • Свердловская область, город Лесной, улица.К.Маркса, д.1
  • 398050 - Липецк - а/я 771
поэтому rr = Split(cDbArr(7), ",", -1) не сработает

Пока останавливаюсь на варианте простой пометки "сомнительной" ячейки при помощи фонового цвета.
Индекс (если он стоит в начале адреса), все-таки желательно удалить, уменьшив этим работу секретарю по ручной правке адресов. Сейчас получилось так:
Код:
' если строка адреса содержит п/индекс или уже указанное название города, то...
If (InStr(1, cDbArr(7), cDbArr(5), vbTextCompare) > 0 Or InStr(1, cDbArr(7), cDbArr(6), vbTextCompare) > 0)  Then
	Cells(i + startRow + 1, j + 1).Interior.ColorIndex = 40    ' заливка фоном проблемной ячейки

	' если вначале адреса идет уже указанный п/индекс
	If (InStr(1, cDbArr(7), cDbArr(6), vbTextCompare) > 0 And Mid(cDbArr(7), 1, 6) = cDbArr(6)) Then
		cDbArr(7) = LTrim(Mid(cDbArr(7), 7))    ' берем ту часть строки, что после индекса без пробелов слева

		' если после индекса была запятая, то берем то, что после нее и убираем левые пробелы
		If (Mid(cDbArr(7), 1, 1) = ",") Then cDbArr(7) = LTrim(Mid(cDbArr(7), 2))
	End If
End If

Cells(i + startRow + 1, j + 1).Value = cDbArr(7)
где:
cDbArr(5) - город
cDbArr(6) - почтовый индекс
cDbArr(7) - почтовый адрес
Smaragdov вне форума Ответить с цитированием
Старый 21.03.2012, 16:12   #14
steppanov
Новичок
Джуниор
 
Регистрация: 20.03.2012
Сообщений: 2
По умолчанию

так же столкнулся с нелепым trim
в моём случае хватило

p1 = Replace(p1, vbTab, "")
p1 = Replace(p1, vbCrLf, "")
p1 = Replace(p1, vbCr, "")

где p1 тримаемый текст или параграф

может кому поможет
steppanov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поддерживает ли VBA регулярные выражения? Suppir Microsoft Office Word 19 04.09.2011 00:19
Есть в VBA аналог "repeat until keypressed" (из Pascal) ? (-) novak_26 Microsoft Office Excel 3 28.02.2010 19:02
Аналог функции "Сохранить как->Веб-страница, полностью" beemoto Работа с сетью в Delphi 1 23.11.2009 17:12
при вводе на листе "магазин"- код товара появлялось "описание" товара из "склада" с "продажной ценой" aleksei78 Microsoft Office Excel 13 25.08.2009 12:04