Страницы: 1
RSS
Перетаскивание данных на другой лист
 
Добрый день.  
Подскажите, как сделать эксель-файл для обработки данных.  
 
Файл должен быть бесконечно длинный вниз (хотя бы тысяч 10 строчек чтобы выдержал).  
Я закидываю в него данные из таблицы. Мне нужно, чтобы из первого листа копировались данные во второй:  
1. Первая строчка игнорировалась бы полностью, т.е. копирование столбцов начиналось бы со второго.  
2. Стобец D (весь кроме первой строчки, как и писал выше) копировался в столбец А второго листа  
3. Столбец G в столбец B  
4. Столбец F в столбец С  
5. Столбец М в Е (т.е. D столбец остается пустым на втором листе)  
6. H в F
 
Sub wwww()  
a = Split("4 6 7 8 13", " ")  
b = Split("1 3 2 6 5", " ")  
For i = 0 To UBound(a)  
Sheets(1).Columns(Val(a(i))).Cells(2).Resize(Sheets(1).UsedRange.Rows.Count).Copy Sheets(2).Columns(Val(b(i))).Cells(2).Resize(Sheets(1).UsedRange.Rows.Count, 1)  
Next i  
End Sub
 
Не понял о каком файле речь.  
 
скрипт работает.  
но хотелось бы два момента:  
можно ли настроить, чтобы он сам автоматически перекидывал (не запуская его каждый раз) в реальном времени (средствами эксель вроде можно так было делать).  
первая строчка на втором листе должна быть уже с данными, а не просто пустая, т.е. из первого листа со 2ой и вниз, а на 2ом листе это будет с 1ой и вниз  
 
У меня файл с этим скриптом будет на потоке и каждый раз удалять строчку не самая удачная затея, т.к. со второго листа сразу все выдирается. Можно ли как-то в этот скрипт добавить удаление первой строчки, после переноса всех данных?
 
Sub wwww_2()  
Sheets(2).Cells.ClearContents  
a = Split("4 6 7 8 13", " ")  
b = Split("1 3 2 6 5", " ")  
For i = 0 To UBound(a)  
Sheets(1).Columns(Val(a(i))).Cells(2).Resize(Sheets(1).UsedRange.Rows.Count).Copy Sheets(2).Columns(Val(b(i)))  
Next i  
End Sub  
Re_1: Не понял о каком файле  
О файле - примере (Правила форума).  
Re_2: чтобы он сам автоматически  
По какому событию?
 
"По какому событию?"  
После того как я вставляю данные, чтобы они автоматически обрабатывались без всяких запусков. Может конечно я брежу, но когда я учился давно мы изучали взаимосвязь ячеек между листами и как-то соединяли, чтобы данные переносились. Именно это я и хочу сделать.  
 
Вставляю на листе1, и переключаясь на лист2 уже вижу в нем то что мне нужно.
 
ВАЖНО! Правила Форума - прочесть перед созданием тем!  
 
  3. .... ВНИМАНИЕ!!! Так как не все перешли на 2007-ой (2010-й) Офис, и если вопрос не касается напрямую этой версии, прилагайте файлы в версии Офиса 2003.
 
По какому событию? Так и не ответили...  
Но из сказанного я бы выбрал "и переключаясь" :)
 
Ну если следовать логике, то переключаясь именно на второй лист это и будет событие, т.к. пока я не переключился я и не вижу, что произошло на втором листе. Мне нравится такой подход.  
Мне нужно перезалить файл? Из принципа или у вас серьезно нет офиса? Может тогда сразу в зип, а то мало ли, винрара у вас нет, а про 7зип не знаете.
 
В первом посте было  
 
Стобец D  копировался в столбец А второго листа  
Столбец G в столбец B  
Столбец F в столбец С  
Столбец М в Е    
H в F  
 
в новом примере    
C в A  
F в B  
E в C  
J в E  
G в F    
 
Где правильно?
 
После заполнения листа "отсюда",  
запускаете макрос, который переносит    
нужные столбцы на лист "сюда"
 
В код листа "Сюда":  
Private Sub Worksheet_Activate()  
Dim a, b, i  
Application.ScreenUpdating = False  
Application.Calculation = xlCalculationManual  
Range(Cells(1, 1), Cells(Cells(Rows.Count, 1).End(xlUp).Row, 1)).EntireRow.ClearContents  
a = Split("4 6 7 8 13", " ")  
b = Split("1 3 2 6 5", " ")  
For i = 0 To UBound(a)  
Sheets(1).Columns(Val(a(i))).Cells(2).Resize(Sheets(1).UsedRange.Rows.Count).Copy Columns(Val(b(i)))  
Columns(Val(b(i))).EntireColumn.AutoFit  
Next i  
Application.Calculation = xlCalculationAutomatic  
Application.ScreenUpdating = True  
End Sub  
 
