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

Вход

Регистрация

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

 

= Мир MS Excel/Макрос с таблицей соответствия - Мир MS Excel

Старая форма входа
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Макрос с таблицей соответствия
Макрос с таблицей соответствия
Hammeron Дата: Четверг, 10.02.2011, 18:24 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 12
Репутация: 0 ±
Замечаний: 0% ±

Есть 2 файла
1ый это обрабатываемый, второй это таблица соответствия.

Таблица представляет собой 2 столбца, 1ый это список кустарников, 2ой - список деревьев

В 1ом файле мы циклом идем по столбцу F, начиная с F4, берем значение ячейки и сравниваем его со значениями обоих столбцов в таблице соответствия. Если наименование породы есть в обоих столбцах, то оставляем содержимое ячейки E4 таким каким оно было(по сути переходим к следующей ячейке в столбце F), а если наинменование есть только в списке кустарников или деревьев, то вписываем в E4 соответствующее значение (Кустарник/Дерево)
Затем цикл переходит к следующей ячейке (F5).

Приложу оба файла и попробую пояснить на примере:

Начинаем с ячейки F4 в "файл1". Сравниваем значение ячейки (F4="Шиповник") с каждой ячейкой таблицы соответствия, сначала в столбце А, потом в столбце В, если находится соответсвие в двух столбцах, то значение ячейки E4 не меняется, если соответствие находится в Столбце А (А337="Шиповник"), то пишем в Е4 "Кустарник", теперь можно переходить к следующей ячейке в "файл1"
Перешли к ячейке F5, совпадение произошло и в столбце А и в столбце В, значит оставляем E5 без изменений, переходим к следующей ячейке в обрабатываемом файле.
F7 - соответствие с ячейкой A337 в таблице соответсвия - в ячейку E4 идет "Кустарник"
F8 - вот тут соответствие находится в столбце с наименованиями кустарников, а в ячейке E8 у нас стоит "Дерево", значит меняем на "кустарник"

ну и так далее, впринципе больше вариантов быть не должно, то есть либо наименование есть в обоих столбцах, тогда оставляем в обрабатываемом файле характеристику без изменений, либо меняем в соотвествии с таблицей.

Цикл по столбцу F заканчивается, как только попадает на пустую ячейку.

Надеюсь понятно обьяснил задачу)

При прикреплении имена файлов поменялись, файл1 это обрабатываемый, а таблица это файл с 2умя столбцами.

К сообщению приложен файл: 9392431.csv (6.8 Kb) · 6801746.csv (10.9 Kb)


Сообщение отредактировал Hammeron - Четверг, 10.02.2011, 18:26
 
Ответить
СообщениеЕсть 2 файла
1ый это обрабатываемый, второй это таблица соответствия.

Таблица представляет собой 2 столбца, 1ый это список кустарников, 2ой - список деревьев

В 1ом файле мы циклом идем по столбцу F, начиная с F4, берем значение ячейки и сравниваем его со значениями обоих столбцов в таблице соответствия. Если наименование породы есть в обоих столбцах, то оставляем содержимое ячейки E4 таким каким оно было(по сути переходим к следующей ячейке в столбце F), а если наинменование есть только в списке кустарников или деревьев, то вписываем в E4 соответствующее значение (Кустарник/Дерево)
Затем цикл переходит к следующей ячейке (F5).

Приложу оба файла и попробую пояснить на примере:

Начинаем с ячейки F4 в "файл1". Сравниваем значение ячейки (F4="Шиповник") с каждой ячейкой таблицы соответствия, сначала в столбце А, потом в столбце В, если находится соответсвие в двух столбцах, то значение ячейки E4 не меняется, если соответствие находится в Столбце А (А337="Шиповник"), то пишем в Е4 "Кустарник", теперь можно переходить к следующей ячейке в "файл1"
Перешли к ячейке F5, совпадение произошло и в столбце А и в столбце В, значит оставляем E5 без изменений, переходим к следующей ячейке в обрабатываемом файле.
F7 - соответствие с ячейкой A337 в таблице соответсвия - в ячейку E4 идет "Кустарник"
F8 - вот тут соответствие находится в столбце с наименованиями кустарников, а в ячейке E8 у нас стоит "Дерево", значит меняем на "кустарник"

