Добрый день! Помогите написать макрос. Необходимо перенести данные с листа Свод на лист1 по параметрам: должность, код ГОСБ/ОСБ, драйвера в столбец соответствующий месяцу в ячейке B2 листа Свод
Добрый день! Помогите написать макрос. Необходимо перенести данные с листа Свод на лист1 по параметрам: должность, код ГОСБ/ОСБ, драйвера в столбец соответствующий месяцу в ячейке B2 листа СводJuri01
Добрый вечер! Приложите свой файл. Реальные данные можете заменить фиктивными, оставив буквально несколько строк на листе Свод (чтоб протестировать).
Добрый вечер! Приложите свой файл. Реальные данные можете заменить фиктивными, оставив буквально несколько строк на листе Свод (чтоб протестировать).KSV
спасибо! пытался модифицировать макрос под реалии. но моих навыков явно не хватило. нужен макрос переноса данных из книги свод в книгк инструмент по параметрам : N подразделения, роль, драйвер в столбец соответствующего месяца - A2 в файле свод. объяснил сумбурно, но кажется посмотрев файлы должно быть понятно.
спасибо! пытался модифицировать макрос под реалии. но моих навыков явно не хватило. нужен макрос переноса данных из книги свод в книгк инструмент по параметрам : N подразделения, роль, драйвер в столбец соответствующего месяца - A2 в файле свод. объяснил сумбурно, но кажется посмотрев файлы должно быть понятно.Juri01
Задача - простейшая! И как ее решить, я вам показал на вашем примере. Только мне не понятно, зачем выкладывать ТАКОЙ пример, который отличается от вашего реального файла, тем более, если перенести на свой рабочий файл самостоятельно вы не можете?
Задача - простейшая! И как ее решить, я вам показал на вашем примере. Только мне не понятно, зачем выкладывать ТАКОЙ пример, который отличается от вашего реального файла, тем более, если перенести на свой рабочий файл самостоятельно вы не можете?KSV
переоценил свои силы. Спасибо! В решении представленном Вами, и за что огромное спасибо, переносится данные только столбца - штатная численность, столбцы Вакансии и Кол-во уволенных по собстенному желанию не копируются в соответствующие ячейки. Спасибо!
переоценил свои силы. Спасибо! В решении представленном Вами, и за что огромное спасибо, переносится данные только столбца - штатная численность, столбцы Вакансии и Кол-во уволенных по собстенному желанию не копируются в соответствующие ячейки. Спасибо!Juri01
Сообщение отредактировал Juri01 - Пятница, 31.07.2015, 22:29
Вот так вероятно (чуть позаимствовал кода - лень самому писать...): [vba]
Код
Option Explicit
Sub tt() Dim m$, a(), b(), c(), i&, t$
With CreateObject("scripting.dictionary"): .comparemode = 1 With Workbooks("свод.xlsb").Sheets(1) m = .Cells(2, 1).Value a = .Range(.[F4], .Range("A" & .Rows.Count).End(xlUp)).Value End With For i = 1 To UBound(a) .Item(a(i, 1) & "|" & a(i, 2) & "|Ш") = a(i, 3) .Item(a(i, 1) & "|" & a(i, 2) & "|В") = a(i, 4) .Item(a(i, 1) & "|" & a(i, 2) & "|К") = a(i, 6) Next With Workbooks("инструмент.xlsx").Sheets(1) i = .Range("C" & .Rows.Count).End(xlUp).Row a = .Range(.[C7], .Range("C" & i)).Value b = .Range(.[G7], .Range("G" & i)).Value c = .Range(.[J7], .Range("J" & i)).Value End With ReDim d(1 To UBound(a), 1 To 1)
For i = 1 To UBound(a) t = c(i, 1) & "|" & a(i, 1) & "|" & Left(b(i, 1), 1) If .exists(t) Then d(i, 1) = .Item(t) Next End With
Workbooks("инструмент.xlsx").Sheets(1).Range("N5:Y5").Find(m).Offset(2).Resize(UBound(d)).Value = d
End Sub
[/vba]
Кстати, можно не создавать массив d() пустым, а брать его с листа сразу из нужного столбца, тогда его можно дополнять свежими данными, если вдруг они будут поступать частями. Ну и поанализировать можно - нет ли изменений в ранее занесённых данных. Но т.к. такого запроса нет - то так и не делал.
Вот так вероятно (чуть позаимствовал кода - лень самому писать...): [vba]
Код
Option Explicit
Sub tt() Dim m$, a(), b(), c(), i&, t$
With CreateObject("scripting.dictionary"): .comparemode = 1 With Workbooks("свод.xlsb").Sheets(1) m = .Cells(2, 1).Value a = .Range(.[F4], .Range("A" & .Rows.Count).End(xlUp)).Value End With For i = 1 To UBound(a) .Item(a(i, 1) & "|" & a(i, 2) & "|Ш") = a(i, 3) .Item(a(i, 1) & "|" & a(i, 2) & "|В") = a(i, 4) .Item(a(i, 1) & "|" & a(i, 2) & "|К") = a(i, 6) Next With Workbooks("инструмент.xlsx").Sheets(1) i = .Range("C" & .Rows.Count).End(xlUp).Row a = .Range(.[C7], .Range("C" & i)).Value b = .Range(.[G7], .Range("G" & i)).Value c = .Range(.[J7], .Range("J" & i)).Value End With ReDim d(1 To UBound(a), 1 To 1)
For i = 1 To UBound(a) t = c(i, 1) & "|" & a(i, 1) & "|" & Left(b(i, 1), 1) If .exists(t) Then d(i, 1) = .Item(t) Next End With
Workbooks("инструмент.xlsx").Sheets(1).Range("N5:Y5").Find(m).Offset(2).Resize(UBound(d)).Value = d
End Sub
[/vba]
Кстати, можно не создавать массив d() пустым, а брать его с листа сразу из нужного столбца, тогда его можно дополнять свежими данными, если вдруг они будут поступать частями. Ну и поанализировать можно - нет ли изменений в ранее занесённых данных. Но т.к. такого запроса нет - то так и не делал.Hugo
Juri01, Все проверил. Работает! Еще раз спасибо! Единственный вопрос! Если в файле свод и инструмент в инструмент добавятся строки с новыми данными, они будут так же копироваться в инструмент? Я попробовал, но они не копируются. Спасибо!
Juri01, Все проверил. Работает! Еще раз спасибо! Единственный вопрос! Если в файле свод и инструмент в инструмент добавятся строки с новыми данными, они будут так же копироваться в инструмент? Я попробовал, но они не копируются. Спасибо!Juri01