Страницы: 1
RSS
выделение диапазона с пустыми ячейками
 
Добрый день!    
Не могу реализовать макрос выделения диапазона которые изменяется, но при этом в выделяемых столбцах есть пустые ячейки. Есть столбец который является основным.    
В прикрепленном файле есть данные, нужно скопировать столбцы B:E от 2 строки до конца списка. Копировать не важно куда, по задаче эти данные копируются в другой файл.  
 
Конец списка это столбец А.
 
Здравствуйте! Было бы правильно показать правее желаемый результат.
 
{quote}{login=Юрий М}{date=19.01.2011 12:40}{thema=}{post}Здравствуйте! Было бы правильно показать правее желаемый результат.{/post}{/quote}  
 
Вот сюда это копируется и выглядит в таком виде, данных на самом деле больше.  
Мне главное понять суть как сделать выделение и копирование с пустыми ячейками.
 
Ведь просил -"правее" покажите желаемое: есть диапазон с исходными данными, а нужно получить "ВОТ ТАК". Может кто и захочет сопоставлять два файла...
 
{quote}{login=Юрий М}{date=19.01.2011 01:08}{thema=}{post}Ведь просил -"правее" покажите желаемое: есть диапазон с исходными данными, а нужно получить "ВОТ ТАК". Может кто и захочет сопоставлять два файла...{/post}{/quote}  
 
простите не так вас понят.  
 
Я пробовал использовать  
 
   Range("b2").Activate  
   ActiveCell.Offset(0, 0).Range("A1:d1").Select  
   ActiveCell.Activate  
   Range(Selection, Selection.End(xlDown)).Select  
   Selection.Copy  
 
Но он же двигается до первой же пустой и считает ее концом списка.
 
Пока что решение вижу, заменой пустых ячеек на какое то значение скажем ААА  
и после копировать все что нужно, но при этом он заменяет пустые ячейки все 65 000 строк, что не есть хорошо.  
 
   Range("a1").Activate  
 
   Range(Selection, Selection.End(xlDown)).Select  
   Range(Selection, Selection.End(xlToRight)).Select  
 
   Dim nul As Variant  
   For Each nul In [B:J]
       If nul.Text = "" Then  
       nul.Value = "AAA"  
       End If  
   Next
 
Вы ничего не напутали с данными? Откуда в "новом" диапазоне для кода 11665 взялись вот эти данные: 5,9%, 3,1%, 72221, 5,9?  
Откуда данные в столбце H?  
Про код я молчу: ActiveCell.Activate = активировать активную ячейку.
 
Set a = Range("B3:C3")  
Set ff = Application.Intersect(a.EntireColumn, ActiveSheet.UsedRange)  
ss = ff.Address  
 
для вашего файла  
 
ss ="$B$1:$C$291"
 
после очистки файла    
ss ="$B$1:$C$85"
 
{quote}{login=Юрий М}{date=19.01.2011 01:42}{thema=}{post}Вы ничего не напутали с данными? Откуда в "новом" диапазоне для кода 11665 взялись вот эти данные: 5,9%, 3,1%, 72221, 5,9?  
Откуда данные в столбце H?  
Про код я молчу: ActiveCell.Activate = активировать активную ячейку.{/post}{/quote}  
 
В последнем файле левее это готовый выгруженный результат который формируется в Access, правее это в файле Ексель исходник, то есть по сути он не изменен, это шаблон, в него вставляются данные из сформированного файла в Access, после чего с добавлением столбцов, формул, раскраской, так же столбцы некоторые должны быть в % или же иметь 2 знака после запятой. Сохраняем в нужное нам название и число и отправляем по почте. Это кратко, что выполняется в файле.
 
{quote}{login=dl}{date=19.01.2011 01:42}{thema=}{post}Set a = Range("B3:C3")  
Set ff = Application.Intersect(a.EntireColumn, ActiveSheet.UsedRange)  
ss = ff.Address  
 
для вашего файла  
 
ss ="$B$1:$C$291"{/post}{/quote}  
 
Что конкретно он выполняет?
 
это просто фрагмент кода,  
вставьте в свой макрос  
и когда захотите скопировать  
"набор ячеек включая пустые"  
код будет ff.Copy
 
