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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.09.2010, 14:26   #1
Clockgen
Пользователь
 
Регистрация: 20.11.2008
Сообщений: 66
Печаль Преобразование ячеек

Не могу организовывать на вба,логику понимаю,что нужно проверять по словам,количеству пробелов,учет ковычек,но мне очень нужен один макрос,который сможет допустим в ячейке есть запись: ООО "Государственное Акредитованное учреждение инженерной техники и прочего производства",или
ЗАО "Консалтинговая фирма "ЭРБИС",или организационно правовая форма может так же отсутствовать,например "Консалтинговая фирма "ЭРБИС",нужно преобразовать макросом эти поля, чтобы они стали в такой форме:
ООО "ГАУИТИП"
ЗАО "КФ ЭРБИС"
"КФ ЭРБИС"?

Последний раз редактировалось Clockgen; 13.09.2010 в 14:30.
Clockgen вне форума Ответить с цитированием
Старый 13.09.2010, 14:54   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,858
По умолчанию

Обязательно макрос, или подойдёт формула (пользовательская функция)?

Выкладывайте пример файла - что есть, и что надо получить.
Чем больше будет вариантов - тем точнее будет макрос формировать краткие названия.
EducatedFool вне форума Ответить с цитированием
Старый 13.09.2010, 15:20   #3
Clockgen
Пользователь
 
Регистрация: 20.11.2008
Сообщений: 66
Печаль ...

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

Пример.zip
Clockgen вне форума Ответить с цитированием
Старый 13.09.2010, 16:07   #4
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,858
По умолчанию

Вот вам пользовательская функция:



Проверяйте корректность работы самостоятельно (на тех 3 примерах из первого поста всё работает правильно)

Обратите внимание на формулу:

Код:
  Ячейка: B1      Формула  (стиль A1):   =КороткоеНазвание(A1)
                  Формула  (стиль R1C1): =КороткоеНазвание(RC[-1])
PS: Для работы этой формулы макросы должны быть включены.
PPS: Надеюсь, на других листах формулу напишете самостоятельно.

А вот и весь код пользовательской функции:
Код:
Option Compare Binary

Function КороткоеНазвание(ByVal txt As String) As String
    txt = Trim(txt): pos = InStr(1, txt, """")
    If pos > 1 Then КороткоеНазвание = КороткоеНазвание & Left(txt, pos - 1): txt = Mid(txt, pos)
    For Each word In Split(txt, " ")
        КороткоеНазвание = КороткоеНазвание & КороткоеСлово(word)
    Next
    n = Len(КороткоеНазвание) - Len(Replace(КороткоеНазвание, """", ""))
    If n = 3 Then
        pos1 = InStr(1, КороткоеНазвание, """"): pos2 = InStr(pos1 + 1, КороткоеНазвание, """")
        Mid(КороткоеНазвание, pos2, 1) = " "
    End If
End Function

Function КороткоеСлово(ByVal txt As String) As String
    If txt Like """?*" Then КороткоеСлово = """" & КороткоеСлово(Mid(txt, 2)): Exit Function
    If txt Like "*?""" Then КороткоеСлово = КороткоеСлово(Left(txt, Len(txt) - 1)) & """": Exit Function
    If UCase(txt) = txt Then КороткоеСлово = txt: Exit Function
    КороткоеСлово = КороткоеСлово & UCase(Left(Trim(txt), 1))
End Function
EducatedFool вне форума Ответить с цитированием
Старый 13.09.2010, 17:13   #5
Clockgen
Пользователь
 
Регистрация: 20.11.2008
Сообщений: 66
По умолчанию ...

Вау,щас проверим)
Clockgen вне форума Ответить с цитированием
Старый 13.09.2010, 17:36   #6
Clockgen
Пользователь
 
Регистрация: 20.11.2008
Сообщений: 66
Печаль ...

У меня еще просьба,вы наверно обратили внимание на примере который я кинул,там адреса стоят в неправильной форме: 123456,Москва,Коломенская ул,16...,а можно как нибудь сделать чтобы адрес преобрел идеальную форму: 123456, г. Москва, ул. Коломенская, д.16??? А то есть некоторые адреса именно в такой форме((
Clockgen вне форума Ответить с цитированием
Старый 13.09.2010, 20:53   #7
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,858
По умолчанию

Цитата:
а можно как нибудь сделать чтобы адрес преобрел идеальную форму
Можно.
Но сложно - слишком много вариантов написания надо учесть.
На форуме есть пример такого макроса - поищите, может, и найдёте.
EducatedFool вне форума Ответить с цитированием
Старый 18.09.2010, 16:54   #8
Clockgen
Пользователь
 
Регистрация: 20.11.2008
Сообщений: 66
По умолчанию

Скажите а как можно сделать чтобы моментом перенести все преобразованные строки на место длинных навзваний,а то не получается?
Вот например от длинной сроки я преобразовал в краткое название,а тебе краткое название в этой же книге надо перенести на место длинного названия,ексель ругается что используется циклическая сслыка((
Clockgen вне форума Ответить с цитированием
Старый 18.09.2010, 17:28   #9
vikttur
Участник клуба
 
Регистрация: 16.05.2010
Сообщений: 1,249
По умолчанию

Копировать, выделить диапазон вставки, меню Правка-Спецвставка-Значения.
Подходит?
vikttur вне форума Ответить с цитированием
Старый 18.09.2010, 18:12   #10
Clockgen
Пользователь
 
Регистрация: 20.11.2008
Сообщений: 66
По умолчанию

нет не подходит,а как можно сделать допустим,я выделил диапазон преобразованных из формул ячеек,т.е в них стоит формула,и зафиксировать эти значения чтобы в поле формула,была не формула а значение?
Clockgen вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
преобразование Dimarik Общие вопросы .NET 2 20.04.2010 20:57
как разделить значения ячеек по формату ячеек? ARIRAN Microsoft Office Excel 6 11.12.2009 15:30
Преобразование в С++ Davlet M Помощь студентам 3 03.10.2009 14:30
макрос - подсчитать для каждой строки кол-во ячеек с «+», кол-во ячеек с «-» Vadim_abs Microsoft Office Excel 36 14.07.2009 12:08