Доброго времени суток. Подскажите пожалуйста как в виде кода VBA можно реализовать такое условие: Найти в столбце "A" где содержится десяток производителей одного, например "Google" и все строки где будет указан данный производитель скопировать в другой фаил. написал вот такой код
[vba]
Код
Dim wb1 As Object, wb2 As Object Dim ra As Range: Application.ScreenUpdating = False
Set wb1 = Windows("rp074c_20140708_0414.xls").ActiveSheet Set wb2 = Windows("Поставщики.xls").ActiveSheet
Application.ScreenUpdating = False With wb1.UsedRange: .Value = .Value: End With
wb1.Activate ActiveSheet.Range("$A$7:$EL$19984").AutoFilter Field:=2, Criteria1:= _ "=001 - Hayat Kimya Sanayi A.S. (Turkey)", Operator:=xlOr, Criteria2:= _ "=001b - Hayat Kimya Sanayi A.S. (Bulgaria)" wb1.Columns("CO:CT").Copy wb2.Columns("A:A")
но есть проблема в последней строчки, я хочу скопировать данные с одного файла в другой фаил на второй лист
ЗЫ Код конечно немного туговат, может можно сделать чуточку по другому, буду весьма рад если покажите как.
Доброго времени суток. Подскажите пожалуйста как в виде кода VBA можно реализовать такое условие: Найти в столбце "A" где содержится десяток производителей одного, например "Google" и все строки где будет указан данный производитель скопировать в другой фаил. написал вот такой код
[vba]
Код
Dim wb1 As Object, wb2 As Object Dim ra As Range: Application.ScreenUpdating = False
Set wb1 = Windows("rp074c_20140708_0414.xls").ActiveSheet Set wb2 = Windows("Поставщики.xls").ActiveSheet
Application.ScreenUpdating = False With wb1.UsedRange: .Value = .Value: End With
wb1.Activate ActiveSheet.Range("$A$7:$EL$19984").AutoFilter Field:=2, Criteria1:= _ "=001 - Hayat Kimya Sanayi A.S. (Turkey)", Operator:=xlOr, Criteria2:= _ "=001b - Hayat Kimya Sanayi A.S. (Bulgaria)" wb1.Columns("CO:CT").Copy wb2.Columns("A:A")
исходный фаил, откуда беру данные, весит более 70мб да и данные там такие, которые я не могу предоставить на всеобщие обозрение Надеялся, что кода будет достаточно Но если нужны именно файлы, попотею и сделаю что то наподобие
исходный фаил, откуда беру данные, весит более 70мб да и данные там такие, которые я не могу предоставить на всеобщие обозрение Надеялся, что кода будет достаточно Но если нужны именно файлы, попотею и сделаю что то наподобиеXaden
Сообщение отредактировал Xaden - Вторник, 08.07.2014, 18:36
Добавил файлы И еще вопрос на засыпку, как то встречался с кодом, что при запуске макроса можно было выбирать откуда копировать данные, если у кого то такое есть под рукой буду весьма благодарен, так как исходник у меня каждый день меняет свое название.
Добавил файлы И еще вопрос на засыпку, как то встречался с кодом, что при запуске макроса можно было выбирать откуда копировать данные, если у кого то такое есть под рукой буду весьма благодарен, так как исходник у меня каждый день меняет свое название.Xaden
Sub q() Dim wb1 As Workbook, wb2 As Workbook, sh1 As Worksheet, sh2 As Worksheet 'Dim ra As Range Application.ScreenUpdating = False
Set wb1 = Workbooks("rp074c_20140708_0414.xls") Set wb2 = Workbooks("Поставщики.xls") Set sh2 = wb2.ActiveSheet
Application.ScreenUpdating = False With wb1 .Activate .ActiveSheet.UsedRange .Value = .ActiveSheet.UsedRange.Value
.ActiveSheet.Range("$A$7:$EL$19984").AutoFilter Field:=2, Criteria1:= _ "=001 - Hayat Kimya Sanayi A.S. (Turkey)", Operator:=xlOr, Criteria2:= _ "=001b - Hayat Kimya Sanayi A.S. (Bulgaria)" .ActiveSheet.Columns("CO:CT").Copy sh2.Range("A1")
.ActiveSheet.Range("$A$7:$EL$19984").AutoFilter Field:=2, Criteria1:= _ "=002 - Evyap International A.S. (Turkey)", Operator:=xlOr .ActiveSheet.Columns("CO:CT").Copy wb2.Worksheets("Лист2").Range("A1") End With End Sub
PS А почему вы не указали, что тема на нескольких форумах?
[vba]
Код
Sub q() Dim wb1 As Workbook, wb2 As Workbook, sh1 As Worksheet, sh2 As Worksheet 'Dim ra As Range Application.ScreenUpdating = False
Set wb1 = Workbooks("rp074c_20140708_0414.xls") Set wb2 = Workbooks("Поставщики.xls") Set sh2 = wb2.ActiveSheet
Application.ScreenUpdating = False With wb1 .Activate .ActiveSheet.UsedRange .Value = .ActiveSheet.UsedRange.Value
.ActiveSheet.Range("$A$7:$EL$19984").AutoFilter Field:=2, Criteria1:= _ "=001 - Hayat Kimya Sanayi A.S. (Turkey)", Operator:=xlOr, Criteria2:= _ "=001b - Hayat Kimya Sanayi A.S. (Bulgaria)" .ActiveSheet.Columns("CO:CT").Copy sh2.Range("A1")
.ActiveSheet.Range("$A$7:$EL$19984").AutoFilter Field:=2, Criteria1:= _ "=002 - Evyap International A.S. (Turkey)", Operator:=xlOr .ActiveSheet.Columns("CO:CT").Copy wb2.Worksheets("Лист2").Range("A1") End With End Sub
PS А почему вы не указали, что тема на нескольких форумах?
Не думал что это принципиально, и не на нескольких а только на одном (не считая вашего). На том форуме запостил данную тему, только потому что ваш ресурс лежал и доступа к нему не было.
PS А почему вы не указали, что тема на нескольких форумах?
Не думал что это принципиально, и не на нескольких а только на одном (не считая вашего). На том форуме запостил данную тему, только потому что ваш ресурс лежал и доступа к нему не было.Xaden
На засыпку Application.FileDialog Application.GetOpenFilename
Извиняюсь, вроде как понятно, но что то я не очень соображаю, как данную функцию реализовать в своем макросе. Наверно не выспался все этот футбол Xaden
Dim wb1 As Workbook, wb2 As Workbook Dim SStr As String Dim Ci As Long, Cj As Long
Set wb1 = ActiveWorkbook Workbooks.Open Filename:=Application.GetOpenFilename Set wb2 = ActiveWorkbook
SStr = wb1.Sheets(1).Cells(3, 7) Ci = 1 Cj = 1 wb1.Sheets(2).Cells.Clear Do While wb2.Sheets(1).Cells(Ci, 1) <> "" If InStr(1, wb2.Sheets(1).Cells(Ci, 1), SStr, 1) Then wb2.Sheets(1).Rows(Ci).Copy wb1.Sheets(2).Activate Rows(Cj).Select ActiveSheet.Paste Cj = Cj + 1 End If Ci = Ci + 1 Loop
Application.CutCopyMode = False wb2.Close SaveChanges:=False Application.ScreenUpdating = True End Sub
[/vba]
вот вам ещё вариант
[vba]
Код
Sub Макрос1() Application.ScreenUpdating = False
Dim wb1 As Workbook, wb2 As Workbook Dim SStr As String Dim Ci As Long, Cj As Long
Set wb1 = ActiveWorkbook Workbooks.Open Filename:=Application.GetOpenFilename Set wb2 = ActiveWorkbook
SStr = wb1.Sheets(1).Cells(3, 7) Ci = 1 Cj = 1 wb1.Sheets(2).Cells.Clear Do While wb2.Sheets(1).Cells(Ci, 1) <> "" If InStr(1, wb2.Sheets(1).Cells(Ci, 1), SStr, 1) Then wb2.Sheets(1).Rows(Ci).Copy wb1.Sheets(2).Activate Rows(Cj).Select ActiveSheet.Paste Cj = Cj + 1 End If Ci = Ci + 1 Loop
Application.CutCopyMode = False wb2.Close SaveChanges:=False Application.ScreenUpdating = True End Sub
Dim wb1 As Workbook, wb2 As Workbook Dim SStr As String Dim Ci As Long, Cj As Long
Set wb1 = ActiveWorkbook Workbooks.Open Filename:=Application.GetOpenFilename Set wb2 = ActiveWorkbook
SStr = wb1.Sheets(1).Cells(3, 7) Ci = 1 Cj = 1 wb1.Sheets(2).Cells.Clear Do While wb2.Sheets(1).Cells(Ci, 1) <> "" If InStr(1, wb2.Sheets(1).Cells(Ci, 1), SStr, 1) Then wb2.Sheets(1).Rows(Ci).Copy wb1.Sheets(2).Activate Rows(Cj).Select ActiveSheet.Paste Cj = Cj + 1 End If Ci = Ci + 1 Loop
Application.CutCopyMode = False wb2.Close SaveChanges:=False Application.ScreenUpdating = True End Sub
Сложноват для меня такой вариант, я еще плохо ориентируюсь в VBA Но спасибо за потраченное время и усилие ЗЫ попробовал Ваш макрос, копирование в вашем коде идет только на второй лист, а мне по сути надо допустим "Поставщик1" включая шапку перенести на лист1, Поставщик2 на лист2 и тд
Dim wb1 As Workbook, wb2 As Workbook Dim SStr As String Dim Ci As Long, Cj As Long
Set wb1 = ActiveWorkbook Workbooks.Open Filename:=Application.GetOpenFilename Set wb2 = ActiveWorkbook
SStr = wb1.Sheets(1).Cells(3, 7) Ci = 1 Cj = 1 wb1.Sheets(2).Cells.Clear Do While wb2.Sheets(1).Cells(Ci, 1) <> "" If InStr(1, wb2.Sheets(1).Cells(Ci, 1), SStr, 1) Then wb2.Sheets(1).Rows(Ci).Copy wb1.Sheets(2).Activate Rows(Cj).Select ActiveSheet.Paste Cj = Cj + 1 End If Ci = Ci + 1 Loop
Application.CutCopyMode = False wb2.Close SaveChanges:=False Application.ScreenUpdating = True End Sub
Сложноват для меня такой вариант, я еще плохо ориентируюсь в VBA Но спасибо за потраченное время и усилие ЗЫ попробовал Ваш макрос, копирование в вашем коде идет только на второй лист, а мне по сути надо допустим "Поставщик1" включая шапку перенести на лист1, Поставщик2 на лист2 и тдXaden
А не подскажите уважаемые, как копировать скрытые столбцы? допустим у меня с A:N есть скрытые ячейки, что можно сделать что бы при копирование они тоде переносились, потому что сейчас у меня выходят пустые столбцы вместо данных которые я хочу перенести.
А не подскажите уважаемые, как копировать скрытые столбцы? допустим у меня с A:N есть скрытые ячейки, что можно сделать что бы при копирование они тоде переносились, потому что сейчас у меня выходят пустые столбцы вместо данных которые я хочу перенести.Xaden
А не подскажите уважаемые, как копировать скрытые столбцы? допустим у меня с A:N есть скрытые ячейки, что можно сделать что бы при копирование они тоде переносились, потому что сейчас у меня выходят пустые столбцы вместо данных которые я хочу перенести.
прошу прощения, что поспешил задавать столь глупый вопрос. Нашел ответ на свой вопрос
А не подскажите уважаемые, как копировать скрытые столбцы? допустим у меня с A:N есть скрытые ячейки, что можно сделать что бы при копирование они тоде переносились, потому что сейчас у меня выходят пустые столбцы вместо данных которые я хочу перенести.
прошу прощения, что поспешил задавать столь глупый вопрос. Нашел ответ на свой вопросXaden
Sub q() Dim wb1 As Workbook, wb2 As Workbook, sh1 As Worksheet, sh2 As Worksheet 'Dim ra As Range Application.ScreenUpdating = False
' Set wb1 = Workbooks("rp074c_20140708_0414.xls") Set wb1 = ActiveWorkbook Workbooks.Open Filename:=Application.GetOpenFilename Set wb2 = Workbooks("Поставщики.xls") Set sh2 = wb2.ActiveSheet
Application.ScreenUpdating = False With wb1 .Activate .ActiveSheet.UsedRange .Value = .ActiveSheet.UsedRange.Value
.ActiveSheet.Range("$A$7:$EL$19984").AutoFilter Field:=2, Criteria1:= _ "=001 - Hayat Kimya Sanayi A.S. (Turkey)", Operator:=xlOr, Criteria2:= _ "=001b - Hayat Kimya Sanayi A.S. (Bulgaria)" .ActiveSheet.Columns("CO:CT").Copy sh2.Range("A1")
.ActiveSheet.Range("$A$7:$EL$19984").AutoFilter Field:=2, Criteria1:= _ "=002 - Evyap International A.S. (Turkey)", Operator:=xlOr .ActiveSheet.Columns("CO:CT").Copy wb2.Worksheets("Лист2").Range("A1") End With End Sub
[/vba]
Пытаюсь в макрос впилить открытие файла с которого надо переносить данные, открывается все хорошо, но работа макроса застревает вот на этом куске кода
[vba]
Код
.ActiveSheet.Range("$A$7:$EL$19984").AutoFilter Field:=2, Criteria1:= _ "=001 - Hayat Kimya Sanayi A.S. (Turkey)", Operator:=xlOr, Criteria2:= _ "=001b - Hayat Kimya Sanayi A.S. (Bulgaria)" .ActiveSheet.Columns("CO:CT").Copy sh2.Range("A1")
[/vba]
Не подскажите, чем это вызвано? ЗЫ Если указываю именно путь к файлу, то весь макрос работает без проблем.
[vba]
Код
Sub q() Dim wb1 As Workbook, wb2 As Workbook, sh1 As Worksheet, sh2 As Worksheet 'Dim ra As Range Application.ScreenUpdating = False
' Set wb1 = Workbooks("rp074c_20140708_0414.xls") Set wb1 = ActiveWorkbook Workbooks.Open Filename:=Application.GetOpenFilename Set wb2 = Workbooks("Поставщики.xls") Set sh2 = wb2.ActiveSheet
Application.ScreenUpdating = False With wb1 .Activate .ActiveSheet.UsedRange .Value = .ActiveSheet.UsedRange.Value
.ActiveSheet.Range("$A$7:$EL$19984").AutoFilter Field:=2, Criteria1:= _ "=001 - Hayat Kimya Sanayi A.S. (Turkey)", Operator:=xlOr, Criteria2:= _ "=001b - Hayat Kimya Sanayi A.S. (Bulgaria)" .ActiveSheet.Columns("CO:CT").Copy sh2.Range("A1")
.ActiveSheet.Range("$A$7:$EL$19984").AutoFilter Field:=2, Criteria1:= _ "=002 - Evyap International A.S. (Turkey)", Operator:=xlOr .ActiveSheet.Columns("CO:CT").Copy wb2.Worksheets("Лист2").Range("A1") End With End Sub
[/vba]
Пытаюсь в макрос впилить открытие файла с которого надо переносить данные, открывается все хорошо, но работа макроса застревает вот на этом куске кода
[vba]
Код
.ActiveSheet.Range("$A$7:$EL$19984").AutoFilter Field:=2, Criteria1:= _ "=001 - Hayat Kimya Sanayi A.S. (Turkey)", Operator:=xlOr, Criteria2:= _ "=001b - Hayat Kimya Sanayi A.S. (Bulgaria)" .ActiveSheet.Columns("CO:CT").Copy sh2.Range("A1")
[/vba]
Не подскажите, чем это вызвано? ЗЫ Если указываю именно путь к файлу, то весь макрос работает без проблем.Xaden
Подскажу. Вы что то делаете не так. Если распишите, что вы вообще делаете (пошагово, лучше в виде комментария к макросу), то шансы должны сильно возрасти.
Подскажу. Вы что то делаете не так. Если распишите, что вы вообще делаете (пошагово, лучше в виде комментария к макросу), то шансы должны сильно возрасти.RAN
вместо тысячи слов, прикрепил файлы И так же хотелось спросить, можно ли как то увеличить скорость моего макроса, исходник очень большой и данных приходится переносить много в итоге макрос работает больше минуты. может AutoFilter можно на что то заменить, что будет работать по быстрее.
вместо тысячи слов, прикрепил файлы И так же хотелось спросить, можно ли как то увеличить скорость моего макроса, исходник очень большой и данных приходится переносить много в итоге макрос работает больше минуты. может AutoFilter можно на что то заменить, что будет работать по быстрее.Xaden
И где описание процесса? А то непонятно - с какой стати собрались фильтровать пустой лист? Да и в коде один лишний пробел сидит в .ActiveSheet.UsedRange .Value = .ActiveSheet.UsedRange.Value непонятным образом...
Добрый день, лишний пробел видать забыл убрать. Процес в целом такой, с файла "Исходник" мне нужно скопировать все столбцы в фаил "Поставщики"
И почему же пустой фаил собираюсь фильтровать? если я указываю что wb1 это фаил источник. Если обратите внимание на закомментированный код, где я указываю точное название источника, макрос работает и копирует все очень даже хорошо. А вот как только пытаюсь через [vba]
Код
Set wb1 = ActiveWorkbook Workbooks.Open Filename:=Application.GetOpenFilename
И где описание процесса? А то непонятно - с какой стати собрались фильтровать пустой лист? Да и в коде один лишний пробел сидит в .ActiveSheet.UsedRange .Value = .ActiveSheet.UsedRange.Value непонятным образом...
Добрый день, лишний пробел видать забыл убрать. Процес в целом такой, с файла "Исходник" мне нужно скопировать все столбцы в фаил "Поставщики"
И почему же пустой фаил собираюсь фильтровать? если я указываю что wb1 это фаил источник. Если обратите внимание на закомментированный код, где я указываю точное название источника, макрос работает и копирует все очень даже хорошо. А вот как только пытаюсь через [vba]
Код
Set wb1 = ActiveWorkbook Workbooks.Open Filename:=Application.GetOpenFilename