Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/копирование строк с условием - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » копирование строк с условием (Макросы/Sub)
копирование строк с условием
Klara Дата: Четверг, 07.08.2014, 08:33 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 24
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Дорогие ребята, помогите разобраться)
у меня есть активная книга1, в ней вызывается макрос, выбираем папку где хранятся ексель файлы, открываем по одной(программно), и берем построчно из открытой книги2 листа1 сравниваем столбец Е со столбцом Е в активной книге1 листа2(этот лист изначально пустой), если не равны то копируем всю строчку и вставляем в активную книгу1 на лист2
копировать в дальнейшем друг под друга
т.е. берем 2ую строку из кн2 смотрим столбец Е там стоит 245, сравниваем это значение со столбцом Е кн1, там пусто, он не равны, вставляем всю строчку в лист2 кн1, потом другую строчку берем в кн2 сравниваем начиная с первой строчки столбца Е кн1, не равны, копируем в след пустую строчку, 3яя строка кн2 сравниваем начиная с первой строчки, не равны, копируем и тд
пробовала так...не получаться(((
[vba]
Код

Sub Вывод2()
Dim sFolder As String
Dim sFiles As String
        With Application.FileDialog(msoFileDialogFolderPicker)
            If .Show = False Then Exit Sub
            sFolder = .SelectedItems(1)
            Workbooks("Книга1").Activate
        End With
        sFolder = sFolder & IIf(Right(sFolder, 1) = Application.PathSeparator, "", Application.PathSeparator)
        Application.ScreenUpdating = False
        sFiles = Dir(sFolder & "*.xls*")
        Do While sFiles <> ""
               
            Workbooks.Open sFolder & sFiles
            Worksheets("Лист1").Activate             
                
            r_ = Range("B" & Rows.Count).End(xlUp).Row
               
                
                For i = 2 To r_     
' тут ругается         
                If ThisWorkbook.Worksheets(1).Range("E" & i).Value <> ActiveWorkbook.Sheets(2).Range("E" & i).Value Then
                ThisWorkbook.Worksheets(1).Rows(i).Copy ActiveWorkbook.Worksheets(2).Cells(i)
                End If
Next i
End sub
[/vba]
К сообщению приложен файл: 2646299.xlsx (10.1 Kb) · 1316100.xlsx (10.1 Kb)


Сообщение отредактировал Klara - Четверг, 07.08.2014, 08:41
 
Ответить
СообщениеДорогие ребята, помогите разобраться)
у меня есть активная книга1, в ней вызывается макрос, выбираем папку где хранятся ексель файлы, открываем по одной(программно), и берем построчно из открытой книги2 листа1 сравниваем столбец Е со столбцом Е в активной книге1 листа2(этот лист изначально пустой), если не равны то копируем всю строчку и вставляем в активную книгу1 на лист2
копировать в дальнейшем друг под друга
т.е. берем 2ую строку из кн2 смотрим столбец Е там стоит 245, сравниваем это значение со столбцом Е кн1, там пусто, он не равны, вставляем всю строчку в лист2 кн1, потом другую строчку берем в кн2 сравниваем начиная с первой строчки столбца Е кн1, не равны, копируем в след пустую строчку, 3яя строка кн2 сравниваем начиная с первой строчки, не равны, копируем и тд
пробовала так...не получаться(((
[vba]
Код

Sub Вывод2()
Dim sFolder As String
Dim sFiles As String
        With Application.FileDialog(msoFileDialogFolderPicker)
            If .Show = False Then Exit Sub
            sFolder = .SelectedItems(1)
            Workbooks("Книга1").Activate
        End With
        sFolder = sFolder & IIf(Right(sFolder, 1) = Application.PathSeparator, "", Application.PathSeparator)
        Application.ScreenUpdating = False
        sFiles = Dir(sFolder & "*.xls*")
        Do While sFiles <> ""
               
            Workbooks.Open sFolder & sFiles
            Worksheets("Лист1").Activate             
                
            r_ = Range("B" & Rows.Count).End(xlUp).Row
               
                
                For i = 2 To r_     
' тут ругается         
                If ThisWorkbook.Worksheets(1).Range("E" & i).Value <> ActiveWorkbook.Sheets(2).Range("E" & i).Value Then
                ThisWorkbook.Worksheets(1).Rows(i).Copy ActiveWorkbook.Worksheets(2).Cells(i)
                End If
Next i
End sub
[/vba]

Автор - Klara
Дата добавления - 07.08.2014 в 08:33
RAN Дата: Четверг, 07.08.2014, 09:33 | Сообщение № 2
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
[vba]
Код
Sub Вывод2()
      Dim sFolder As String
      Dim sFiles As String
      r_ = ThisWorkbook.Range("B" & ThisWorkbook.Rows.Count).End(xlUp).Row
      With Application.FileDialog(msoFileDialogFolderPicker)
          If .Show = False Then Exit Sub
          sFolder = .SelectedItems(1)
          '            Workbooks("Книга1").Activate
      End With
      sFolder = sFolder & IIf(Right(sFolder, 1) = Application.PathSeparator, "", Application.PathSeparator)
      Application.ScreenUpdating = False
      sFiles = Dir(sFolder & "*.xls*")
      Do While sFiles <> ""
          '            Workbooks.Open sFolder & sFiles
          '            Worksheets("Лист1").Activate
          '            r_ = Range("B" & Rows.Count).End(xlUp).Row
          With Workbooks.Open(sFolder & sFiles).Sheets(2)
              For i = 2 To r_
                  ' тут ругается
                  '                If ThisWorkbook.Worksheets(1).Range("E" & i).Value <> ActiveWorkbook.Sheets(2).Range("E" & i).Value Then
                  '                ThisWorkbook.Worksheets(1).Rows(i).Copy ActiveWorkbook.Worksheets(2).Cells(i)
                  If ThisWorkbook.Worksheets(1).Range("E" & i).Value <> .Range("E" & i).Value Then
                      ThisWorkbook.Worksheets(1).Rows(i).Copy .Cells(i, "A")
                  End If
              Next i
          End With
          sFiles = Dir
      Loop
End Sub
[/vba]


Быть или не быть, вот в чем загвоздка!

Сообщение отредактировал RAN - Четверг, 07.08.2014, 09:35
 
Ответить
Сообщение[vba]
Код
Sub Вывод2()
      Dim sFolder As String
      Dim sFiles As String
      r_ = ThisWorkbook.Range("B" & ThisWorkbook.Rows.Count).End(xlUp).Row
      With Application.FileDialog(msoFileDialogFolderPicker)
          If .Show = False Then Exit Sub
          sFolder = .SelectedItems(1)
          '            Workbooks("Книга1").Activate
      End With
      sFolder = sFolder & IIf(Right(sFolder, 1) = Application.PathSeparator, "", Application.PathSeparator)
      Application.ScreenUpdating = False
      sFiles = Dir(sFolder & "*.xls*")
      Do While sFiles <> ""
          '            Workbooks.Open sFolder & sFiles
          '            Worksheets("Лист1").Activate
          '            r_ = Range("B" & Rows.Count).End(xlUp).Row
          With Workbooks.Open(sFolder & sFiles).Sheets(2)
              For i = 2 To r_
                  ' тут ругается
                  '                If ThisWorkbook.Worksheets(1).Range("E" & i).Value <> ActiveWorkbook.Sheets(2).Range("E" & i).Value Then
                  '                ThisWorkbook.Worksheets(1).Rows(i).Copy ActiveWorkbook.Worksheets(2).Cells(i)
                  If ThisWorkbook.Worksheets(1).Range("E" & i).Value <> .Range("E" & i).Value Then
                      ThisWorkbook.Worksheets(1).Rows(i).Copy .Cells(i, "A")
                  End If
              Next i
          End With
          sFiles = Dir
      Loop
End Sub
[/vba]

Автор - RAN
Дата добавления - 07.08.2014 в 09:33
Rioran Дата: Четверг, 07.08.2014, 09:42 | Сообщение № 3
Группа: Авторы
Ранг: Ветеран
Сообщений: 903
Репутация: 290 ±
Замечаний: 0% ±

Excel 2013
Klara, здравствуйте.

Из очевидного Вашему макросу требуется:

1). Добавить закрывающий Loop к циклу Do While, это критично. Иначе цикла не будет.
2). Добавить перед закрытием цикла sFiles = Dir, чтобы макрос переходил к следующему файлу. Иначе на одном и том же топтаться будет.
3). После цикла в конце добавить Application.ScreenUpdating = True. Это не критично, скорее эстетика - если выключаешь обновление экрана - будь добр(а) его потом вернуть.
4). В Вашем макросе отсутствует поиск и перебор уже заполненных строк в ThisWorkBook'e.


Роман, Москва, voronov_rv@mail.ru
Яндекс-Деньги: 41001312674279
 
Ответить
СообщениеKlara, здравствуйте.

Из очевидного Вашему макросу требуется:

1). Добавить закрывающий Loop к циклу Do While, это критично. Иначе цикла не будет.
2). Добавить перед закрытием цикла sFiles = Dir, чтобы макрос переходил к следующему файлу. Иначе на одном и том же топтаться будет.
3). После цикла в конце добавить Application.ScreenUpdating = True. Это не критично, скорее эстетика - если выключаешь обновление экрана - будь добр(а) его потом вернуть.
4). В Вашем макросе отсутствует поиск и перебор уже заполненных строк в ThisWorkBook'e.