ну и так далее, впринципе больше вариантов быть не должно, то есть либо наименование есть в обоих столбцах, тогда оставляем в обрабатываемом файле характеристику без изменений, либо меняем в соотвествии с таблицей.

Цикл по столбцу F заканчивается, как только попадает на пустую ячейку.

Надеюсь понятно обьяснил задачу)

При прикреплении имена файлов поменялись, файл1 это обрабатываемый, а таблица это файл с 2умя столбцами.


Автор - Hammeron
Дата добавления - 10.02.2011 в 18:24
Serge_007 Дата: Четверг, 10.02.2011, 18:38 | Сообщение № 2
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2749 ±
Замечаний: ±

Excel 2016


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
СообщениеЭто http://www.excelworld.ru/index/comparefiles_find/0-25 ищем?

Автор - Serge_007
Дата добавления - 10.02.2011 в 18:38
Hugo Дата: Четверг, 10.02.2011, 19:36 | Сообщение № 3
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3252
Репутация: 707 ±
Замечаний: 0% ±

2019
Нет, Сергей, это не оптимально. Можно наверное за два приёма накопировать рядом соответствий и потом через ЕСЛИ вытянуть результат, но это неоптимально.
Оптимально - макрос на массивах.
Хотя если смотреть на то, что данные в csv, то код нужно писать не в виде макроса и в третьем файле xls (т.к.в csv макрос не поместить), а например в виде скрипта vbs и обрабатывать csv как текст.
Считать оба файла, сделать изменения, сохранить изменённый файл.
Будет полегче, быстрее запускаться, но может чуть дольше работать (доли секунды/пару секунд, смотря на объём), зато одним кликом по скрипту можно получить результат (если путь к файлам не нужно выбирать в диалоге). И без Экселя. Но тогда это не по нашему профилю smile


excel@nxt.ru
webmoney: E265281470651 Z422237915069
 
Ответить
СообщениеНет, Сергей, это не оптимально. Можно наверное за два приёма накопировать рядом соответствий и потом через ЕСЛИ вытянуть результат, но это неоптимально.
Оптимально - макрос на массивах.
Хотя если смотреть на то, что данные в csv, то код нужно писать не в виде макроса и в третьем файле xls (т.к.в csv макрос не поместить), а например в виде скрипта vbs и обрабатывать csv как текст.
Считать оба файла, сделать изменения, сохранить изменённый файл.
Будет полегче, быстрее запускаться, но может чуть дольше работать (доли секунды/пару секунд, смотря на объём), зато одним кликом по скрипту можно получить результат (если путь к файлам не нужно выбирать в диалоге). И без Экселя. Но тогда это не по нашему профилю smile

Автор - Hugo
Дата добавления - 10.02.2011 в 19:36
Hugo Дата: Четверг, 10.02.2011, 21:37 | Сообщение № 4
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3252
Репутация: 707 ±
Замечаний: 0% ±

2019
Не понятно, зачем нужен именно макрос. Если эту задачу нужно автоматизировать, т.к. она будет часто выполняться, или этот процесс - звено в цепи обработки данных - тогда да, нужен код.
Но если задача разовая - вполне можно сделать формулами, и разными путями.
Например, в примере сделал с тремя доп. столбцами., хотя можно все три формулы совместить в одном столбце. Теперь результат как значения скопировать поверх столбца E.
Там в скрытых столбцах результат работы кода http://www.excelworld.ru/index/comparefiles_find/0-25 - можно и эти данные анализировать вместо единиц (отпадают два столбца формул), но с единицами проще.
Но для работы макроса пришлось файлы сохранить как xls, а для того, чтобы показать формулы на форуме - тоже csv не годится. Поэтому сперва сохранил оба файла как xls, потом сочинял формулы.
К сообщению приложен файл: 4713774.zip (20.2 Kb)