А как его ограничить списком, чтобы ровное количество копировалось не больше и не меньше чем есть в столбике А (Код)  
 
Просто он почему то копирует 2 столбца B:C полностью с шапкой.  
 
   Range("b2").Activate  
   Dim a As Variant  
   Dim ff As Variant  
     
   Set a = Range("B3:C3")  
   Set ff = Application.Intersect(a.EntireColumn, ActiveSheet.UsedRange)  
   ss = "$B$1:$C$85"  
   ff.Copy  
 
Если конечно я правильно делаю.
 
он действительно может копировать больше ячеек чем есть в столбце "A"  
 
попробуйте  
Dim a As Range  
Dim ff As Range  
 
Set a = Range("B3:C3")  
Set ff = Application.Intersect(a.EntireColumn, ActiveSheet.UsedRange)  
MsgBox ("Будут скопированы ячейки: " & ff.Address)  
ff.Copy  
 
по русски это    
назначить объект a типа диапазон = Диапазон(по адрес = "B3:C3")  
назначить объект ff типа диапазон = пересечение(а.всеколонки_полностью и весь_используемый_диапазон_на_активном_листе)  
 
ActiveSheet.UsedRange == весь_используемый_диапазон_на_активном_листе  
используемый диапазон это квадратная область от А1 до самой последней внизу и справа когда либо использованной ячейки на листе  
 
из самого смысла пересечения понятно что войдёт шапка и ячейки на самой нижней строки с которой Вы при редактировании выполняли операции ввода, неважно пуста сейчас эта ячейка или нет
 
{quote}{login=Руслан}{date=19.01.2011 03:27}{thema=}{post}А как его ограничить списком, чтобы ровное количество копировалось не больше и не меньше чем есть в столбике А (Код)  
{/post}{/quote}  
 
ещё раз сформулируйте задачу  
из цитаты следует  
что Вам нужно скопировать несколько столбцов соседних с "А" в соответствии с областью его заполнения.  
 
вопрос: Range("A1").End(xlDown) - позволяет Вам найти искомую последнюю ячейку в столбце до которой (включительно) требуется копировать?  
 
ну и начиная с какой строки надо копировать известно?
 
{quote}{login=dl}{date=19.01.2011 03:57}{thema=Re: }{post}{quote}{login=Руслан}{date=19.01.2011 03:27}{thema=}{post}А как его ограничить списком, чтобы ровное количество копировалось не больше и не меньше чем есть в столбике А (Код)  
{/post}{/quote}  
 
ещё раз сформулируйте задачу  
из цитаты следует  
что Вам нужно скопировать несколько столбцов соседних с "А" в соответствии с областью его заполнения.  
 
вопрос: Range("A1").End(xlDown) - позволяет Вам найти искомую последнюю ячейку в столбце до которой (включительно) требуется копировать?  
 
ну и начиная с какой строки надо копировать известно?{/post}{/quote}  
 
Задача: На листе данные столбцы A B C D E F  и так далее 107 столбцов  
Есть шапка Код, Цена, Товар и так далее 107 столбцов.  
Нужно не трогая шапку скопировать все что ниже нее, соответственно задав какие столбцы должны быть скопированы не трогая шапку.    
 
В принципе ваше решение мне подходит, даже с шапкой, я могу в шаблоне файла ее удалить и копировать исходные данные в другой файл куда мне угодно уже с готовой шапкой.
 
пробуйте:  
 
Set ff = Range(Range("A2"), Range("A2").End(xlDown)).Offset(0, 1).Resize(, 4)  
MsgBox ("Будут скопированы ячейки: " & ff.Address)  
ff.copy  
 
успехов! /на сегодня...  
--------  
химмаш-сортировка-транзит
 
{quote}{login=dl}{date=19.01.2011 04:11}{thema=offset = сместить диапазон; resize = изменить размер диапазона}{post}пробуйте:  
 
Set ff = Range(Range("A2"), Range("A2").End(xlDown)).Offset(0, 1).Resize(, 4)  
MsgBox ("Будут скопированы ячейки: " & ff.Address)  
ff.copy  
 
успехов! /на сегодня...  
--------  
химмаш-сортировка-транзит{/post}{/quote}  
 
Спасибо! Оба варианта подходят и работаю превосходно.
Страницы: 1
Читают тему
Наверх