Автор - Rioran
Дата добавления - 07.08.2014 в 09:42
Klara Дата: Четверг, 07.08.2014, 09:48 | Сообщение № 4
Группа: Пользователи
Ранг: Новичок
Сообщений: 24
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
открывает теперь вообще все файлы которые в папке, даже ту,что уже открыта
и не понятно куда он копирует
 
Ответить
Сообщениеоткрывает теперь вообще все файлы которые в папке, даже ту,что уже открыта
и не понятно куда он копирует

Автор - Klara
Дата добавления - 07.08.2014 в 09:48
RAN Дата: Четверг, 07.08.2014, 09:57 | Сообщение № 5
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Копирует туда, куда в и пытались - на второй лист открываемой книги.
Повторное открытие я прозевал, да и у вас его не было.
По всему остальному, вам еще вчера Дмитрий ответил
Цитата
Что именно надо сравнить и по какому принципу - тоже неясно. Вот когда распишите нормально, что и с чем и как сравнивать - тогда можно будет попробовать Вам помочь. А так...


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеКопирует туда, куда в и пытались - на второй лист открываемой книги.
Повторное открытие я прозевал, да и у вас его не было.
По всему остальному, вам еще вчера Дмитрий ответил
Цитата
Что именно надо сравнить и по какому принципу - тоже неясно. Вот когда распишите нормально, что и с чем и как сравнивать - тогда можно будет попробовать Вам помочь. А так...

