Страницы: 1
RSS
Как быстро скопировать данные из одной таблицы в другую отличную по структуре?
 
Друзья, пожалуйста, выручайте!  
 
Есть два файла. В одном (Файл1) исходная таблица, данные из которой необходимо скопировать (перекинуть) в таблицу из другого файла (Файл2), имеющую отличную структуру (посмотрите прикрепленный файл).  
 
Сейчас делаю вручную. Копирую столбец или столбцы если они рядом (и вставляю в другой файл через специальную вставку с галочкой транспонировать). Как должны ложиться диапазоны я отметил цветом.  
 
Проблема в том, что в файле-приемнике ячейки располагаются на нескольких листах и не рядом с друг другом, а через промежутки. А несвязанных диапазонов (зеленый, желтый, красный) много.  
 
Хотелось бы сделать что-то вроде макроса. Думаю написать цикл, который бы автоматически перекидывал данные из одного файла в другой.  
 
Но, не знаю как сделать несколько вещей:  
 
1. Как обратиться к открытому файлу по его имени?  
Ранее я сначала создавал новый объект Excel и открывал файл, а потом обращался к нему по имени ОБЪЕКТА. Но в данном случае необходимо обратиться именно по имени уже вручную открытого файла.  
 
2. Как определить параметры выделенной области? Смысл в том, что я сначала вручную бы выделил весь диапазон в исходном файле (т.к. он может быть разный по высоте), и он бы по заданному алгоритму копировался в ячейки расположенные в файле-приемнике относительно текущей выделенной в нем ячейки.  
 
Может есть еще какие-нибудь мысли как это сделать быстро?  
 
СПАСИБО!
 
Переименовал листы, чтобы в формуле легче было разбираться.  
Ищем Показатель1_1:  
в диапазоне '11'!$B$2:$E$6  
в строке    ПОИСКПОЗ(C$2;'11'!$B$2:$B$6;0)  
и столбце   ПОИСКПОЗ($B3;'11'!$B$2:$E$2;0)    
=ИНДЕКС('11'!$B$2:$E$6;ПОИСКПОЗ(C$2;'11'!$B$2:$B$6;0);ПОИСКПОЗ($B3;'11'!$B$2:$E$2;0))
 
Спасибо огромное за Ваш вариант, но он не совсем подходит из-за того, что наименования показателей в таблице-источнике и таблице-приемнике не совпадают в точности. Совпадает только порядок следования показателей. К тому же в источнике показатели следуют один за другим, а в приемнике через строчку, через несколько.  
 
И насколько я понимаю формулу надо скопировать во все ячейки таблицы-приемника, в которые должны попасть данные, но это тоже трудоемко, т.к. ячейки расположенны не рядом, а диапазонами.  
 
 
Поэтому я бы и хотел написать макрос, где прописать в цикле и указать с каким шагом нужно пропускать строки в таблице-приемнике.  
 
Только не знаю как определить размер (высоту) выделения (Selection) в исходной таблице? Чтобы знать сколько выделено наименований и на сколько нужно сдвигаться в цикле вправо в таблице-приемнике.  
 
А так же как определить координаты левой верхней ячейки выделения (Selection)? (Не задать координаты, а определить координаты того, что уже выделено вручную).
 
{quote}{login=}{date=13.01.2009 05:41}{thema=}{post}С  
 
Поэтому я бы и хотел написать макрос, где прописать в цикле и указать с каким шагом нужно пропускать строки в таблице-приемнике.  
 
.{/post}{/quote}  
 
ИМХО проще сначала собрать данные в "кучу", а уже потом вставить необходимое кол-во строк между. Держите немного примеров с форума...
 
{quote}{login=Igor67}{date=13.01.2009 09:29}{thema=Re: }{post}{quote}{login=}{date=13.01.2009 05:41}{thema=}{post}С  
 
Поэтому я бы и хотел написать макрос, где прописать в цикле и указать с каким шагом нужно пропускать строки в таблице-приемнике.  
 
.{/post}{/quote}  
 
ИМХО проще сначала собрать данные в "кучу", а уже потом вставить необходимое кол-во строк между. Держите немного примеров с форума...{/post}{/quote}  
 
В том то и дело, что файл в который нужно забить данные имеет структуру и защищен от изменений. Взлом защиты неприемлем. А в промежутках между строками в которые надо забить данные находятся формулы.
 
Снятие блокировки со страницы, если пароль забыл    
   
 
Код:Sub Password_Cracker()    
     
 Dim i As Integer, j As Integer, k As Integer    
 Dim l As Integer, m As Integer, n As Integer    
 Dim i1 As Integer, i2 As Integer, i3 As Integer    
 Dim i4 As Integer, i5 As Integer, i6 As Integer    
 On Error Resume Next    
 For i = 65 To 66: For j = 65 To 66: For k = 65 To 66    
 For l = 65 To 66: For m = 65 To 66: For i1 = 65 To 66    
 For i2 = 65 To 66: For i3 = 65 To 66: For i4 = 65 To 66    
 For i5 = 65 To 66: For i6 = 65 To 66: For n = 32 To 126    
       
Kennwort = Chr(i) & Chr(j) & Chr(k) & Chr(l) & Chr(m) & Chr(i1) & Chr(i2) & Chr(i3) & Chr(i4) & Chr(i5) & Chr(i6) & Chr(n)    
ActiveSheet.Unprotect Kennwort    
If ActiveSheet.ProtectContents = False Then    
    MsgBox "Done" & vbcr & "enjoy it )"    
      Exit Sub    
 End If    
 Next: Next: Next: Next: Next: Next    
 Next: Next: Next: Next: Next: Next    
   
End Sub    
 
 
 
как раз вчера случайно нарыл , в тему :)
 
Взлом неприемлем потому как файл является некой формой сторонней организации и в случае взлома не будет принят ей к рассмотрению.  
 
У меня сейчас самый главный вопрос: Как определить координаты выделения ячеек прямоугольной формы, выделенного вручную (левую верхнюю ячейку, правую нижнюю или размерность (высоту, ширину))?  
 
Смысл такой. Я выделяю прямоугольник с наименованиями, нажимаю кнопку, а программа сама определяет какие наименования выделены и в цикле добавляет показатели в другой файл для такого количества наименований.
 
Зайдите по ссылке, и вообще на данном сайте много хороших и разных примеров.  
http://www.msoffice.nm.ru/faq/macros/range.htm#faq158  
sub getSelectionAdr()  
With Selection 'Range("F5:J153")  
    iF_Address = .Item(1).Address  
    iL_Address = .Item(.Count).Address  
End With  
MsgBox "Адрес первой ячейки : " & iF_Address & _  
vbCrLf & "Адрес последней ячейки : " & iL_Address  
end sub
 
Марчук, попробовала расшифровать простой пароль 3  
..оч медленно работает... 6 мин...    
 
 
в том файле, который у меня, код зашифрован...
Страницы: 1
Читают тему
Наверх