Страницы: 1
RSS
Перенос данных по условию на второй лист
 
Интересует следующее  
 
Нужно выполнить перенос данных из строк из одного листа на второй по условиям  
 
есть строки с данными  
в первом столбце ставим цифру 1 (или другой знак)  
соответственно данная строка должна быть перемещена на второй лист или цифры убираем то и строка убирается со второго листа  
объем до ста строк
 
Вы меня конечно извините, но как Вы собираетесь "или цифры убираем" из строки, которой уже нет?  
Компьютер думать не умеет - если ему сказали "ПЕРЕНЕСИ", то ведь он и перенесёт :)
 
{quote}{login=Hugo}{date=02.12.2011 10:49}{thema=}{post}Вы меня конечно извините, но как Вы собираетесь "или цифры убираем" из строки, которой уже нет?  
Компьютер думать не умеет - если ему сказали "ПЕРЕНЕСИ", то ведь он и перенесёт :){/post}{/quote}  
убираем только из первого столбца  
т.е должно выполниться условие на втором листе  
если в столбце A1:A10 присуствует знак (цифра) то данная строка переносится на второй лист и соответственно если ничего нет то строка не переносится
 
Давайте внесём ясность - по русски "перенести" значит что-то взять в одном месте и отнести в другое.  
Судя по общему описанию - Вам не нужно переносить, а нужно копировать.  
Пока нет ясности - нет кода.
 
{quote}{login=Hugo}{date=02.12.2011 11:18}{thema=}{post}Давайте внесём ясность - по русски "перенести" значит что-то взять в одном месте и отнести в другое.  
Судя по общему описанию - Вам не нужно переносить, а нужно копировать.  
Пока нет ясности - нет кода.{/post}{/quote}  
 
Да, не правильно выразился - скопировать требуется
 
Такой вариант - всё в модуле второго листа.  
Копируются только данные - без форматов!  
Но пока не перешли на второй лист - данные не обновятся!  
Хотя это можно исправить - выполнять этот код не по событию перехода на второй лист, а по событию изменения на первом в столбце A.  
Всё зависит от неизвестной нам задачи в целом - так как сейчас будет работать быстрее.
 
{quote}{login=Hugo}{date=02.12.2011 11:39}{thema=}{post}Такой вариант - всё в модуле второго листа.  
Копируются только данные - без форматов!  
Но пока не перешли на второй лист - данные не обновятся!  
Хотя это можно исправить - выполнять этот код не по событию перехода на второй лист, а по событию изменения на первом в столбце A.  
Всё зависит от неизвестной нам задачи в целом - так как сейчас будет работать быстрее.{/post}{/quote}  
Спасибо.Вроде подходит. Как скопировать макрос в др файл, книгу
 
Правый клик на ярлыке листа - исходный код - копируете - правый клик на ярлыке листа - исходный код - вставляете
 
{quote}{login=mlm1}{date=02.12.2011 12:19}{thema=Re: }{post}{quote}{login=Hugo}{date=02.12.2011 11:39}{thema=}{post}Такой вариант - всё в модуле второго листа.  
Копируются только данные - без форматов!  
Но пока не перешли на второй лист - данные не обновятся!  
Хотя это можно исправить - выполнять этот код не по событию перехода на второй лист, а по событию изменения на первом в столбце A.  
Всё зависит от неизвестной нам задачи в целом - так как сейчас будет работать быстрее.{/post}{/quote}  
Спасибо.Вроде подходит. Как скопировать макрос в др файл, книгу{/post}{/quote}  
 
Когда убираешь на первом листе цифру то остается некоторые записи на второй странице - как устранить данную проблему
 
Это из-за    
a = Sheets(1).UsedRange.Value  
Если первый столбец пустой, то UsedRange начинается со второго столбца...  
 
Нужно иначе диапазон определять.  
Можно прописать явно например так:  
a = Sheets(1).[a1:C1000].Value
но лучше для примера сделать так:  
 
 
Private Sub Worksheet_Activate()  
   Dim a(), i&, ii&, x&  
   UsedRange.Clear  
   With Sheets(1)  
   a = .Range(.[C1], .Range("A" & .Rows.Count).End(IIf(Len(.Range("A" & .Rows.Count)), xlDown, xlUp))).Value
   End With  
   ReDim b(1 To UBound(a, 1), 1 To UBound(a, 2))  
   For i = 1 To UBound(a)  
       If Len(a(i, 1)) Then  
           ii = ii + 1  
           For x = 2 To UBound(a, 2): b(ii, x) = a(i, x): Next  
       End If  
   Next  
If ii > 0 Then [A1].Resize(ii, UBound(b, 2)) = b
End Sub
 