Автор - RAN
Дата добавления - 07.08.2014 в 09:57
Klara Дата: Четверг, 07.08.2014, 09:57 | Сообщение № 6
Группа: Пользователи
Ранг: Новичок
Сообщений: 24
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
1),2),3) это понятно)))это просто начальная вырезка из кода)
4)ThisWorkBook это имеется ввиду та самая книга, которую мы открываем, т.е. поиск непустых строк?если непустых, то по критериям
[vba]
Код

If Range("B" & i).Value <> "" Then
                     If Range("E" & i) <> "" Then
                         If IsDate(Range("D" & i)) Then

                         End If
                     End If
                 End If
[/vba]
 
Ответить
Сообщение1),2),3) это понятно)))это просто начальная вырезка из кода)
4)ThisWorkBook это имеется ввиду та самая книга, которую мы открываем, т.е. поиск непустых строк?если непустых, то по критериям
[vba]
Код

If Range("B" & i).Value <> "" Then
                     If Range("E" & i) <> "" Then
                         If IsDate(Range("D" & i)) Then

                         End If
                     End If
                 End If
[/vba]

Автор - Klara
Дата добавления - 07.08.2014 в 09:57
RAN Дата: Четверг, 07.08.2014, 10:00 | Сообщение № 7
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
ThisWorkBook ничего в виду не имеется. ThisWorkBook это Эта Книга (где живет макрос). А активной может быть любая. Тут вы и запутались.


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеThisWorkBook ничего в виду не имеется. ThisWorkBook это Эта Книга (где живет макрос). А активной может быть любая. Тут вы и запутались.

