Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
Перемещение данных с нескольких листов в другую книгу
 
AndreTM, да соглашусь, просто я в макросах пока чайник вот и задаю иногда глупые вопросы, разобрался как прописать, чтобы сбор данных с другой книги было, если вдруг у кого то подобный вопрос будет, то вот какой код я использовал:
Код
Sub Обновить_сводную()
 
Dim Sht As Worksheet, Shs As Worksheet
Dim Wb As Workbook
Dim Wbbu As Workbook
Dim i As Long
Dim iLastRow_B As Long
Dim iLastRow_Ai As Long
Set Wb = ActiveWorkbook
Set Wbbu = GetObject("C:\Users\Андрей\Downloads\Макрос сбора.xlsm")
  
With Application
    .ScreenUpdating = False
    .DisplayAlerts = False
    .Calculation = xlCalculationManual
      
    Set Wb = ThisWorkbook
    Set Shs = Wb.Sheets("Сводная")
    Shs.Cells.Clear 'очищаем лист "Сводная"
    Shs.Range("A1:Z1") = Array("Оценка", "ФИО сотрудника", "Старший", "Группа", "Дата оценки", _
        "Номер звонка", "Пометка на звонок", "Проф. Навыки", "Навыки ведения диалога", "Общая оценка за звонок", _
        "Тематика (1 уровень)", "Тематика (2 уровень)", "Тематика (3 уровень)", "Основная зона роста (1-ый уровень)", _
        "Основная зона роста (2-ый уровень)", "Доп. зона роста (1-ый уровень)", "Доп. зона роста (2-ый уровень)", _
        "Вес нарушения Основной зоны", "Вес нарушения доп. Зоны", "ст", "Неделя", "Месяц", "Год", _
        "Ошибка", "Отдел", "Кодировка")
     
    For Each nm In Array("Привет", "Пока")
        Set Sht = Wbbu.Sheets(nm)
        iLastRow_B = Shs.Cells(Rows.Count, 2).End(xlUp).Row
        iLastRow_Ai = Sht.Cells(Rows.Count, 1).End(xlUp).Row
        Sht.Range("A2:Z" & iLastRow_Ai).Copy Shs.Cells(iLastRow_B + 1, 1)
    Next
          
    .ScreenUpdating = True
    .DisplayAlerts = True
    .Calculation = xlCalculationAutomatic
 
End With
 Wbbu.Close
End Sub

Вам огромное спасибо.
Как собрать данные с нескольких листов в один
 
AndreTM, всё, разобрался, и с ошибкой, а точнее это не ошибка, а я косяк, сделал сбор данных с несуществующего листа, а что касается второго вопроса, да, соглашусь, на практике опробовал вставить безумное количество строк на каждую из страниц, код всё равно быстро собирает, так что второй вопрос в принципе тоже отпал. Огромнейшее вам спасибо!
Перемещение данных с нескольких листов в другую книгу
 
В том то и дело, что не получается, да, код действительно почти тот же самый, я его пытаюсь доделать, он данные с нескольких листов собирает, но может сделать это, только внутри одной книги, он собирает с Лист1, Лист2 и Лист3, на лист Сводная в этой же книге, а мне нужно сделать это таким образом, что у меня была открыта Книга1, на ней есть лист Сводная и в ней выполнялся макрос, который бы собрал данные с Лист1, Лист2 и Лист3, но не из этой же книги, а из Книга2. Это реализовать у меня хоть убей не получается.
Перемещение данных с нескольких листов в другую книгу
 
Юрий М, Тему дубликат? Ранее же другой вопрос был, до этого я уточнял про сбор данных с определенных листов, при этом в той же книге и про возможность сбора только уникальных значений. Сейчас я уточню про то, как перенести данные с нескольких листов в другую книгу, но, да, пытаюсь допилить тот же макрос, я был уверен, что это несколько другая тема. Или я что то не так понял?
Разделить столбец на текст, процент и числа
 