excel@nxt.ru
webmoney: E265281470651 Z422237915069
 
Ответить
СообщениеНе понятно, зачем нужен именно макрос. Если эту задачу нужно автоматизировать, т.к. она будет часто выполняться, или этот процесс - звено в цепи обработки данных - тогда да, нужен код.
Но если задача разовая - вполне можно сделать формулами, и разными путями.
Например, в примере сделал с тремя доп. столбцами., хотя можно все три формулы совместить в одном столбце. Теперь результат как значения скопировать поверх столбца E.
Там в скрытых столбцах результат работы кода http://www.excelworld.ru/index/comparefiles_find/0-25 - можно и эти данные анализировать вместо единиц (отпадают два столбца формул), но с единицами проще.
Но для работы макроса пришлось файлы сохранить как xls, а для того, чтобы показать формулы на форуме - тоже csv не годится. Поэтому сперва сохранил оба файла как xls, потом сочинял формулы.

Автор - Hugo
Дата добавления - 10.02.2011 в 21:37
Hammeron Дата: Пятница, 11.02.2011, 11:28 | Сообщение № 5
Группа: Пользователи
Ранг: Новичок
Сообщений: 12
Репутация: 0 ±
Замечаний: 0% ±

Quote (Hugo)
Если эту задачу нужно автоматизировать, т.к. она будет часто выполняться, или этот процесс - звено в цепи обработки данных

Это звено в цепи обработки данных) Как раз поэтому нужен макрос) Собственно я в csv пользуюсь 2умя простыми макросами, и хотел еще добавить к ним функцию, описанную в первом посте, не думал что это настолько сложно, там по сути то пару циклов да пару ветвлений. Формулами результат есть, но это опять же надо формулу вставлять в каждый документ, что в итоге делает работу довольно громоздкой, неужели нельзя допустим чтобы макрос обращался к подгруженному csv файлу, и обрабатывал в соответствии с задачей обрабатываемый файл?

 
Ответить
Сообщение
Quote (Hugo)
Если эту задачу нужно автоматизировать, т.к. она будет часто выполняться, или этот процесс - звено в цепи обработки данных

Это звено в цепи обработки данных) Как раз поэтому нужен макрос) Собственно я в csv пользуюсь 2умя простыми макросами, и хотел еще добавить к ним функцию, описанную в первом посте, не думал что это настолько сложно, там по сути то пару циклов да пару ветвлений. Формулами результат есть, но это опять же надо формулу вставлять в каждый документ, что в итоге делает работу довольно громоздкой, неужели нельзя допустим чтобы макрос обращался к подгруженному csv файлу, и обрабатывал в соответствии с задачей обрабатываемый файл?


Автор - Hammeron
Дата добавления - 11.02.2011 в 11:28
Hugo Дата: Пятница, 11.02.2011, 12:30 | Сообщение № 6
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3252
Репутация: 707 ±
Замечаний: 0% ±

2019
"Можно всё, были бы время и деньги" - так где-то в подписи видел smile
Расскажите подробнее - почему макрос, как он оказался в csv, зачем csv загружаете в Эксель, нужно ли сохранять изменения в файле и в каком формате - xls или csv?
Т.е. можно сделать анализ и сохранить изменения скриптом (или макросом) без открытия этих файлов в Экселе.
Но работа не такая простая, как кажется. Т.е. несложно в принципе, но муторно, если именно такой алгоритм уже не готов, и его нужно придумывать. Мне так кажется.


excel@nxt.ru
webmoney: E265281470651 Z422237915069
 