Автор - RAN
Дата добавления - 07.08.2014 в 10:00
Klara Дата: Четверг, 07.08.2014, 10:04 | Сообщение № 8
Группа: Пользователи
Ранг: Новичок
Сообщений: 24
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
вообщем видимо я не умею объяснять...(
 
Ответить
Сообщениевообщем видимо я не умею объяснять...(

Автор - Klara
Дата добавления - 07.08.2014 в 10:04
Klara Дата: Четверг, 07.08.2014, 10:05 | Сообщение № 9
Группа: Пользователи
Ранг: Новичок
Сообщений: 24
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
ааааа, ну вот наверно где мой косяк...а как сделать чтоб он обращался к открытой книге?
 
Ответить
Сообщениеааааа, ну вот наверно где мой косяк...а как сделать чтоб он обращался к открытой книге?

Автор - Klara
Дата добавления - 07.08.2014 в 10:05
RAN Дата: Четверг, 07.08.2014, 10:09 | Сообщение № 10
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
По кругу пошли? К открытой - это к какой?
Мой код обращается к двум книгам - Этой, и той, которая открыта макросом в данный момент (последняя).


Быть или не быть, вот в чем загвоздка!

Сообщение отредактировал RAN - Четверг, 07.08.2014, 10:12
 
Ответить
СообщениеПо кругу пошли? К открытой - это к какой?
Мой код обращается к двум книгам - Этой, и той, которая открыта макросом в данный момент (последняя).

Автор - RAN
Дата добавления - 07.08.2014 в 10:09
Klara Дата: Четверг, 07.08.2014, 10:12 | Сообщение № 11
Группа: Пользователи
Ранг: Новичок
Сообщений: 24
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
которую открыл через диалоговое окно))
книга1(как её называла активная)-это как раз куда надо копировать
книга2(открытая) - откуда надо копировать
 
Ответить
Сообщениекоторую открыл через диалоговое окно))
книга1(как её называла активная)-это как раз куда надо копировать
книга2(открытая) - откуда надо копировать

Автор - Klara
Дата добавления - 07.08.2014 в 10:12
RAN Дата: Четверг, 07.08.2014, 10:14 | Сообщение № 12
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
[vba]
Код
.Rows(i).Copy ThisWorkbook.Worksheets(1).Cells(i, "A")
[/vba]
Очень сложно?


Быть или не быть, вот в чем загвоздка!

Сообщение отредактировал RAN - Четверг, 07.08.2014, 10:14
 
Ответить
Сообщение[vba]
Код
.Rows(i).Copy ThisWorkbook.Worksheets(1).Cells(i, "A")
[/vba]
Очень сложно?

Автор - RAN
Дата добавления - 07.08.2014 в 10:14
Klara Дата: Четверг, 07.08.2014, 10:18 | Сообщение № 13
Группа: Пользователи
Ранг: Новичок
Сообщений: 24
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
не сложно,спасибо

все какие то злые(


Сообщение отредактировал Klara - Четверг, 07.08.2014, 10:18
 
Ответить
Сообщениене сложно,спасибо

все какие то злые(

Автор - Klara
Дата добавления - 07.08.2014 в 10:18
RAN Дата: Четверг, 07.08.2014, 10:55 | Сообщение № 14
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Вы считаете, что я со зла вам макрос правил?
Хорошо, буду добрым.


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеВы считаете, что я со зла вам макрос правил?
Хорошо, буду добрым.

Автор - RAN
Дата добавления - 07.08.2014 в 10:55
Мир MS Excel » Вопросы и решения » Вопросы по VBA » копирование строк с условием (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!