Третья строчка пример, протянешь и всё вроде должно работать
Перемещение данных с нескольких листов в другую книгу
 
Всем привет, помогите допилить макрос, не могу разобраться
Код
Sub Обновить_сводную()
Dim Sht As Worksheet
Dim Wb As Workbook
Dim i As Long
Dim iLastRow_B As Long
Dim iLastRow_Ai As Long

With Application
    .ScreenUpdating = False
    .DisplayAlerts = False
    .Calculation = xlCalculationManual
    
Set Wb = ThisWorkbook
Sheets("Сводная").Cells.Clear 'очищаем лист "Сводная"
Sheets("Сводная").Range("A1") = "Оценка"
Sheets("Сводная").Range("B1") = "ФИО сотрудника"
Sheets("Сводная").Range("C1") = "Старший"
Sheets("Сводная").Range("D1") = "Группа"
Sheets("Сводная").Range("E1") = "Дата оценки"
Sheets("Сводная").Range("F1") = "Номер звонка"
Sheets("Сводная").Range("G1") = "Пометка на звонок"
Sheets("Сводная").Range("H1") = "Проф. Навыки"
Sheets("Сводная").Range("I1") = "Навыки ведения диалога"
Sheets("Сводная").Range("J1") = "Общая оценка за звонок"
Sheets("Сводная").Range("K1") = "Тематика (1 уровень)"
Sheets("Сводная").Range("L1") = "Тематика (2 уровень)"
Sheets("Сводная").Range("M1") = "Тематика (3 уровень)"
Sheets("Сводная").Range("N1") = "Основная зона роста (1-ый уровень)"
Sheets("Сводная").Range("O1") = "Основная зона роста (2-ый уровень)"
Sheets("Сводная").Range("P1") = "Доп. зона роста (1-ый уровень)"
Sheets("Сводная").Range("Q1") = "Доп. зона роста (2-ый уровень)"
Sheets("Сводная").Range("R1") = "Вес нарушения Основной зоны"
Sheets("Сводная").Range("S1") = "Вес нарушения доп. Зоны"
Sheets("Сводная").Range("T1") = "ст"
Sheets("Сводная").Range("U1") = "Неделя"
Sheets("Сводная").Range("V1") = "Месяц"
Sheets("Сводная").Range("W1") = "Год"
Sheets("Сводная").Range("X1") = "Ошибка"
Sheets("Сводная").Range("Y1") = "Отдел"
Sheets("Сводная").Range("Z1") = "Кодировка"
i = 1
Set Sht = Wb.Sheets(i)
For Each Sht In Worksheets
    If Sht.Name <> "Сводная" And Sht.Name <> "Сводник" Then
      iLastRow_B = Cells(Rows.Count, 2).End(xlUp).Row
      iLastRow_Ai = Wb.Sheets(i).Cells(Rows.Count, 1).End(xlUp).Row
      Wb.Sheets(i).Range("A2:Z" & iLastRow_Ai).Copy Cells(iLastRow_B + 1, 1)
    End If
    i = i + 1
    Next
        
    .ScreenUpdating = True
    .DisplayAlerts = True
    .Calculation = xlCalculationAutomatic
End With
End Sub
Макрос собирает данные с нескольких листов в книге и вставляет их на другой лист, в частности в макросе: собирает данные со всех листов в книге кроме листов Сводная и Сводник. Но как сделать так, чтобы я мог запустить этот макрос из книги, скажем под названием: Книга1, а он собрал данные с нескольких листов из Книги2, открыл её, собрал данные, закрыл, и все эти данные вставил на страницу: Сводная в Книге1. Т.е. проще говоря, исходные листы находятся в одной книге (Книга2), а сводник, куда собираются все данные находится в другой книге (Книга1).

На просторах интернета нашел такой макрос:
Код
Sub Копируем_листы_в_другую_книгу()
Dim bookconst As Workbook
Dim abook As Workbook
Set abook = ActiveWorkbook 'присваиваем перменную активной книге
Set bookconst = Workbooks.Open("C:\Users\User\Desktop\1.xlsx") 'присваиваем перменную книге куда необходимо копировать данные
 