Ответить
Сообщение"Можно всё, были бы время и деньги" - так где-то в подписи видел smile
Расскажите подробнее - почему макрос, как он оказался в csv, зачем csv загружаете в Эксель, нужно ли сохранять изменения в файле и в каком формате - xls или csv?
Т.е. можно сделать анализ и сохранить изменения скриптом (или макросом) без открытия этих файлов в Экселе.
Но работа не такая простая, как кажется. Т.е. несложно в принципе, но муторно, если именно такой алгоритм уже не готов, и его нужно придумывать. Мне так кажется.

Автор - Hugo
Дата добавления - 11.02.2011 в 12:30
Hammeron Дата: Пятница, 11.02.2011, 13:07 | Сообщение № 7
Группа: Пользователи
Ранг: Новичок
Сообщений: 12
Репутация: 0 ±
Замечаний: 0% ±

Ну макрос потому что нужно получить изменения в файле грубо говоря нажав на одну кнопку. Сохранять можно и вручную, не так это и долго, открывать каждый файл, чтобы запустить макрос тоже не особо напрягает, то есть по сути скрипт который бы все это пакетно обрабатывал не нужен. Я мог бы попробовать описать алгоритм на каком нить подобии псевдокода)) Но я думал что все подробно расписал в первом посте)
 
Ответить
СообщениеНу макрос потому что нужно получить изменения в файле грубо говоря нажав на одну кнопку. Сохранять можно и вручную, не так это и долго, открывать каждый файл, чтобы запустить макрос тоже не особо напрягает, то есть по сути скрипт который бы все это пакетно обрабатывал не нужен. Я мог бы попробовать описать алгоритм на каком нить подобии псевдокода)) Но я думал что все подробно расписал в первом посте)

Автор - Hammeron
Дата добавления - 11.02.2011 в 13:07
Hugo Дата: Пятница, 11.02.2011, 13:22 | Сообщение № 8
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3252
Репутация: 707 ±
Замечаний: 0% ±

2019
Ну описано подробно и понятно, но вот как в коде сделать например это - "если находится соответствие в двух столбцах"... пока мутно. Flag1 и flag2 анализировать?
Но сделать можно.
Открыть файл с кодом, нажать кнопку, выбрать в диалоге один файл, потом другой (кстати, это нужно, или пути постоянны?),потом сохранить вручную...
Проще одним кликом по скрипту, ну и остаётся выбор файлов, если нужно.


excel@nxt.ru
webmoney: E265281470651 Z422237915069
 
Ответить
СообщениеНу описано подробно и понятно, но вот как в коде сделать например это - "если находится соответствие в двух столбцах"... пока мутно. Flag1 и flag2 анализировать?
Но сделать можно.
Открыть файл с кодом, нажать кнопку, выбрать в диалоге один файл, потом другой (кстати, это нужно, или пути постоянны?),потом сохранить вручную...
Проще одним кликом по скрипту, ну и остаётся выбор файлов, если нужно.

Автор - Hugo
Дата добавления - 11.02.2011 в 13:22
Hammeron Дата: Пятница, 11.02.2011, 14:01 | Сообщение № 9
Группа: Пользователи
Ранг: Новичок
Сообщений: 12
Репутация: 0 ±
Замечаний: 0% ±

Тут 3 исхода получается:
1. Находится соответствие в первом столбце (меняем значение на "кустарник")
2. находится соответствие во втором столбце (меняем значение на "дерево")
3. находится в обоих - вот этот пункт и вправду геморный, я думаю надо как то его исключить, чтобы осталось 2 исхода. тут мне видится такое решение: сделать так, чтобы алгоритм работал только с определенными наименованиями пород, то есть задать ветвление такого типа:

Идем циклом по столбцу F
от i = 1 до n (n - номер последней заполненной ячейки)
ЕСЛИ Fi не равно "Клен ясенелистный" ИЛИ "Боярышник" ИЛИ "Вишня" (и так далее, этот список я сам дополню, но суть в том, что эти наименования встречаются в обоих столбцах), то
Дальше идет сравнивание ячейки с таблицей соответствия и присваивание значения ячейки Ei (дерево/кустарник, в зависимости от столбца, в котором он находит совпадение)