{quote}{login=Hugo}{date=02.12.2011 12:53}{thema=}{post}Это из-за    
a = Sheets(1).UsedRange.Value  
Если первый столбец пустой, то UsedRange начинается со второго столбца...  
 
Нужно иначе диапазон определять.  
Можно прописать явно например так:  
a = Sheets(1).[a1:C1000].Value
но лучше для примера сделать так:  
 
 
Private Sub Worksheet_Activate()  
   Dim a(), i&, ii&, x&  
   UsedRange.Clear  
   With Sheets(1)  
   a = .Range(.[C1], .Range("A" & .Rows.Count).End(IIf(Len(.Range("A" & .Rows.Count)), xlDown, xlUp))).Value
   End With  
   ReDim b(1 To UBound(a, 1), 1 To UBound(a, 2))  
   For i = 1 To UBound(a)  
       If Len(a(i, 1)) Then  
           ii = ii + 1  
           For x = 2 To UBound(a, 2): b(ii, x) = a(i, x): Next  
       End If  
   Next  
If ii > 0 Then [A1].Resize(ii, UBound(b, 2)) = b
End Sub{/post}{/quote}  
 
Проблема решена, но копируются первые две ячейки в строке.  
Как сделать так что бы копировалась полностью строка (или первые несколько ячеек например 5-10 ячеек)
 
.Range(.[C1]
для 5-10 замените C на E-J :)
 
{quote}{login=Hugo}{date=02.12.2011 01:26}{thema=}{post}.Range(.[C1]
для 5-10 замените C на E-J :){/post}{/quote}  
 
Вставил пишет ошибку 1004 - что то не так
 
Для 5 - E  
для 10 - J  
:)
 
{quote}{login=Hugo}{date=02.12.2011 01:42}{thema=}{post}Для 5 - E  
для 10 - J  
:){/post}{/quote}  
 
Теперь - понял
 
{quote}{login=mlm1}{date=02.12.2011 02:06}{thema=Re: }{post}{quote}{login=Hugo}{date=02.12.2011 01:42}{thema=}{post}Для 5 - E  
для 10 - J  
:){/post}{/quote}  
 
Теперь - понял{/post}{/quote}  
 
Возможно ли выполнить такое -при копирование с нескольких листов или только с одного листа
 
Можно и с нескольких.  
Просто взять данные или в несколько массивов и выгрузить один под другим, или брать несколько раз в один и выгружать несколько раз со сдвигом.  
Смотря сколько листов - если пара/тройка, то я бы сделал несколько массивов (чтоб не бегать по листам), и по Ubound(массив) определял сдвиг (ну это в обоих вариантах пригодится).
 
{quote}{login=Hugo}{date=05.12.2011 03:17}{thema=}{post}Можно и с нескольких.  
Просто взять данные или в несколько массивов и выгрузить один под другим, или брать несколько раз в один и выгружать несколько раз со сдвигом.  
Смотря сколько листов - если пара/тройка, то я бы сделал несколько массивов (чтоб не бегать по листам), и по Ubound(массив) определял сдвиг (ну это в обоих вариантах пригодится).{/post}{/quote}  
 
Есть 10 листов  
С каждого листа планируется копировать по 10 записей на один лист
 
{quote}{login=mlm1}{date=05.12.2011 03:45}{thema=Re: }{post}{quote}{login=Hugo}{date=05.12.2011 03:17}{thema=}{post}Можно и с нескольких.  
Просто взять данные или в несколько массивов и выгрузить один под другим, или брать несколько раз в один и выгружать несколько раз со сдвигом.  
Смотря сколько листов - если пара/тройка, то я бы сделал несколько массивов (чтоб не бегать по листам), и по Ubound(массив) определял сдвиг (ну это в обоих вариантах пригодится).{/post}{/quote}  
 
Есть 10 листов  
С каждого листа планируется копировать по 10 записей на один лист{/post}{/quote}  
 
Подскажите как это реализовать
 
Я уже подсказал :)  
А если Вам нужен полностью рабочий код - то нужен пример в файле с подробным объяснением. И время - у меня его сейчас нет, т.ч. может быть кто-то другой сделает...  
А вообще код то в общем готов - только в цикл по листам его поставить и место выгрузки динамически определить.
 
{quote}{login=Hugo}{date=08.12.2011 12:46}{thema=}{post}Я уже подсказал :)  
А если Вам нужен полностью рабочий код - то нужен пример в файле с подробным объяснением. И время - у меня его сейчас нет, т.ч. может быть кто-то другой сделает...  
А вообще код то в общем готов - только в цикл по листам его поставить и место выгрузки динамически определить.{/post}{/quote}  
 