'переходим в активную книгу откуда необходимо скопировать данные
abook.Worksheets("Лист1").Activate
Range("A1:I23").Copy 'копируем определенный диапазон листа, укажите свой диапазон
bookconst.Worksheets("Лист1").Activate 'активируем лист куда необходимо вставить данные
Range("A1:I23").Select 'встаем на ячейку А1
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
'вставляем только форматы ячеек
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
'второй лист
abook.Worksheets("Лист2").Activate
Range("A1:I23").Copy
bookconst.Worksheets("Лист2").Activate
Range("A1:I23").Select 'выделяем диапазон
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
'вставляем только форматы ячеек
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
'третий лист
abook.Worksheets("Лист3").Activate
Range("A1:I23").Copy
bookconst.Worksheets("Лист3").Activate
Range("A1:I23").Select 'выделяем диапазон
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
'вставляем только форматы ячеек
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
'сохранить текущую книгу
bookconst.Save
'Закрыть книгу
bookconst.Close
abook.Activate
End Sub
Он копирует диапазоны данных из активной открытой книги Excel нескольких листов (в нашем примере 3-х листов) в другую книгу, которая хранится в определенном месте. Данные будут вставлены как значения, плюс будут перенесены форматы ячеек.
Не знаю как их так соединить.

Может кто знает как реализовать?
Как собрать данные с нескольких листов в один
 
AndreTM, что касается по коду, он выдает ошибку какую-то при запуске и собирает данные только с первого листа: с Лист1. В принципе, с вашей помощью я немного доработал код, поэтому по вопросу:
Цитата
1) Собирать данные не со всех листов в книге, а только с определенных, например: в книге 5 листов, с названиями Лист1, Лист2, Лист3, Лист4, но нужно собрать данные только с Лист1 и Лист2.
в принцепе вопрос закрыт, но вот что касается второго момента, ваш ответ мне всё таки непонятен,

смотрите, у меня есть допустим 3 листа, на которые ежедневно добавляются несколько строк. Если запускать макрос который я изначально прописывал, то он при каждом запуске этого макроса будет стирать все данные со сводного листа и заново собирать с Лист1, Лист2 и Лист3 информацию. В принципе, это не было бы проблемой, если бы строчек на Лист1, Лист2 и Лист3 было бы ну скажем не больше 100 на каждом листе, но если таких строчек будет по 50-100 тыс. то работа макроса может затянуться, с учетом того, что уже добавленные строки на Лист1, Лист2 и Лист3 не меняются, было бы куда практичнее, если бы при запуске макроса собирались только новые добавленные на Лист1, Лист2 и Лист3 данные.
Как собрать данные с нескольких листов в один
 
Всем привет. Может кто поможет, не могу разобраться, есть макрос:
Код
Sub Обновить_сводную()
Dim Sht As Worksheet
Dim Wb As Workbook
Dim i As Long
Dim iLastRow_B As Long
Dim iLastRow_Ai As Long

With Application
    .ScreenUpdating = False
    .DisplayAlerts = False
    .Calculation = xlCalculationManual
    