Private Sub Worksheet_Deactivate()  
Cells.ClearContents  
End Sub  
 
P.S. Офиса у меня нет :( :) У соседа есть, он под мою диктовку записывает в своём. Архиваторов у нас в городе нет. Ждём зимы, открываем окна, все файлы на морозе сжимаются. Из принципов которыми руководствуюсь, Вас, напрямую, касается один - не отказывать людям, если могу помочь.  
С моих слов записано верно.
 
Дубль темы? http://programmersforum.ru/showthread.php?t=213236  
И чем вас формулы не устраивают?
 
>>Kuzmich: В первом посте... [не так, как ] ...в новом примере
И там и там правильно. Просто выдача через веб-интерфейс немного отличается выдачи через csv  
 
>>k61: В код листа "Сюда": Private Sub Worksheet_Activate()...  
Скрипт работает. Все отлично. Только сайт обновили и немного отличатся стали поля. Сам я не понял, как с скрипте изменить нужные строчки на мои  
 
Сейчас мне выдает так как в файле. Нужно на второй лист перенести в такой последовательности CFE пустая JG
 
Номера столбцов источника:  
a = Split("4 6 7 8 13", " ") ' 4-"D", 6-"F", 7-"G", 8-"H", 13-"M"  
Номера столбцов куда копируем:  
b = Split("1 3 2 6 5", " ") ' 4-"A", 3-"C", 2-"B", 6-"F", 5-"E"  
Исправьте на:  
b = Split("3 6 5 10 7", " ") 'будет последовательность CFEJG
 
В макросе К61  
a = Split("4 6 7 8 13", " ")  
это столбцы D G F H M откуда копировать  
b = Split("1 3 2 6 5", " ")  
это столбцы A C B F E куда копировать  
поставьте свои номера столбцов
 
K61  
А, разве нельзя заменить вашу строку  
a = Split("4 7 6 13 8", " ")  
на более простую для понимания    
a = Array("4", "7", "6", "13", "8")  
и  
b = Split("1 2 3 5 6", " ")    на  
b = Array("1", "2", "3", "5", "6")
 
Можно, и кавычки убрать:  
Private Sub Worksheet_Activate()  
Dim a, b, i  
Application.ScreenUpdating = False  
Application.Calculation = xlCalculationManual  
Range(Cells(1, 1), Cells(Cells(Rows.Count, 1).End(xlUp).Row, 1)).EntireRow.ClearContents  
a = Array(4, 6, 7, 8, 13)  
b = Array(1, 3, 2, 6, 5)  
For i = 0 To UBound(a)  
Sheets(1).Columns(a(i)).Cells(2).Resize(Sheets(1).UsedRange.Rows.Count).Copy Columns(b(i))  
Columns(b(i)).EntireColumn.AutoFit  
Next i  
Application.Calculation = xlCalculationAutomatic  
Application.ScreenUpdating = True  
End Sub
 
Исправил код на нужные мне параметры  
 
Private Sub Worksheet_Activate()  
Dim a, b, i  
Application.ScreenUpdating = False  
Application.Calculation = xlCalculationManual  
Range(Cells(1, 1), Cells(Cells(Rows.Count, 1).End(xlUp).Row, 1)).EntireRow.ClearContents  
a = Split("3 5 6 7 10", " ")  
b = Split("3 6 5 10 7", " ")  
For i = 0 To UBound(a)  
Sheets(1).Columns(Val(a(i))).Cells(2).Resize(Sheets(1).UsedRange.Rows.Count).Copy Columns(Val(b(i)))  
Columns(Val(b(i))).EntireColumn.AutoFit  
Next i  
Application.Calculation = xlCalculationAutomatic  
Application.ScreenUpdating = True  
End Sub  
 
Private Sub Worksheet_Deactivate()  
Cells.ClearContents  
End Sub  
 
 
Но выводит он не так в том плане, что мне надо чтобы у меня в итоге получилась последовательность со столбца А на листе два, но располагались бы CFE пустой столбец JG данные столбцы с А  
 
У меня получилось так http://clck.ru/2l11J  
А результат нужен такой http://clck.ru/2l1Dv
 
Вот с Box'ом для указания столбов назначения.
Страницы: 1
Читают тему
Наверх