То есть мы сейчас исключили ту часть макроса которая бы работала с флаговыми переменными, упростив задачу)

теперь по поводу того как я вижу как это должно происходить. Макрос записывается в личную книгу макросов, создается кнопка ну и тд, это понятно как сделать и не нуждается в описании)
Далее открывается файл, который представляет из себя таблицу соответствия, он постоянно открыт во время работы и его подгруженный статус является необходимым условием для работы макроса.
Затем открывается файл который необходимо обработать, нажимается кнопка, запускающая макрос, макрос пробегает по файлу, делает необходимые замены, затем я вручную сохраняю файл, открываю следующий, и цикл повторяется. Заморачиваться скриптом думаю не стоит)

 
Ответить
СообщениеТут 3 исхода получается:
1. Находится соответствие в первом столбце (меняем значение на "кустарник")
2. находится соответствие во втором столбце (меняем значение на "дерево")
3. находится в обоих - вот этот пункт и вправду геморный, я думаю надо как то его исключить, чтобы осталось 2 исхода. тут мне видится такое решение: сделать так, чтобы алгоритм работал только с определенными наименованиями пород, то есть задать ветвление такого типа:

Идем циклом по столбцу F
от i = 1 до n (n - номер последней заполненной ячейки)
ЕСЛИ Fi не равно "Клен ясенелистный" ИЛИ "Боярышник" ИЛИ "Вишня" (и так далее, этот список я сам дополню, но суть в том, что эти наименования встречаются в обоих столбцах), то
Дальше идет сравнивание ячейки с таблицей соответствия и присваивание значения ячейки Ei (дерево/кустарник, в зависимости от столбца, в котором он находит совпадение)

То есть мы сейчас исключили ту часть макроса которая бы работала с флаговыми переменными, упростив задачу)

теперь по поводу того как я вижу как это должно происходить. Макрос записывается в личную книгу макросов, создается кнопка ну и тд, это понятно как сделать и не нуждается в описании)
Далее открывается файл, который представляет из себя таблицу соответствия, он постоянно открыт во время работы и его подгруженный статус является необходимым условием для работы макроса.
Затем открывается файл который необходимо обработать, нажимается кнопка, запускающая макрос, макрос пробегает по файлу, делает необходимые замены, затем я вручную сохраняю файл, открываю следующий, и цикл повторяется. Заморачиваться скриптом думаю не стоит)


Автор - Hammeron
Дата добавления - 11.02.2011 в 14:01
Hugo Дата: Пятница, 11.02.2011, 14:43 | Сообщение № 10
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3252
Репутация: 707 ±
Замечаний: 0% ±

2019
Ладно, нашли в одном столбце, поменяли значение, потом нашли во втором столбце - снова поменяли значение smile Так что-ли получается?
Я вижу флаги smile
Получили два флага, умножили один на 1, второй на 2. Смотрим результат:

Code
Sub tt()
Dim flag1 As Boolean
Dim flag2 As Boolean

flag1 = True
flag2 = False

Select Case flag1 * 1 + flag2 * 2
Case -1: Debug.Print "куст"
Case -2: Debug.Print "дерево"
Case -3: Debug.Print "оба"
End Select
End Sub

Вот это нечётко:"Затем открывается файл который необходимо обработать, нажимается кнопка, запускающая макрос"
Где указать, какой файл обрабатываем? Если активный, то кнопка должна быть в нём. Или тогда не кнопка, а по Alt+F8 код запускать придётся.
И кстати, что писать макрос, что скрипт - без разницы, работа одинакова. В макросе даже на 2 строки больше smile


excel@nxt.ru
webmoney: E265281470651 Z422237915069
 