Set Wb = ThisWorkbook
Sheets("Сводная").Cells.Clear 'очищаем лист "Сводная"
Sheets("Сводная").Range("A1") = "Оценка"
Sheets("Сводная").Range("B1") = "ФИО сотрудника"
Sheets("Сводная").Range("C1") = "Старший"
Sheets("Сводная").Range("D1") = "Группа"
Sheets("Сводная").Range("E1") = "Дата оценки"
Sheets("Сводная").Range("F1") = "Номер звонка"
Sheets("Сводная").Range("G1") = "Пометка на звонок"
Sheets("Сводная").Range("H1") = "Проф. Навыки"
Sheets("Сводная").Range("I1") = "Навыки ведения диалога"
Sheets("Сводная").Range("J1") = "Общая оценка за звонок"
Sheets("Сводная").Range("K1") = "Тематика (1 уровень)"
Sheets("Сводная").Range("L1") = "Тематика (2 уровень)"
Sheets("Сводная").Range("M1") = "Тематика (3 уровень)"
Sheets("Сводная").Range("N1") = "Основная зона роста (1-ый уровень)"
Sheets("Сводная").Range("O1") = "Основная зона роста (2-ый уровень)"
Sheets("Сводная").Range("P1") = "Доп. зона роста (1-ый уровень)"
Sheets("Сводная").Range("Q1") = "Доп. зона роста (2-ый уровень)"
Sheets("Сводная").Range("R1") = "Вес нарушения Основной зоны"
Sheets("Сводная").Range("S1") = "Вес нарушения доп. Зоны"
Sheets("Сводная").Range("T1") = "ст"
Sheets("Сводная").Range("U1") = "Неделя"
Sheets("Сводная").Range("V1") = "Месяц"
Sheets("Сводная").Range("W1") = "Год"
Sheets("Сводная").Range("X1") = "Ошибка"
Sheets("Сводная").Range("Y1") = "Отдел"
Sheets("Сводная").Range("Z1") = "Кодировка"
i = 1
Set Sht = Wb.Sheets(i)
For Each Sht In Worksheets
    If Sht.Name <> "Сводная" Then
      iLastRow_B = Cells(Rows.Count, 2).End(xlUp).Row
      iLastRow_Ai = Wb.Sheets(i).Cells(Rows.Count, 1).End(xlUp).Row
      Wb.Sheets(i).Range("A2:Z" & iLastRow_Ai).Copy Cells(iLastRow_B + 1, 1)
    End If
    i = i + 1
    Next
        
    .ScreenUpdating = True
    .DisplayAlerts = True
    .Calculation = xlCalculationAutomatic
End With
End Sub 

Макрос собирает с нескольких листов данные в один лист. Справляется отлично, но как сделать две доработки:

1) Собирать данные не со всех листов в книге, а только с определенных, например: в книге 5 листов, с названиями Лист1, Лист2, Лист3, Лист4, но нужно собрать данные только с Лист1 и Лист2.

2) Чтобы в Сводной, т.е. на листе куда консолидируется информация, информация, собрана в предыдущие разы, не очищалась, а добавлялась новая, которая была добавлена на листы, с которых собираются данные, например, через проверку уникальности значений по строке.

Может кто знает как реализовать.

Как поменять данные в нескольких книгах не открывая их?, Как не открывая файлы поменять данные в нескольких книгах
 
Nordheim, отлично, всё работает, вы гений, огромное спасибо
Как поменять данные в нескольких книгах не открывая их?, Как не открывая файлы поменять данные в нескольких книгах
 
Привет всем. Прошу помощи.

Кто знает, как с помощью макроса поменять данные одновременно в нескольких книгах (книг больше 100 и открывать каждую слишком долго).

