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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.11.2014, 22:24   #1
123456678
Пользователь
 
Регистрация: 13.11.2014
Сообщений: 13
По умолчанию Соединение значений в столбцах (Очень нужна помощь!)

Доброго времени суток, уважаемые форумчане!
Столкнулся с проблемой при написании кода.
Задача состоит в следующем: Есть таблица в которой (в каждом столбце) имеется необходимая информация(например дата, место провидения, сумма, время), но для удобства её обработки необходимо её переместить по столбцам, а некоторые столбцы объединить в один(что бы в одном столбце вместе стояли дата и время, в другом отдельно сумма и т.д.).
Есть один нюанс, таких таблиц много, и количество строк в них всегда разное.
С переносом столбцов с места на место справились без проблем, силами копирования и перемещения. Объединить тоже получилось, но только силами формул, а что бы применить формулу ко всему столбцу возникли сложности.

ActiveCell.FormulaR1C1 = "=RC[1]&RC[2]&RC[-1]"
Selection.AutoFill Destination:=Range("B3:B125"), Type:=xlFillDefault


В принципе такой код вполне устраивал. Но возникла проблема в том, что определяем количество строк в таблице переменно "i". А вот как вставить эту переменную в значение номера ячейки что бы получилось так (но было работоспособно):

Selection.AutoFill Destination:=Range("B3:B&i"), Type:=xlFillDefault

Тип переменной пробовал и Range и Integer не получается. Подскажите пожалуйста как поправить.
А может есть способ проще слепить эти столбцы? но с учетом того что количество строк всегда разное (варьируется от 100 до 300 000 и более)

Очень надеюсь на Вашу помощь.

Последний раз редактировалось 123456678; 13.11.2014 в 22:30.
123456678 вне форума Ответить с цитированием
Старый 13.11.2014, 23:42   #2
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Цитата:
Selection.AutoFill Destination:=Range("B3:B&i"), Type:=xlFillDefault
так почти все уже написано, переносим кавычку на 3 символа влево добавим пробелов и... готово
Код:
Selection.AutoFill Destination:=Range("B3:B" & i), Type:=xlFillDefault
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 13.11.2014, 23:43   #3
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

То ,что в кавычках у вас-это текст,переменную надо вынести на свободу
Selection.AutoFill Destination:=Range("B3:B&i"), Type:=xlFillDefault
Selection.AutoFill Destination:=Range("B3:B" & i ), Type:=xlFillDefault

PS:Опять не успел
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 13.11.2014, 23:47   #4
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Сережа, зато "отпустить переменную на свободу" - звучит гораздо круче!!!
очень образная фраза
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 13.11.2014, 23:55   #5
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

а в режиме "all inclusive" строка может выглядеть так:
Код:
Selection.AutoFill Destination:=Range("B3:B" & cells(rows.count,2).end(xlup).row), Type:=xlFillDefault
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 14.11.2014, 00:12   #6
123456678
Пользователь
 
Регистрация: 13.11.2014
Сообщений: 13
По умолчанию

IgorGO, doober, Огромное Вам спасибо!
К сожалению целиком код не под рукой , затра с утра все проверю!
Одно маленькое уточнение, какой тип переменной ставить? Long или Range? или так и не понимаю до конца...

З.Ы. "Вынести на своду" - это звучит гордо! амнистия почти, мать её!
123456678 вне форума Ответить с цитированием
Старый 14.11.2014, 00:20   #7
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

а последний вариант вообще без переменной, она вычисляется внутри выражения, как № последней строки с данными в колонке В
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 14.11.2014, 00:28   #8
123456678
Пользователь
 
Регистрация: 13.11.2014
Сообщений: 13
По умолчанию

IgorGO, Спасибо за оба варианта!
Душа не выдержала ждать до завтра, набросал примерно то что мне надо, правда без встроенной функции определения номера последней заполненной строки (которая определяет значение переменной) и ТАДАМ! все заработало!
Второй вариант я не совсем понял, но если не ошибся, там есть недостаток, что если в столбце окажется пустая ячейка, то он на ней остановится. Но завтра постараюсь по экспериментировать.

А ещё, если не сложно, может подскажите какую нибудь нормальную книгу, желательно на русском (я понимаю что это почти не сопоставимо), про VBA?
123456678 вне форума Ответить с цитированием
Старый 14.11.2014, 00:47   #9
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Цитата:
может подскажите какую нибудь нормальную книгу, желательно на русском (я понимаю что это почти не сопоставимо), про VBA?
Мое мнение.
Лучшая книга-это попробовать разобраться в решениях,которые выкладывают на форумах.
Постепенно увеличивая уровень сложности.
Скопировали код себе в файл,выполняете по шагам,смотрите на значения переменных.
Попытаться понять смысл происходящего.
На это уйдет не один год.
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 14.11.2014, 08:10   #10
123456678
Пользователь
 
Регистрация: 13.11.2014
Сообщений: 13
По умолчанию

doober, спасибо за совет, попробую.
А про время это точно. "Всю жизнь учись, все равно дураком помрешь" (с)
123456678 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Очень нужна помощь c матрицами, макросами в Excel. Заранее благодарен(поверьте, очень-очень нужна помощь) Farridjan Помощь студентам 1 03.07.2009 12:24
Очень нужна помощь! Нужно найти ошибку в очень простой программе. Lex55555777 Помощь студентам 3 07.12.2008 20:32
Нужна помощь в Паскале. Очень-очень срочно. !!! Помощь студентам 2 09.02.2007 15:12