Ответить
СообщениеЛадно, нашли в одном столбце, поменяли значение, потом нашли во втором столбце - снова поменяли значение smile Так что-ли получается?
Я вижу флаги smile
Получили два флага, умножили один на 1, второй на 2. Смотрим результат:

Code
Sub tt()
Dim flag1 As Boolean
Dim flag2 As Boolean

flag1 = True
flag2 = False

Select Case flag1 * 1 + flag2 * 2
Case -1: Debug.Print "куст"
Case -2: Debug.Print "дерево"
Case -3: Debug.Print "оба"
End Select
End Sub

Вот это нечётко:"Затем открывается файл который необходимо обработать, нажимается кнопка, запускающая макрос"
Где указать, какой файл обрабатываем? Если активный, то кнопка должна быть в нём. Или тогда не кнопка, а по Alt+F8 код запускать придётся.
И кстати, что писать макрос, что скрипт - без разницы, работа одинакова. В макросе даже на 2 строки больше smile

Автор - Hugo
Дата добавления - 11.02.2011 в 14:43
Hammeron Дата: Пятница, 11.02.2011, 14:47 | Сообщение № 11
Группа: Пользователи
Ранг: Новичок
Сообщений: 12
Репутация: 0 ±
Замечаний: 0% ±

Quote (Hugo)
Ладно, нашли в одном столбце, поменяли значение, потом нашли во втором столбце - снова поменяли значение

Ну мы же в ветвлении

Quote
ЕСЛИ Fi не равно "Клен ясенелистный" ИЛИ "Боярышник" ИЛИ "Вишня"
создали список значений, к которым ничего применяться не будет, просто алгоритм будет осуществлять переход к следующей ячейке, следовательно мы исключаем случай когда возможно совпадение в обоих столбцах)

Quote
Где указать, какой файл обрабатываем? Если активный, то кнопка должна быть в нём. Или тогда не кнопка, а по Alt+F8 код запускать придётся.

Ну если макрос будет в личной книге макросов, то его можно будет забиндить на кнопку и использовать в любой открытой книге на компе, разве нет?



Сообщение отредактировал Hammeron - Пятница, 11.02.2011, 14:50
 
Ответить
Сообщение
Quote (Hugo)
Ладно, нашли в одном столбце, поменяли значение, потом нашли во втором столбце - снова поменяли значение

Ну мы же в ветвлении

Quote
ЕСЛИ Fi не равно "Клен ясенелистный" ИЛИ "Боярышник" ИЛИ "Вишня"
создали список значений, к которым ничего применяться не будет, просто алгоритм будет осуществлять переход к следующей ячейке, следовательно мы исключаем случай когда возможно совпадение в обоих столбцах)

Quote
Где указать, какой файл обрабатываем? Если активный, то кнопка должна быть в нём. Или тогда не кнопка, а по Alt+F8 код запускать придётся.

Ну если макрос будет в личной книге макросов, то его можно будет забиндить на кнопку и использовать в любой открытой книге на компе, разве нет?


Автор - Hammeron
Дата добавления - 11.02.2011 в 14:47
Hugo Дата: Пятница, 11.02.2011, 14:54 | Сообщение № 12
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3252
Репутация: 707 ±
Замечаний: 0% ±

2019
Появилась мысль сделать на двух словарях. Загнали туда оба столбца, затем проверяем список - ответ сразу, без второго цикла.
Даже интересно стало сделать... вечером, или на выходных.

Про кнопку: да, если кнопка на панели, а не на листе - тогда так получится.



excel@nxt.ru
webmoney: E265281470651 Z422237915069
 
Ответить
СообщениеПоявилась мысль сделать на двух словарях. Загнали туда оба столбца, затем проверяем список - ответ сразу, без второго цикла.
Даже интересно стало сделать... вечером, или на выходных.

Про кнопку: да, если кнопка на панели, а не на листе - тогда так получится.