Похожая тема уже обсуждалась на этом же форуме (http://www.planetaexcel.ru/forum/?PAGE_NAME=read&FID=8&TID=7585), но интересует немного другая схема: как заменить не определенную ячейку, а целый лист, скажем я создаю шаблон в каком нибудь файле, со значениями и формулами, а потом с помощью макроса переношу этот лист в другие книги, заменяя этим шаблоном 1 лист в других книгах без изменения названия самого листа.

Есть макрос, который вставляет значения в ячейку в разных книгах:
Код
Sub Макрос1()

Dim FilesToOpen
Dim x As Integer
    Application.ScreenUpdating = False
FilesToOpen = Application.GetOpenFilename _
(FileFilter:="Microsoft Excel Files (*.xl*), *.xl*", _
MultiSelect:=True, Title:="Выберите файлы")
If TypeName(FilesToOpen) = "Boolean" Then
    MsgBox "Не выбрано ни одного файла!"
    GoTo ExitHandler
End If
x = 1
    Application.Visible = False
While x <= UBound(FilesToOpen)
    Workbooks.Open Filename:=FilesToOpen(x)

    Sheets(1).Range("A1").Value = "New Title"  'на листе 1 в ячейку А1 написать "New Title"

    ActiveWorkbook.Close savechanges:=True
    x = x + 1
Wend

ExitHandler:
    Application.ScreenUpdating = True
    Application.Visible = True
    Exit Sub
ErrHandler:
    MsgBox Err.Description
    Resume ExitHandler
End Sub

Интересует как допилить этот код, чтобы он не "на листе 1 в ячейку A1 написать new title", а заменял целый лист 1.

Заранее огромное спасибо.

Изменено: bylanovandrej - 02.07.2017 09:50:04
Пустые ячейки вместо нуля
 
JayBhagavan, супер, воспользовался твоей формулой, всё работает огромное спасибо. Karataev, тебе также спасибо за отклик )
Пустые ячейки вместо нуля
 
Всем привет. Такая проблема, как настроить ссылки в excel таким образом, чтобы если в исходнике значение отсутствует, то отображалось также пустота, а не 0, как это делается обычно, если в исходнике какое то значение, то отображалось это значение, а если в исходнике есть значение, но оно нулевое, то отображался именно 0, а не пусто.

Если заходить в Файл - Параметры - Дополнительно и там ставить галочку, Показывать нули в ячейках с нулевыми значениями, то это не то.

Т.е. есть два листа и на одном из них в ячейке A1 какое-то значение или оно отсутствует и это значение нужно перенести на другой лист через =. Но если в ячейке A1 значение = 0, то на второй лист нужно перенести именно 0, если в ячейке A1 нет ни какого значения, то и на втором листе ничего не должно отображаться.
Изменено: bylanovandrej - 27.10.2016 20:45:00
Доля влияния в excel
 
Всем кто пытался помочь, огромное спасибо )
Доля влияния в excel
 
_Igor_61, а можно немного разъяснений, я честно не сильно excel, поэтому туплю сейчас, мне теперь не совсем ясно, мне что то ещё фильтровать нужно, или как, или сотрудники которые в желтом столбце расставлены по убыванию доли влияния на результат?
Доля влияния в excel
 
_Igor_61, да, в том то и проблема, что данную формулу я планировал применить к списку из почти 200 человек, процентов 30 из которых не достигают поставленной цели, и такой подсчет необходимо вести каждый день, в том вся и беда, что подсчет в ручную отнимает очень много времени, и с помощью формул я планировал это время сократить, а что касается среднего арифметического, то примерно оно и нужно, в самом верху столбца H, в файле в котором я прикрепил, там и есть процент, но не среднее арифметическое по столбцу H, а более точный показатель, но смысл тот же.
Доля влияния в excel
 
JayBhagavan, нет, это не совсем то, по вашей формуле он просто выделяет сотрудников, результат которых ниже цели в 80%, а мне нужна цель в 80% не по каждому сотруднику индивидуально, а по группе. т.е. скажем есть 5 сотрудников

Результаты:
сотрудник 1: 95%
сотрудник 2: 74%
сотрудник 3: 86%
сотрудник 4: 53%
сотрудник 5: 76%

средний результат по группе на пример: 77,8%
Но без результатов сотрудника 4: результат по группе скажем составит 81,2%

Если следовать вашему примеру, то файл выделит сотрудников: 2, 4 и 5, т.к. у них у всех результаты ниже 80%, а мне в данном случае, нужен только сотрудник 4, т.к. убрав его мы достигнем цели по группе. Может есть ещё какие то мысли, а то я уже что не представляю как это реализовать, но знаю что это возможно )
Доля влияния в excel
 
Всем привет, помогите пожалуйста решить дилемму, ни как не могу сообразить, как в excel рассчитать долю влияния конкретного поля с данными на конечный результат