Нужно решить по возможности следующую задачу  
Если в столбце А на Листе 1 и 2 присуствуют знак или цифра то на листе 2 отображаются данные из соответствующих строк (напротив кот в столбце А находятся цифры или знаки
 
Не понял эту фразу:  
"Если в столбце А на Листе 1 и 2 присуствуют знак или цифра то на листе 2"  
Я думаю, подразумевался Лист3.  
Для двух конкретных листов можно так сделать (почему в коде [J1], я уже не помню, но не менял) - код для второго листа, где похожий уже есть:
 
Option Explicit  
 
Private Sub Worksheet_Activate()  
   Dim a(), i&, ii&, x&, sh, sdvig&  
   UsedRange.Clear  
   sdvig = 1  
   For Each sh In Array("Лист1", "Лист3")  
       ii = 0  
       With Sheets(sh)  
           a = .Range(.[J1], .Range("A" & .Rows.Count).End(IIf(Len(.Range("A" & .Rows.Count)), xlDown, xlUp))).Value
       End With  
       ReDim b(1 To UBound(a, 1), 1 To UBound(a, 2))  
       For i = 1 To UBound(a)  
           If Len(a(i, 1)) Then  
               ii = ii + 1  
               For x = 2 To UBound(a, 2): b(ii, x) = a(i, x): Next  
           End If  
       Next  
       If ii > 0 Then  
          Range("A" & sdvig).Resize(ii, UBound(b, 2)) = b  
       sdvig = sdvig + ii  
       End If  
   Next  
End Sub
 
{quote}{login=Hugo}{date=09.12.2011 10:29}{thema=}{post}Не понял эту фразу:  
"Если в столбце А на Листе 1 и 2 присуствуют знак или цифра то на листе 2"  
Я думаю, подразумевался Лист3.  
Для двух конкретных листов можно так сделать (почему в коде [J1], я уже не помню, но не менял) - код для второго листа, где похожий уже есть:
 
Option Explicit  
 
Private Sub Worksheet_Activate()  
   Dim a(), i&, ii&, x&, sh, sdvig&  
   UsedRange.Clear  
   sdvig = 1  
   For Each sh In Array("Лист1", "Лист3")  
       ii = 0  
       With Sheets(sh)  
           a = .Range(.[J1], .Range("A" & .Rows.Count).End(IIf(Len(.Range("A" & .Rows.Count)), xlDown, xlUp))).Value
       End With  
       ReDim b(1 To UBound(a, 1), 1 To UBound(a, 2))  
       For i = 1 To UBound(a)  
           If Len(a(i, 1)) Then  
               ii = ii + 1  
               For x = 2 To UBound(a, 2): b(ii, x) = a(i, x): Next  
           End If  
       Next  
       If ii > 0 Then  
          Range("A" & sdvig).Resize(ii, UBound(b, 2)) = b  
       sdvig = sdvig + ii  
       End If  
   Next  
End Sub{/post}{/quote}  
 
Спасибо работает
 
{quote}{login=mlm1}{date=09.12.2011 10:36}{thema=Re: }{post}{quote}{login=Hugo}{date=09.12.2011 10:29}{thema=}{post}Не понял эту фразу:  
"Если в столбце А на Листе 1 и 2 присуствуют знак или цифра то на листе 2"  
Я думаю, подразумевался Лист3.  
Для двух конкретных листов можно так сделать (почему в коде [J1], я уже не помню, но не менял) - код для второго листа, где похожий уже есть:
 
Option Explicit  
 
Private Sub Worksheet_Activate()  
   Dim a(), i&, ii&, x&, sh, sdvig&  
   UsedRange.Clear  
   sdvig = 1  
   For Each sh In Array("Лист1", "Лист3")  
       ii = 0  
       With Sheets(sh)  
           a = .Range(.[J1], .Range("A" & .Rows.Count).End(IIf(Len(.Range("A" & .Rows.Count)), xlDown, xlUp))).Value
       End With  
       ReDim b(1 To UBound(a, 1), 1 To UBound(a, 2))  
       For i = 1 To UBound(a)  
           If Len(a(i, 1)) Then  
               ii = ii + 1  
               For x = 2 To UBound(a, 2): b(ii, x) = a(i, x): Next  
           End If  
       Next  
       If ii > 0 Then  
          Range("A" & sdvig).Resize(ii, UBound(b, 2)) = b  
       sdvig = sdvig + ii  
       End If  
   Next  
End Sub{/post}{/quote}  
 
Спасибо работает{/post}{/quote}  
 
Добрый день  
Подскажите возможно ли выполнить следующее используя Ваш код  
 
необходимо по условию копировать на разные листы  
если в столбце А есть знак, цифра - то данные копируются на лист 2  
если в столбце В есть знак, цифра - то данные копируются на лист 3  
Пример во вложении
Страницы: 1
Читают тему
Наверх