|
|
|
Excel заполнение столбца в соответствии с даными другого столбца
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Копаю по форуму, но пока не могу сформулировать правильно запрос для поиска или просто подходящего варианта нет. Вопрос весьма простой, но не хватает знаний в области vba. Я больше по php или sql... Но нужен именно vba для Excel. Можно ли создать двумерный массив или два массива и сравнивать данные из столбца допустим F и если значение в нем находится 3.1.4. менять столбец H на 45, если 2.5.1 то на 24... И так весьма много возможных данных. На php бы я это сделал как то так: Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. Очень не хочется делать громоздкое if подобное сравнение данных из ячейки в ячейку... Код: vbnet 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.05.2012, 10:26 |
|
||
|
Excel заполнение столбца в соответствии с даными другого столбца
|
|||
|---|---|---|---|
|
#18+
А нужен именно VBA ? Формулами пользоваться нельзя? ADODB тоже использовать нельзя? А то ведь данная задача - решается достаточно просто: - либо формулами листа ВПР(), ПРОСМОТР(), либо консрукцией ИНДЕКС(ПОИСКПОЗ(... - либо с помощью ADO и SQL-запроса, с выгрузкой конечного рекордсета в нужное место листа. Естественно, в обоих случаях нужно иметь где-то в книге табличку-справочник соответствия кодов. Или вам что, готовый пример нужен? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.05.2012, 13:02 |
|
||
|
Excel заполнение столбца в соответствии с даными другого столбца
|
|||
|---|---|---|---|
|
#18+
AndreTM, Нет, мне нужна подсказка, как подобная конструкция может быть реализована. Ограничение состоит в том, что столбец получатель должен быть заполнен не формулой, а статическими данными. В наличии у пользователя исключительно Excel. И желательно все это потом в надстройку забить, дабы нельзя было случайно удалить или еще чего. Да и пользователю так удобнее, чем лазить по макросам... Надстройку я сделаю. Не в первый раз. В целом с использованием select case я уже реализовал... Но хочется по человечески все сделать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.05.2012, 13:17 |
|
||
|
Excel заполнение столбца в соответствии с даными другого столбца
|
|||
|---|---|---|---|
|
#18+
Не понимаю смысла, чем формулы не подходят... Можно ведь сделать такой макрос - наложить формулы на столбец, рассчитать, заменить формулы их значениями. Ну или, как сказано во втором пункте - используйте ADODB и запрос. Вопросы-то только такие - что вы там "в надстройку" забивать собрались? И почему пользователи не должны "ползать по макросам", если реализация - на VBA , что макросы и предполагает... Или всё же у вас дело очень интересное, но вы половину умалчиваете... Например, соответстве замен "код-код" вы желаете хранить отдельно, "в надстройке", а у пользователя чтобы только происходила замена? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.05.2012, 13:29 |
|
||
|
Excel заполнение столбца в соответствии с даными другого столбца
|
|||
|---|---|---|---|
|
#18+
AndreTM, А можно результат расчета формулы сделать статическим? Не подходит формула, потому что данные в дальнейшем из Excel идут в другой отдел. И что там с ними делают, я точно не знаю. Пользователь не должен лазить по макросам в силу своих знаний. А так же столбцы могут меняться, не всегда будет один и тот же столбец для входа и может быть другой столбец для выхода. В форме я предлагаю Пользователю ввести эти данные и нажать на кнопку. Пускай задача весьма мала, но смысл есть исключительно для удобства пользования. Коды они знают, но в ручную каждый раз забивать долго, а времени и так мало порой остается. Но да, весь смысл забить данные одного столбца в соответствии с данными другого и на этом все. Если ADODB применить, данные ж должны быть из базы данных, которая обработает sql запрос. Да, это было бы замечательно, sql запрос весьма простая вещь в таком случае. Но Excel то сам по себе не БД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.05.2012, 13:46 |
|
||
|
Excel заполнение столбца в соответствии с даными другого столбца
|
|||
|---|---|---|---|
|
#18+
Первые ваши рассуждения я как-то не понял... "Лазить по макросам" - не предлагается. Предлагается забить куда-то справочник соответствия кодов и значений, сделать, так сказать, отдельную таблицу. Где она будет - на отдельном листе, в другом файле, в другой БД - ваше дело. Если "столбцы меняются" - как раз проще научить пользователей функции ВПР(). И перед сохранением-передачей файла - замене формул на значения. Всё. Ладно, имея заведенную единую табличку подстановки значений на коды - можете сделать макрос и подвесить его в меню/на кнопку/на форму. Будете спрашивать столбик с данными и столбик для подстановки - и хоть заизменяйтесь. Что делать в этом макросе - я уже выше сказал. Как делать - вам показывать надо? Хорошо, один из примеров во вложении. насчет ADODB - откуда вы взяли, что "данные должны быть из базы данных"?? Данные должны быть из источника данных , а что в этом (или нужном вам) случае служит источником - определяется провайдером подключения. Хоть таблицы релиционной СУБД, хоть файловая БД, да хоть текстовый файл с разделителями... Тем более, почему вы думаете, что книги Excel не могут служить источником данных? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.05.2012, 14:22 |
|
||
|
Excel заполнение столбца в соответствии с даными другого столбца
|
|||
|---|---|---|---|
|
#18+
AndreTM, Спасибо за пример. Буду разбираться. На счет ADODB, мало знаком с подобными объектами. Судил исключительно по Вашему предложению о создании объекта ADODB и наложить к нему sql запрос. Попробую поискать какую-нибудь справку по данному объекту. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.05.2012, 15:52 |
|
||
|
Excel заполнение столбца в соответствии с даными другого столбца
|
|||
|---|---|---|---|
|
#18+
AndreTM, Кстати, если не секрет. Обратиться к именованному диапазону надстройки возможно? Или нужно исключительно подключиться к какой нить абстрактной базе данных в определенном местоположении? А то все range или sql строятся на заранее подключенном файле с БД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.05.2012, 16:44 |
|
||
|
Excel заполнение столбца в соответствии с даными другого столбца
|
|||
|---|---|---|---|
|
#18+
ТО есть вы хотите всё-таки таблицу соответствия забить в надстройку, поименовать её; надстройка, как я понимаю, у вас подключается пользователям автоматом... Ну так в надстройку же и забейте паблик-процедуру, которая будет получать хоть номера столбцов, хоть объекты-диапазоны, и заполнять их... И, кстати, почему "строятся на заранее подключенном файле"? Код: vbnet 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.05.2012, 17:08 |
|
||
|
Excel заполнение столбца в соответствии с даными другого столбца
|
|||
|---|---|---|---|
|
#18+
AndreTM, Немного не корректно сформулировал. На подключенном файле вообще. Т.е. просто написать мол ActiveSheet или Sheet(1) нельзя. У Вас наверно небольшая ошибка в строке подключения, xla же разрешение у надстроек... Ну по сути так и получается, что она подключается сама к себе через подключение файла. Ошибок такая "рекурсия" не может вызвать? Той же рекурсии вызвать не может? З.Ы. Пока попробовать не могу... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.05.2012, 17:46 |
|
||
|
Excel заполнение столбца в соответствии с даными другого столбца
|
|||
|---|---|---|---|
|
#18+
Quieteroks, в ВБА тоже можно быстро обрабатывать данные в массивах, даже может быстрее получится, чем через запрос. Но по Вашему объяснению я задачу в целом не вижу... Что из чего нужно получить, и зачем всё это делается? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.05.2012, 20:01 |
|
||
|
Excel заполнение столбца в соответствии с даными другого столбца
|
|||
|---|---|---|---|
|
#18+
Quieteroks, в ВБА тоже можно быстро обрабатывать данные в массивах, даже может быстрее получится, чем через запрос. Но по Вашему объяснению я задачу в целом не вижу... Что из чего нужно получить, и зачем всё это делается? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.05.2012, 20:03 |
|
||
|
|

start [/forum/topic.php?fid=61&msg=37778929&tid=2175755]: |
0ms |
get settings: |
7ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
158ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
40ms |
get tp. blocked users: |
1ms |
| others: | 238ms |
| total: | 468ms |

| 0 / 0 |