Есть список сотрудников (скажем человек 50) и каждый из них за месяц получает определенное количество оценок от 1 до 5. Например:
Иванов: 2 единицы 1 тройка, 20 пятерок, Смирнов: 5 единиц, 3 четверки, 16 пятерок и т.д.
Результат сотрудника оценивается количеством пятерок от общего количества оценок. Но как так выделить список сотрудников, которые больше всего влияют на конечный результат и без которых процент пятерок от общего количества оценок был бы максимальным.

Причем основная проблема в том, что нужно составить группу сотрудников, без которых можно было бы достичь определенного результата: например текущий показатель процента "5" составляет 83,43%, но без результата сотрудников: иванова и смирнова результат составит 87,4%. Файл с примером прилагаю.
Вставить значения в несколько книг одновременно
 
JayBhagavan, отлично спасибо, решил проблему. Если ещё кому то пригодится, то в моем коде, после строки Workbooks.Open Filename:=FilesToOpen(x), добавить аргумент: WriteResPassword:="ваш_пароль". Т.е. в итоге получится:
Код
Workbooks.Open Filename:=FilesToOpen(x), WriteResPassword:="ваш_пароль"
.  
Вставить значения в несколько книг одновременно
 
Sanja, ни увидел разницы между статьей и тем макросом, который я указал в теме сообщения, в статье предлагается тот же макрос, но моя проблема не решилась
Вставить значения в несколько книг одновременно
 
Всем привет. Такой вопрос есть определенное количество книг excel (около 150) в определенной папке. Как вставить определенные данные во все эти книги.

Нашел в инете вот такой макрос:
Код
Sub Макрос1()

Dim FilesToOpen
Dim x As Integer
    Application.ScreenUpdating = False
FilesToOpen = Application.GetOpenFilename _
(FileFilter:="Microsoft Excel Files (*.xls*), *.xls*", _
MultiSelect:=True, Title:="Выберите файлы")
If TypeName(FilesToOpen) = "Boolean" Then
    MsgBox "Не выбрано ни одного файла!"
    GoTo ExitHandler
End If
x = 1
    Application.Visible = False
While x <= UBound(FilesToOpen)
    Workbooks.Open Filename:=FilesToOpen(x)

    Sheets(1).Range("A1").Value = "новая колонка"  'на листе 1 в ячейку А1 написать "новая колонка"

    ActiveWorkbook.Close savechanges:=True
    x = x + 1
Wend

ExitHandler:
    Application.ScreenUpdating = True
    Application.Visible = True
    Exit Sub
ErrHandler:
    MsgBox Err.Description
    Resume ExitHandler
End Sub
но есть проблема, в том, что все эти 150 книг с паролем на редактирование и соответственно, вводить в каждую книгу отдельно пароль также очень долго, а если открывать их только для чтения, то данные потом не сохранить. На всех книгах пароль один и тот же, может кто знает, как добавить в этот макрос строчку кода, чтобы он автоматом: открывает файл - вставляет нужный пароль на редактирование - вставляет данные в нужный лист - сохраняет файл - закрывает файл и переходит к следующему.

Заранее спасибо.
Замена ячейки в зависимости от значения
 
Всем большое спасибо за ответы. Взял последний код. Работает.
Замена ячейки в зависимости от значения
 
Всем привет.
Уже второй день бьюсь не могу разобраться.
В общем, нужно ячейку с данными заменить на текст из другой ячейки, но при условии, если есть совпадение по одному слову.

Например:

Есть столбец фамилий сотрудников, там только фамилии и ничего больше. И рядом есть тоже список тех же сотрудников, но Фамилия Имя Отчество. И мне нужно из второго списка, где ФИО перенести в значения ячеек первого столбца, где есть только фамилии, т.е. в первый столбец нужно к Фамилии сотрудника подставить ещё его и Имя Отчество. Пример прилагаю.

В примере: Имя и Отчество из столбца E нужно перенести в столбец A в соответствии с фамилиями.

Заранее спасибо.
Страницы: 1
Наверх