Автор - Hugo
Дата добавления - 11.02.2011 в 14:54
Hammeron Дата: Пятница, 11.02.2011, 15:06 | Сообщение № 13
Группа: Пользователи
Ранг: Новичок
Сообщений: 12
Репутация: 0 ±
Замечаний: 0% ±

Знал бы я хорошо синтаксис VBA с удовольствием бы тоже попробовал методом тыка))) Ну алгоритм по идее должен быть работающим. А словарь в какой форме будет? Там де можно в макросе прописать обращения к открытой книге? ( в данном случае это таблица соответствия)
 
Ответить
СообщениеЗнал бы я хорошо синтаксис VBA с удовольствием бы тоже попробовал методом тыка))) Ну алгоритм по идее должен быть работающим. А словарь в какой форме будет? Там де можно в макросе прописать обращения к открытой книге? ( в данном случае это таблица соответствия)

Автор - Hammeron
Дата добавления - 11.02.2011 в 15:06
Hugo Дата: Пятница, 11.02.2011, 15:11 | Сообщение № 14
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3252
Репутация: 707 ±
Замечаний: 0% ±

2019
Нет, словарь это вот:
Code
Set dic = CreateObject("Scripting.Dictionary")

For Each x In a
If dic.exists(CStr(x)) Then
Else
dic.Add CStr(x), 0
End If
Next

Тут же кстати и синтаксис, как проверить на присутствие в словаре.



excel@nxt.ru
webmoney: E265281470651 Z422237915069
 
Ответить
СообщениеНет, словарь это вот:
Code
Set dic = CreateObject("Scripting.Dictionary")

For Each x In a
If dic.exists(CStr(x)) Then
Else
dic.Add CStr(x), 0
End If
Next

Тут же кстати и синтаксис, как проверить на присутствие в словаре.


Автор - Hugo
Дата добавления - 11.02.2011 в 15:11
Hammeron Дата: Пятница, 11.02.2011, 15:18 | Сообщение № 15
Группа: Пользователи
Ранг: Новичок
Сообщений: 12
Репутация: 0 ±
Замечаний: 0% ±

Ну то есть как я описал сделать невозможно, обязателен словарь?
 
Ответить
СообщениеНу то есть как я описал сделать невозможно, обязателен словарь?

Автор - Hammeron
Дата добавления - 11.02.2011 в 15:18
Hugo Дата: Пятница, 11.02.2011, 15:21 | Сообщение № 16
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3252
Репутация: 707 ±
Замечаний: 0% ±

2019
Со словарём лучше и намного быстрее.

Вот заготовка проверки присутствия в словарях:

Code
Sub Проверка()

For Each x In b
     If dic1.exists(CStr(x)) Then
         If dic2.exists(CStr(x)) Then
         'присутствует и во втором,т.е. в обоих
         Else
         'только в первом
         End If
     Else
     If dic2.exists(CStr(x)) Then
         'только во втором
     End If
Next

End Sub


excel@nxt.ru
webmoney: E265281470651 Z422237915069
 
Ответить
СообщениеСо словарём лучше и намного быстрее.

Вот заготовка проверки присутствия в словарях:

Code
Sub Проверка()

For Each x In b
     If dic1.exists(CStr(x)) Then
         If dic2.exists(CStr(x)) Then
         'присутствует и во втором,т.е. в обоих
         Else
         'только в первом
         End If
     Else
     If dic2.exists(CStr(x)) Then
         'только во втором
     End If
Next

End Sub

Автор - Hugo
Дата добавления - 11.02.2011 в 15:21
Hugo Дата: Пятница, 11.02.2011, 15:41 | Сообщение № 17
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3252
Репутация: 707 ±
Замечаний: 0% ±

2019
В общем, алгоритм сложился такой:
Файлы открыты, определены - это как угодно.
Само ядро:
1. Берём в массив два столбца Соответствие.csv
2. Цикл по массиву - заносим данные в два словаря.
3. Берём в массив два столбца файл1.csv
4. Цикл по массиву - проверяем второй элемент массива в двух словарях.
5. По результату проверки меняем/не меняем первый элемент массива.
6. Выгружаем массив назад в файл1.csv


excel@nxt.ru
webmoney: E265281470651 Z422237915069
 
Ответить
СообщениеВ общем, алгоритм сложился такой:
Файлы открыты, определены - это как угодно.
Само ядро:
1. Берём в массив два столбца Соответствие.csv
2. Цикл по массиву - заносим данные в два словаря.
3. Берём в массив два столбца файл1.csv
4. Цикл по массиву - проверяем второй элемент массива в двух словарях.
5. По результату проверки меняем/не меняем первый элемент массива.
6. Выгружаем массив назад в файл1.csv

Автор - Hugo
Дата добавления - 11.02.2011 в 15:41
Hammeron Дата: Пятница, 11.02.2011, 15:54 | Сообщение № 18
Группа: Пользователи
Ранг: Новичок
Сообщений: 12
Репутация: 0 ±
Замечаний: 0% ±

Да, все верно, остался вопрос как это записать)
 
Ответить
СообщениеДа, все верно, остался вопрос как это записать)

Автор - Hammeron
Дата добавления - 11.02.2011 в 15:54
Hugo Дата: Воскресенье, 13.02.2011, 19:37 | Сообщение № 19
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3252
Репутация: 707 ±
Замечаний: 0% ±

2019
Попробуйте скрипт. Поместите его в одну паку с Соответствие.csv и запустите.
Если не будет диалога выбора обрабатываемого файла - значит или у Вас отключены скрипты wsh, или не работает UserAccounts.CommonDialog. Во втором случае можно приспособить другой диалог выбоа файлов.
Ну и в общем почти без переделок можно использовать как макрос - там уже всё в коде есть - переставьте комменты в двух местах, подключите первую и последнюю строку. Ну и типы переменным можно добавить.
К сообщению приложен файл: 8840818.zip (1.1 Kb)


excel@nxt.ru
webmoney: E265281470651 Z422237915069
 
Ответить
СообщениеПопробуйте скрипт. Поместите его в одну паку с Соответствие.csv и запустите.
Если не будет диалога выбора обрабатываемого файла - значит или у Вас отключены скрипты wsh, или не работает UserAccounts.CommonDialog. Во втором случае можно приспособить другой диалог выбоа файлов.
Ну и в общем почти без переделок можно использовать как макрос - там уже всё в коде есть - переставьте комменты в двух местах, подключите первую и последнюю строку. Ну и типы переменным можно добавить.

Автор - Hugo
Дата добавления - 13.02.2011 в 19:37
Hammeron Дата: Понедельник, 14.02.2011, 11:12 | Сообщение № 20
Группа: Пользователи
Ранг: Новичок
Сообщений: 12
Репутация: 0 ±
Замечаний: 0% ±

Спасибо большое! =) Скрипт работает, только выявилась одна проблемка biggrin Вообщем он когда делает замену в обрабатываемом файле, он очищает содержимое всей строки, а там у меня еще дополнительные данные в строке справа от ячеек которые заменяем) Еще такой вопрос, у меня есть простой скрипт, он по сути делает несколько замен, я же могу его скомбинировать с тем скриптом, который написан Вами? Мне надо только понять куда вставлять свои строчки кода.
 
Ответить
СообщениеСпасибо большое! =) Скрипт работает, только выявилась одна проблемка biggrin Вообщем он когда делает замену в обрабатываемом файле, он очищает содержимое всей строки, а там у меня еще дополнительные данные в строке справа от ячеек которые заменяем) Еще такой вопрос, у меня есть простой скрипт, он по сути делает несколько замен, я же могу его скомбинировать с тем скриптом, который написан Вами? Мне надо только понять куда вставлять свои строчки кода.

Автор - Hammeron
Дата добавления - 14.02.2011 в 11:12
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Макрос с таблицей соответствия
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

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