Автоматическое копирование в excel с листа на лист при занесении данных

Данная статья о том, как связать таблицы, чтобы данные из одной таблицы автоматически переносились во вторую.

Приведу три способа Автоматического переноса данных с одного листа программы «Эксель» в другой.

Первый, самый простой и примитивный способ связи двух таблиц на разных листах документа -вставка данных при помощи опции специальной вставки.

Рассмотрим, как соединить две таблицы по шагам.

Первый шаг.

Необходимо выделить ту таблицу, из которой будут транслироваться данные во вторую таблицу.

Второй шаг.

Копировать информацию сочетанием клавиш ctrl+C или вызвав контекстное меню правой кнопкой мыши и кликнув по пункту меню «Копировать»

Копировать данные из одной таблицы

Третий шаг.

Перейти на лист документа «Excel», в который Вы планируете транслировать информацию из первой таблицы.

Четвертый шаг.

Поставить курсор в первую (левую верхнюю) ячейку таблицы и выбрать в меню «Вставка» пункт «Вставить связь». В некоторых версиях программы «Excel» этот пункт находится в меню «Специальная вставка»Вставить связь

После вставки связи следует отформатировать вид ячеек – привести их к надлежащему виду.

Результат вставки связи

Результат вставки связи

Второй способ переноса данных из одной таблицы в другую — это использование сводных таблиц в программе «Excel».

При использовании данного метода роль второй таблицы («реципиента») играет сама сводная таблица.

Как обновить сводную таблицу

Как обновить сводную таблицу

При клике правой кнопкой мыши по сводной таблице и нажатии на пункт «Обновить» сводная таблица автоматически перенесет все данные из связанного массива информации («таблицы донора»).

О том, как в «Эксель» создавать сводные таблицы подробно написано в статье:

Как делать сводные таблицы в программе «Excel» и для чего они нужны.

Третий способ самый эффективный и наиболее автоматизированный — это использование меню надстройки «Power Query».

Правда нужно отметить, что этот способ подходит только пользователям   Excel 2016 и пользователям Excel 2013и выше с установленной надстройкой «Power Query».

Смысл способа в следующем:

Необходимо открыть вкладку «Power Query». В разделе «Данные Excel» нажимаем кнопку (пиктограмму) «Из таблицы».

Из таблицы -Power Query

Из таблицы -Power Query

Далее нужно выбрать диапазон ячеек, из которых нужно «притянуть» информацию и нажимаем «Ок».

Источник данных для запроса Power Query

Источник данных для запроса Power Query

После выбора области данных появится окно настройки вида новой таблицы. В этом окне Вы можете настроить последовательность вывода столбцов и удалить ненужные столбцы.Настройка таблицы в Повер Квери

После настройки вида таблицы нажмите кнопку «Закрыть и загрузить»

Обновление полученной таблицы происходит кликом правой кнопки мыши по названию нужного запроса в правой части листа (список «Запросы книги»). После клика правой кнопкой мыши в выпадающем контекстном меню следует нажать на пункт «Обновить»

Обновление запроса в PowerQuery

Обновление запроса в PowerQuery

 

werdan

Пользователь

Сообщений: 28
Регистрация: 16.09.2014

Добрый день. Нужна Ваша помощь. Форум полистал, но ничего похожего ненашел, может плохо искал.
Дано:
В книге имееется 4 листа.
1 лист для ввода данных. в нем вводятся месяц, год и данные в столбцы №1:№2; №3.
2 лист это обобщающий лист по введеным данным со столбца №1.
3 лист это обобщающий лист по введеным данным со столбца №2
4 лист это обобщающий лист по введеным данным со столбца №3
Задача:
При вводе новых данных на странице ввода, чтобы на остальных листах создавался столбец с названием месяца и года, который указан на странице ввода и записывались все данные во вновь созданный столбец. далее после очистки формы и изменения месяца опять создавался новый столбец на остальных листах.

Сейчас я это выполняю следующим образом:
1.) Заполняю 1 лист.
2.) на следующем листе вручную пишу месяц и год в новом столбце
3.) копирую столбец и переношу в на нужный лист.

Если не затруднит, уже устал так делать.
Если непонятно описал, напишите посторяюсь уточнить.
Заранее спасибо.

 

МатросНаЗебре

Пользователь

Сообщений: 5516
Регистрация: 05.02.2014

#2

07.11.2022 11:36:56

Код
Sub myCopy()
    Dim sh1 As Worksheet
    Dim sh2 As Worksheet
    Set sh1 = Sheets("Ввод")
    
    Dim colName As String
    Dim arr As Variant
    Dim xx As Long
    With sh1
        For xx = 2 To .UsedRange.Column + .UsedRange.Columns.Count - 1
            On Error Resume Next
            Set sh2 = Sheets(.Cells(1, xx).Value)
            On Error GoTo 0
            If Not sh2 Is Nothing Then
                arr = .Cells(2, xx).Resize(10)
                colName = .Cells(1, 6).Value & " " & .Cells(1, 7).Value
                CopyRange arr, sh2, colName
            
                Set sh2 = Nothing
            End If
        Next
    End With
End Sub

Private Sub CopyRange(arr As Variant, sh As Worksheet, colName As String)
    Dim xx As Long
    With sh
        On Error Resume Next
        xx = WorksheetFunction.Match(colName, .Rows(1), 0)
        On Error GoTo 0
        If xx = 0 Then
            xx = .Cells(1, .Columns.Count).End(xlToLeft).Column + 1
            .Cells(1, xx).Value = colName
        End If
        .Cells(2, xx).Resize(UBound(arr, 1), UBound(arr, 2)) = arr
    End With
End Sub
 

werdan

Пользователь

Сообщений: 28
Регистрация: 16.09.2014

Отлично. Работает. Огромное Спасибо.
Этот вопрос можно решить только через макрос? (я в них чайник)
Я создал кнопку и Ваш код вставил в нее, а можно чтобы после нажатия на эту кнопку данные не только перенеслись а еще и очистилась форма ввода данных для ввода новых данных?

 

МатросНаЗебре

Пользователь

Сообщений: 5516
Регистрация: 05.02.2014

#4

07.11.2022 12:40:43

Цитата
написал:
не только перенеслись а еще и очистилась форма
Код
Sub myCopy()
    Dim sh1 As Worksheet
    Dim sh2 As Worksheet
    Set sh1 = Sheets("Ввод")
     
    Dim colName As String
    Dim arr As Variant
    Dim xx As Long
    With sh1
        For xx = 2 To .UsedRange.Column + .UsedRange.Columns.Count - 1
            On Error Resume Next
            Set sh2 = Sheets(.Cells(1, xx).Value)
            On Error GoTo 0
            If Not sh2 Is Nothing Then
                With .Cells(2, xx).Resize(10)
                    arr = .Value
                    .ClearContents
                End With
                colName = .Cells(1, 6).Value & " " & .Cells(1, 7).Value
                CopyRange arr, sh2, colName
             
                Set sh2 = Nothing
            End If
        Next
    End With
End Sub
 
Private Sub CopyRange(arr As Variant, sh As Worksheet, colName As String)
    Dim xx As Long
    With sh
        On Error Resume Next
        xx = WorksheetFunction.Match(colName, .Rows(1), 0)
        On Error GoTo 0
        If xx = 0 Then
            xx = .Cells(1, .Columns.Count).End(xlToLeft).Column + 1
            .Cells(1, xx).Value = colName
        End If
        .Cells(2, xx).Resize(UBound(arr, 1), UBound(arr, 2)) = arr
    End With
End Sub
 

werdan

Пользователь

Сообщений: 28
Регистрация: 16.09.2014

.

Изменено: werdan15.04.2023 07:04:42

 

werdan

Пользователь

Сообщений: 28
Регистрация: 16.09.2014

Добрый день. Все работает. ОГРОМНОЕ СПАСИБО!!! Но столкнулся с такой проблеммой, после ввода данных если случайно нажать на кнопку с макросом 2 раза то все данные только что введеные стираются и на стронице ввода и на листах.  Как можно избежать этого?  

Изменено: werdan15.04.2023 07:05:45

 

New

Пользователь

Сообщений: 4581
Регистрация: 06.01.2013

#7

26.11.2022 09:02:07

не нажимайте случайно на кнопку с макросом 2 раза )) а так попробуйте этот код

Код
Sub myCopy()
    Dim sh1 As Worksheet
    Dim sh2 As Worksheet
    
    If MsgBox("Скопировать данные?", vbYesNo + vbQuestion, "Копирование") = vbNo Then Exit Sub
    
    Set sh1 = Sheets("Ввод")
    
    Dim colName As String
    Dim arr As Variant
    Dim xx As Long
    With sh1
        For xx = 2 To .UsedRange.Column + .UsedRange.Columns.Count - 1
            On Error Resume Next
            Set sh2 = Sheets(.Cells(1, xx).Value)
            On Error GoTo 0
            If Not sh2 Is Nothing Then
                With .Cells(2, xx).Resize(10)
                    arr = .Value
                    .ClearContents
                End With
                colName = .Cells(1, 6).Value & " " & .Cells(1, 7).Value
                CopyRange arr, sh2, colName
              
                Set sh2 = Nothing
            End If
        Next
    End With
End Sub
  
Private Sub CopyRange(arr As Variant, sh As Worksheet, colName As String)
    Dim xx As Long
    With sh
        On Error Resume Next
        xx = WorksheetFunction.Match(colName, .Rows(1), 0)
        On Error GoTo 0
        If xx = 0 Then
            xx = .Cells(1, .Columns.Count).End(xlToLeft).Column + 1
            .Cells(1, xx).Value = colName
        End If
        .Cells(2, xx).Resize(UBound(arr, 1), UBound(arr, 2)) = arr
    End With
End Sub

Изменено: New26.11.2022 09:03:12

 

werdan

Пользователь

Сообщений: 28
Регистрация: 16.09.2014

Мне понравилось такое решение, значительно уменьшает вероятность двойного нажатия. Только если опять 2 раза нажать ДА все сотрется. А можно при очишении формы, очистить и месяц и если месяц не введен то не копировать и не очищать форму, а выдавать ошибку введите месяц.

 

New

Пользователь

Сообщений: 4581
Регистрация: 06.01.2013

#9

26.11.2022 10:45:19

Код
Sub myCopy()
    Dim sh1 As Worksheet
    Dim sh2 As Worksheet
    Dim LastRow As Long
    
    If MsgBox("Скопировать данные?", vbYesNo + vbQuestion, "Копирование") = vbNo Then Exit Sub
     
    Set sh1 = Sheets("Ввод")
     
    Dim colName As String
    Dim arr As Variant
    Dim xx As Long
    
    With sh1
        If .FilterMode = True Then .ShowAllData
        If .Cells(1, 6).Value = Empty Or .Cells(1, 7).Value = Empty Then
            MsgBox "Введите название месяца в ячейку F1 и год в ячейку G1", vbExclamation, "Внимание"
            Exit Sub
        End If
        LastRow = .Cells(.Rows.Count, 1).End(xlUp).Row
        For xx = 2 To .UsedRange.Column + .UsedRange.Columns.Count - 1
            On Error Resume Next
            Set sh2 = Sheets(.Cells(1, xx).Value)
            On Error GoTo 0
            If Not sh2 Is Nothing Then
                With .Cells(2, xx).Resize(LastRow)
                    arr = .Value
                    .ClearContents
                End With
                colName = .Cells(1, 6).Value & " " & .Cells(1, 7).Value
                .Cells(1, 6).Value = Empty
                CopyRange arr, sh2, colName
                Set sh2 = Nothing
            End If
        Next
    End With
    MsgBox "Данные скопированы!", vbInformation, "Копирование"
End Sub
   
Private Sub CopyRange(arr As Variant, sh As Worksheet, colName As String)
    Dim xx As Long
    
    With sh
        On Error Resume Next
        xx = WorksheetFunction.Match(colName, .Rows(1), 0)
        On Error GoTo 0
        If xx = 0 Then
            xx = .Cells(1, .Columns.Count).End(xlToLeft).Column + 1
            .Cells(1, xx).Value = colName
        End If
        .Cells(2, xx).Resize(UBound(arr, 1), UBound(arr, 2)) = arr
    End With
End Sub
 

werdan

Пользователь

Сообщений: 28
Регистрация: 16.09.2014

Отлично!!! Огромное спасибо!!!

 

werdan

Пользователь

Сообщений: 28
Регистрация: 16.09.2014

Добрый день.
Еще пуще старуха (начальство) бранится, Не дает старику мне покою:
доработать просит сварливая баба, а я в макросах дерево деревом.
Может сможет мне кто то помочь?

При переносе данных, чтобы данные по месяцам записывались, не в каждый столбик,  через 1 столбик (чтобы в этом столбике вести расчет), и если при переносе данных в ячейке нет, то записывать данные из предыдущего месяца. И если это возможно при нажатии кнопки на листе данные изменять месяц на следующий.

 

werdan

Пользователь

Сообщений: 28
Регистрация: 16.09.2014

ПРИМЕР

Прикрепленные файлы

  • Книга1.xlsm (24.74 КБ)

 

werdan

Пользователь

Сообщений: 28
Регистрация: 16.09.2014

Добрый день. Подскажите решения этого вопроса нет? или где можно почитать, поизучать процедуры и функции для написания макросов

 

Msi2102

Пользователь

Сообщений: 3137
Регистрация: 31.03.2014

werdan, скажите, а Вы когда на работу устраивались, наверное тест на знание Excel проходили😁

 

werdan

Пользователь

Сообщений: 28
Регистрация: 16.09.2014

Это совсем не моя специализация и направление, это мне внагрузку, так как когда то помог с простыми формулами.
Потом озадачили темой данного поста, сам решить формулами не смог, обратился к Вам за помощью, мне написали макрос, за что огромное спасибо,  начальство за это решения меня почестями и похвалами не одарило, если это интересно.

Я так понял, вставлять данные через столбик, это большая проблемма. Если не затруднит где можно почитать про макросы?  

 

Jack Famous

Пользователь

Сообщений: 10848
Регистрация: 07.11.2014

OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome

#16

20.03.2023 11:21:28

Цитата
werdan: начальство за это решения меня почестями и похвалами не одарило

получается, мы не вам помогаем, а начальству — вас неблагодарно использовать. Нет никакого желания…

Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄

 

МатросНаЗебре

Пользователь

Сообщений: 5516
Регистрация: 05.02.2014

#17

20.03.2023 12:43:32

Цитата
написал:
не в каждый столбик,  через 1 столбик
Код
xx = .Cells(1, .Columns.Count).End(xlToLeft).Column + 2

Цитата
написал:
помогаем, а начальству — вас неблагодарно использовать

Не будем менять работающую схему )

 

МатросНаЗебре

Пользователь

Сообщений: 5516
Регистрация: 05.02.2014

#18

20.03.2023 12:53:42

Цитата
написал:
при нажатии кнопки на листе данные изменять месяц на следующий.
Код
Sub Кнопка1_Щелчок()
   
    Dim sh1 As Worksheet
    Dim sh2 As Worksheet
    Set sh1 = Sheets("Ввод")
      
    Dim colName As String
    Dim arr As Variant
    Dim xx As Long
    With sh1
        For xx = 2 To .UsedRange.Column + .UsedRange.Columns.Count - 1
            On Error Resume Next
            Set sh2 = Sheets(.Cells(1, xx).Value)
            On Error GoTo 0
            If Not sh2 Is Nothing Then
                With .Cells(2, xx).Resize(10)
                    arr = .Value
                    .ClearContents
                End With
                colName = .Cells(1, 6).Value & " " & .Cells(1, 7).Value
                CheckEmpty arr
                CopyRange arr, sh2, colName
              
                Set sh2 = Nothing
            End If
        Next
        
        Dim dt As Date
        On Error Resume Next
        dt = DateValue("01 " & colName)
        On Error GoTo 0
        If dt > 0 Then
            dt = DateSerial(Year(dt), Month(dt) + 1, 1)
            .Cells(1, 6).Value = Format(dt, "MMMM")
            .Cells(1, 7).Value = Year(dt)
        End If
        
    End With
End Sub
  
Private Sub CheckEmpty(arr As Variant)
    Dim yy As Long
    For yy = 1 To UBound(arr, 1)
        If Not IsEmpty(arr(yy, 1)) Then Exit Sub
    Next
    For yy = 1 To UBound(arr, 1)
        arr(yy, 1) = "=RC[-2]"
    Next
End Sub

  
Private Sub CopyRange(arr As Variant, sh As Worksheet, colName As String)
    Dim xx As Long
    With sh
        On Error Resume Next
        xx = WorksheetFunction.Match(colName, .Rows(1), 0)
        On Error GoTo 0
        If xx = 0 Then
            xx = .Cells(1, .Columns.Count).End(xlToLeft).Column + 2
            .Cells(1, xx).Value = colName
        End If
        .Cells(2, xx).Resize(UBound(arr, 1), UBound(arr, 2)) = arr
    End With
End Sub
Цитата
где можно почитать про макросы?

Профессиональное программирование на VBA. Дж. Уокенбах

Изменено: МатросНаЗебре20.03.2023 12:55:59

 

werdan

Пользователь

Сообщений: 28
Регистрация: 16.09.2014

#19

20.03.2023 13:28:03

Цитата
написал:

Цитата
werdan: начальство за это решения меня почестями и похвалами не одарило

получается, мы не вам помогаем, а начальству — вас неблагодарно использовать. Нет никакого желания…

Помогаем всем по мере возможности, вот и мне помогли, добро оно возвращается!!! Делай добро и бросай его в воду!!! А начальство — молодая девушка хоть и своенравная и вредная, куда она без нас вот и просит помочь хоть и не всегда благодарна.

 

werdan

Пользователь

Сообщений: 28
Регистрация: 16.09.2014

#20

20.03.2023 13:30:23

Цитата
написал:

Цитата
написал:
не в каждый столбик,  через 1 столбик

 

Код
    [URL=#]?[/URL]       1      xx = .Cells(1, .Columns.Count).  End  (xlToLeft).Column + 2   

 

Цитата
написал:
помогаем, а начальству — вас неблагодарно использовать

Не будем менять работающую схему )

Ура, можно решить и этот вопрос. ОГРОМНОЕ СПАСИБО!!!  

 

werdan

Пользователь

Сообщений: 28
Регистрация: 16.09.2014

#21

20.03.2023 13:33:25

Цитата
написал:

Цитата
написал:
при нажатии кнопки на листе данные изменять месяц на следующий.

 

Код
    [URL=#]?[/URL]       1  2  3  4  5  6  7  8  9  10  11  12  13  14  15  16  17  18  19  20  21  22  23  24  25  26  27  28  29  30  31  32  33  34  35  36  37  38  39  40  41  42  43  44  45  46  47  48  49  50  51  52  53  54  55  56  57  58  59  60  61  62  63  64      Sub   Кнопка1_Щелчок()                  Dim   sh1   As   Worksheet          Dim   sh2   As   Worksheet          Set   sh1 = Sheets(  "Ввод"  )                     Dim   colName   As   String          Dim   arr   As   Variant          Dim   xx   As   Long          With   sh1              For   xx = 2   To   .UsedRange.Column + .UsedRange.Columns.Count - 1                  On   Error   Resume   Next                  Set   sh2 = Sheets(.Cells(1, xx).Value)                  On   Error   GoTo   0                  If   Not   sh2   Is   Nothing   Then                      With   .Cells(2, xx).Resize(10)                          arr = .Value                          .ClearContents                      End   With                      colName = .Cells(1, 6).Value &   " "   & .Cells(1, 7).Value                      CheckEmpty arr                      CopyRange arr, sh2, colName                                         Set   sh2 =   Nothing                  End   If              Next                           Dim   dt   As   Date              On   Error   Resume   Next              dt = DateValue(  "01 "   & colName)              On   Error   GoTo   0              If   dt > 0   Then                  dt = DateSerial(Year(dt), Month(dt) + 1, 1)                  .Cells(1, 6).Value = Format(dt,   "MMMM"  )                  .Cells(1, 7).Value = Year(dt)              End   If                       End   With    End   Sub           Private   Sub   CheckEmpty(arr   As   Variant  )          Dim   yy   As   Long          For   yy = 1   To   UBound(arr, 1)              If   Not   IsEmpty(arr(yy, 1))   Then   Exit   Sub          Next          For   yy = 1   To   UBound(arr, 1)              arr(yy, 1) =   "=RC[-2]"          Next    End   Sub              Private   Sub   CopyRange(arr   As   Variant  , sh   As   Worksheet, colName   As   String  )          Dim   xx   As   Long          With   sh              On   Error   Resume   Next              xx = WorksheetFunction.Match(colName, .Rows(1), 0)              On   Error   GoTo   0              If   xx = 0   Then                  xx = .Cells(1, .Columns.Count).  End  (xlToLeft).Column + 2                  .Cells(1, xx).Value = colName              End   If              .Cells(2, xx).Resize(UBound(arr, 1), UBound(arr, 2)) = arr          End   With    End   Sub   

 

Цитата
где можно почитать про макросы?

Профессиональное программирование на VBA. Дж. Уокенбах

Смена месяца заслуживает отдельного ОГРОМНОГО СПАСИБО!!!
и за книжку ОГРОМНОЕ СПАСИБО!!!
Буду разбираться, может когда нибудь и я пригожусь на этом форуме :-)

 

werdan

Пользователь

Сообщений: 28
Регистрация: 16.09.2014

,

Изменено: werdan15.04.2023 06:59:38

 

werdan

Пользователь

Сообщений: 28
Регистрация: 16.09.2014

При переносе данных если ячейка пуста то вставить данные из предыдущего месяца.

 

MikeVol

Пользователь

Сообщений: 229
Регистрация: 20.10.2020

Ученик

werdan, Здравствуйте. А правила форума почитать про оформление кода, видать тоже никак?

 

werdan

Пользователь

Сообщений: 28
Регистрация: 16.09.2014

#25

01.04.2023 17:12:56

Код
Sub Кнопка1_Щелчок()
   Dim sh1 As Worksheet
    Dim sh2 As Worksheet
    Set sh1 = Sheets("Ввод")
       
    Dim colName As String
    Dim arr As Variant
    Dim xx As Long
    With sh1
        For xx = 2 To .UsedRange.Column + .UsedRange.Columns.Count - 1
            On Error Resume Next
            Set sh2 = Sheets(.Cells(1, xx).Value)
            On Error GoTo 0
            If Not sh2 Is Nothing Then
                With .Cells(2, xx).Resize(10)
                    arr = .Value
                    .ClearContents
                End With
                colName = .Cells(1, 6).Value & " " & .Cells(1, 7).Value
                CheckEmpty arr
                CopyRange arr, sh2, colName
               
                Set sh2 = Nothing
            End If
        Next
         
        Dim dt As Date
        On Error Resume Next
        dt = DateValue("01 " & colName)
        On Error GoTo 0
        If dt > 0 Then
            dt = DateSerial(Year(dt), Month(dt) + 1, 1)
            .Cells(1, 6).Value = Format(dt, "MMMM")
            .Cells(1, 7).Value = Year(dt)
        End If
         
    End With
End Sub
   
Private Sub CheckEmpty(arr As Variant)
    Dim yy As Long
    For yy = 1 To UBound(arr, 1)
        If Not IsEmpty(arr(yy, 1)) Then Exit Sub
    Next
    For yy = 1 To UBound(arr, 1)
        arr(yy, 1) = "=RC[-2]"
    Next
End Sub
 
   
Private Sub CopyRange(arr As Variant, sh As Worksheet, colName As String)
    Dim xx As Long
    With sh
        On Error Resume Next
        xx = WorksheetFunction.Match(colName, .Rows(1), 0)
        On Error GoTo 0
        If xx = 0 Then
            xx = .Cells(1, .Columns.Count).End(xlToLeft).Column + 2
            .Cells(1, xx).Value = colName
        End If
        .Cells(2, xx).Resize(UBound(arr, 1), UBound(arr, 2)) = arr
    End With
    
End Sub

[CODE][/CODE]

Изменено: werdan01.04.2023 17:13:56

 

werdan

Пользователь

Сообщений: 28
Регистрация: 16.09.2014

#26

01.04.2023 17:15:13

Цитата
написал:
werdan, Здравствуйте. А правила форума почитать про оформление кода, видать тоже никак?

Исправился, спасибо. я еще подумал почему у меня код не как у всех вставился  

 

werdan

Пользователь

Сообщений: 28
Регистрация: 16.09.2014

Добрый день. Как удалить созданую мной тему, полностью?

 

ваша личная тема уже не совсем и личная,
все что тут написано — становится общим достоянием понимающего русский язык человечесва))

Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!

 

Msi2102

Пользователь

Сообщений: 3137
Регистрация: 31.03.2014

#29

07.04.2023 09:12:21

Цитата
werdan написал:
А начальство — молодая девушка хоть и своенравная и вредная, куда она без нас вот и просит помочь хоть и не всегда благодарна.

наверное она просто неудовлетворённая, может не там ищите решение проблемы 😉

 

werdan

Пользователь

Сообщений: 28
Регистрация: 16.09.2014

#30

13.04.2023 07:32:40

Цитата
написал:

Цитата
werdan написал:
А начальство — молодая девушка хоть и своенравная и вредная, куда она без нас вот и просит помочь хоть и не всегда благодарна.

наверное она просто неудовлетворённая, может не там ищите решение проблемы 😉

Добрый день.
Нет не верно!!!
Когда я раньше писал, была задача и было решение (за, что огромное спасибо форумчанам), а сейчас эта ветка превратилась в демогогию (курилку)(почему обратился к Вам и почему Вы не можете помочь) эти рассуждения никого не интересуют. Поэтому и попросил удалитиь ветку или лучше почистить (на усмотрение модератора), так как даже мне создателю этой ветки не очень приятно читать, и теряется суть вопроса которая могла бы хоть одному человеку и пригодиться.
Я понимаю или думаю, что понимаю, последний вопрос сложный и потребует переписать почти весь код, и свое время ни кто не хочет тратить на чужего незнакомого человека.
Всем кто помогал ОГРОМНОЕ СПАСИБО!!!, а тем кто не помогал, а просто рассуждал маленькое спасибо, вы же тоже потратили свое время, что бы написать пару строк.

Эта статья может вам помочь для автоматического копирования и вставки значения ячейки в текущем листе или с одного листа на другой без использования сочетаний клавиш.

Автоматическое копирование и вставка ячейки в текущий лист или с одного листа на другой с формулой
Автоматическое копирование и вставка ячейки в текущий лист с помощью VBA
Скопируйте и вставьте несколько диапазонов на текущий лист или с одного листа на другой с помощью Kutools for Excel


Автоматическое копирование и вставка ячейки в текущий лист или с одного листа на другой с формулой

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

1. Чтобы скопировать и вставить ячейку в текущий лист, например, скопировать ячейку с A1 в D5, вы можете просто выбрать ячейку назначения D5, а затем ввести = A1 и нажмите клавишу Enter, чтобы получить значение A1.

2. Для копирования и вставки ячейки с одного листа на другой, например для копирования ячейки A1 листа Sheet1 в ячейку D5 листа Sheet2, выберите ячейку D5 на листе Sheet2, затем введите = Лист1! A1 и нажмите клавишу Enter, чтобы получить значение.

Tips: Целевая ячейка связана с скопированной ячейкой и будет изменена по мере изменения исходной ячейки.


Автоматическое копирование и вставка ячейки в текущий лист с помощью VBA

Следующий код VBA помогает скопировать ячейку или диапазон ячеек и вставить их в указанные ячейки на текущем листе.

1. Нажмите другой + F11 клавиши одновременно, чтобы открыть Microsoft Visual Basic для приложений окно.

2. в Microsoft Visual Basic для приложений окна, нажмите Вставить > Модули. Затем скопируйте и вставьте приведенный ниже код VBA в окно модуля.

Код VBA: автоматическое копирование и вставка ячейки в текущий лист

Sub RangeTest()
    On Error Resume Next
    Dim xRg As Range
    Set xRg = Application.Selection
    Range("A1 ").Copy Range("D5")
    xRg.Select
End Sub

Внимание: В коде A1 — это ячейка, которую вы скопируете, а D5 — это ячейка назначения для размещения значения ячейки A1. Для автоматического копирования и вставки диапазона ячеек замените ячейку диапазоном, например замените A1 на A1: A10 и замените D5 на D1: D10.

3. нажмите F5 нажмите клавишу для запуска кода, то определенная ячейка (диапазон) будет автоматически скопирована и вставлена ​​в указанную ячейку (диапазон), а также форматирование ячейки.


Скопируйте и вставьте несколько диапазонов на текущий лист или с одного листа на другой с помощью Kutools for Excel

Если у вас есть несколько диапазонов, которые нужно скопировать одновременно, вы можете попробовать Копировать диапазоны полезности Kutools for Excel.

1. Выберите несколько диапазонов, которые нужно скопировать, удерживая Ctrl ключ. Затем нажмите Кутулс > Копировать диапазоны. Смотрите скриншот:

2. в Копировать несколько диапазонов диалоговое окно, вы можете увидеть, что выбранные диапазоны перечислены в Диапазоны для копирования коробка. Затем укажите параметр в Специальная вставка раздел, проверьте Включая высоту строки или Включая ширину столбца поле, как вам нужно, и, наконец, нажмите OK кнопка. Смотрите скриншот:

3. В секунду Копировать несколько диапазонов диалоговом окне укажите пустую ячейку для вставки выбранных диапазонов, а затем щелкните значок OK кнопку.

Внимание: если вы хотите вставить выбранные диапазоны на другой лист, выберите ячейку на этом листе и нажмите кнопку «ОК» во втором диалоговом окне «Копировать несколько диапазонов».

Теперь выбранные диапазоны копируются и вставляются в указанное место.

  Если вы хотите получить бесплатную пробную версию (30-день) этой утилиты, пожалуйста, нажмите, чтобы загрузить это, а затем перейдите к применению операции в соответствии с указанными выше шагами.


Скопируйте и вставьте несколько диапазонов в текущий лист или с одного листа на другой


Статьи по теме:

  • Как автоматически заполнять другие ячейки при выборе значений в раскрывающемся списке Excel?
  • Как выполнить автозаполнение при вводе в раскрывающемся списке Excel?
  • Как автоматически заполнять дату в ячейке, когда соседняя ячейка обновляется в Excel?

Лучшие инструменты для работы в офисе

Kutools for Excel Решит большинство ваших проблем и повысит вашу производительность на 80%

  • Снова использовать: Быстро вставить сложные формулы, диаграммы и все, что вы использовали раньше; Зашифровать ячейки с паролем; Создать список рассылки и отправлять электронные письма …
  • Бар Супер Формулы (легко редактировать несколько строк текста и формул); Макет для чтения (легко читать и редактировать большое количество ячеек); Вставить в отфильтрованный диапазон
  • Объединить ячейки / строки / столбцы без потери данных; Разделить содержимое ячеек; Объединить повторяющиеся строки / столбцы… Предотвращение дублирования ячеек; Сравнить диапазоны
  • Выберите Дубликат или Уникальный Ряды; Выбрать пустые строки (все ячейки пустые); Супер находка и нечеткая находка во многих рабочих тетрадях; Случайный выбор …
  • Точная копия Несколько ячеек без изменения ссылки на формулу; Автоматическое создание ссылок на несколько листов; Вставить пули, Флажки и многое другое …
  • Извлечь текст, Добавить текст, Удалить по позиции, Удалить пробел; Создание и печать промежуточных итогов по страницам; Преобразование содержимого ячеек в комментарии
  • Суперфильтр (сохранять и применять схемы фильтров к другим листам); Расширенная сортировка по месяцам / неделям / дням, периодичности и др .; Специальный фильтр жирным, курсивом …
  • Комбинируйте книги и рабочие листы; Объединить таблицы на основе ключевых столбцов; Разделить данные на несколько листов; Пакетное преобразование xls, xlsx и PDF
  • Более 300 мощных функций. Поддерживает Office/Excel 2007-2021 и 365. Поддерживает все языки. Простое развертывание на вашем предприятии или в организации. Полнофункциональная 30-дневная бесплатная пробная версия. 60-дневная гарантия возврата денег.

вкладка kte 201905


Вкладка Office: интерфейс с вкладками в Office и упрощение работы

  • Включение редактирования и чтения с вкладками в Word, Excel, PowerPoint, Издатель, доступ, Visio и проект.
  • Открывайте и создавайте несколько документов на новых вкладках одного окна, а не в новых окнах.
  • Повышает вашу продуктивность на 50% и сокращает количество щелчков мышью на сотни каждый день!

офисный дно

автоматическое копирование данных по условию

Автор gitzzz, 25.07.2009, 14:22

« назад — далее »

Добрый день.

Столкнулся с проблемой:
Есть 2 листа. В первом основные данные. Есть призначное поле (да/нет).
Нужно, чтобы при вводе данных в таблицу (когда это поле = «да») автоматически копировалась на второй лист нужная инфа из этой строки данных.

Такие возможности ехсел не знаю, но знаю что они есть)

Подскажите, пожалуйста, как это можно организовать (оперативно)?
Пробовал с помощью ЕСЛИ() но там постоянно выдается ответ ЛОЖЬ. Может макрос какой-нибудь есть?
Заранее, спасибо.


Есть несколько путей:
1. Написать макрос, который будет копировать на свободное место на втором листе значение, введенное в ячейку на первом листе, если рядом ввели признак ДА. Сам я макрос написать не возьмусь, но знаю, что это не обчень сложно. Попробуйте сами использовать макрорекодер для записи собственных действий, а потом поправьте макрос.
2. Использовать сводную таблицу. Опять таки, сам никогда их не использовал, но другим людям нравится.
3. Записать во второй таблице формулы, отображающие значения всех строк (ячеек), содержащий признак ДА.

Проще всего это сделать с помощью дополнительного столбца в первой таблице:
Пусть на листе 1 значения записываются в столбце A, признаки храняться в столбце B.
Тогда в ячейке C1 запишем формулу (и протянем ее по всему столбцу C): =ЕСЛИ(B1=»ДА»;СТРОКА();»»)
После этого переходим на лист 2 и в ячейке A1 записываем формулу (и также протягиваем ее вниз на столько сколько нужно):
=ЕСЛИ(СТРОКА()>СЧЁТ(Лист1!C:C);»»;ИНДЕКС(Лист1!A:A;НАИМЕНЬШИЙ(Лист1!C:C;СТРОКА());1))
Если нужно перенести значения из нескольких столбцов первого листа, то нужно записать несколько формул, поправив агрументы функции ИНДЕКС().

P.S. Важно, чтобы в столбце C первого листа не было лишних цифровых значений.
Если у Вас на листах должна быть шапка, то поэкспериментируйте с добавлений констант вида: СТРОКА()-Const


Нашел интересную статью, но опять возникли трудности с реализацией:
http://stockportal.ru/extrading/archives/225

Помогите разобраться в части кода, начиная с Call QuoteRead(intInstCount)
Кстати та книгде и не наше что это за функция…
Код можно переделать под мою задачу, или это вобще чтото другое?…

Public WithEvents App As Application
   Private Sub App_SheetChange(ByVal Sh As Object, ByVal Target As Range)
      Dim pRow As Integer, pCol As Integer, intRow As Integer, I As Integer, intInstCount As Integer
      Dim pValue As Variant
      Dim wInstSheet As Worksheet
      Dim wNVSheet As Worksheet
     Set wInstSheet = Application.Workbooks("NettoVolume.xlsm").Sheets("Instruments")
     Set wNVSheet = Application.Workbooks("NettoVolume.xlsm").Sheets("NV")
      intInstCount = wInstSheet.Cells(2, 5)
     If Sh.Name = "Котировки" And Target.Column > 1 And Target.Row > 1 And Target.Row < 10 Then
        Debug.Print "Вошел в AppEvents"
        Call QuoteRead(intInstCount)
        For I = 1 To intInstCount
            If Instruments(I).ChangeMode = 2 Then
               intRow = wInstSheet.Cells(3, 5) + 1
              Call Instruments(I).Output(wNVSheet, intRow, 2)
              wInstSheet.Cells(3, 5) = intRow
            End If
        Next I
     End If
   End Sub


Сводную таблу сделал, но ее обновлять надо, да и пустые значения фильтром убираются…Не автоматизированно всё… Хочется, чтобы все обрабатывалось динамически.
Может кто-н знает как обработать событие при изменении значений в ячейке? Подскажите, пожалуйста. Код так и не смог разобрать…..


Если в ячейке «А1» написать слово ИСТИНА, а нижеследующий код скопировать в модуль листа №1, то, при изменении любой одной ячейки второго столбца, третьи столбцы двух листов этой строки «синхронизируются».

Private Sub Worksheet_Change(ByVal Target As Range)
 With Target
   If .Count > 1 Then Exit Sub
   If .Column = 2 And [A1] Then Sheets(2).Cells(.Row, 3) = .Offset(0, 1)
 End With
End Sub

Знания недостаточно, необходимо применение. Желания недостаточно, необходимо действие. (с) Брюс Ли



  • Профессиональные приемы работы в Microsoft Excel

  • Обмен опытом

  • Microsoft Excel

  • автоматическое копирование данных по условию

Dmitry1992_92, Здравствуйте!
Я тоже начинающий, но позволю попробую ответить с помощью формулы.
Прикладываю файл с примером.
На листе 1 в столбец А вводите значения, а на листе 2 в столбце B будут заполнятся значения лишь тогда, когда будут заполнены ячейки.
А если ячейки пустые – то и на листе 2 в столбце В ячейки тоже будут пустые.
Вот формула:

Код

=ЕСЛИ(Лист1!A1<>»»;Лист1!A1;»»)

Это значит, если на Листе1 ячейка A1 не пустая то результат будет тот же что и в ячейке A1 на листе 1.

Мне кажется правильнее было бы Вам вопрос сформулировать не Как сделать автоматическое копирование ячейки?
А «Как формулой сделать автоматическое копирование значение ячейки?»

Что бы скопировать формулы – надо «протянуть» их вниз.

Dmitry1992_92 так Вы хотели?

P. S. Dmitry1992_92 Дополняю сообщение. После написанного.
Пожалуйста. Рад был помочь.
А если Вам нужно что бы было тоже значение что в ячейке на том же листе (например на Лист1) – то формула будет следующей:

А вот формула Если не пустая ячейка A1 то результат 1.

Или другой вариант формулы:

Код

=ЕСЛИ(ЕПУСТО(A1);»»;»1″)

А вот если не пустая ячейка А1 то результат слово «яблоко»

Код

=ЕСЛИ(ЕПУСТО(A1);»»;»яблоко»)

This macro allows you to quickly and easily copy all new data from one worksheet to another; it also allows you to delete all data from the ‘import’ worksheet after it has been copied over.

This will save you a lot of time when consolidating data in Excel.

Below, I’ll give you the code and an explanation of how to modify it for your use.

35388ea75c2efc5926ce2c3d0b983a42.png

Sections:

The Macro

Use the Macro

Notes

The Macro

Sub Copy_New_Data()
''''''''  TeachExcel.com  ''''''''
'Copy all new rows from one worksheet to another.

Dim importSheet, destinationSheet As Worksheet
Dim importLastRow, importColumnCheck, destinationColumnCheck, _
importStartRow, destinationStartRow, curRow, destinationLastRow As Integer
Dim dataToCheck As Variant
Dim rng, rDel As Range


' ------------------------------------------------------------------- '
' ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| '
'           Change this section to work for your workbook.
' ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| '
' ------------------------------------------------------------------- '
'Set the worksheets
Set importSheet = Sheets("Import") 'worksheet to copy data from
Set destinationSheet = Sheets("backup") 'worksheet to paste new data

'Import data column to check
importColumnCheck = 1
'Destination data column to check
destinationColumnCheck = 1

'Start row on import sheet
importStartRow = 2
'Start row on destination sheet
destinationStartRow = 2
' ------------------------------------------------------------------- '
' ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| '
' ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| '
' ------------------------------------------------------------------- '


'Get last row from import worksheet
importLastRow = importSheet.Cells(Rows.Count, importColumnCheck).End(xlUp).Row

'Loop through range
For curRow = importStartRow To importLastRow

    'Get data to check
    dataToCheck = importSheet.Cells(curRow, importColumnCheck).Value

    'Get last row from destination sheet
    destinationLastRow = destinationSheet.Cells(Rows.Count, importColumnCheck).End(xlUp).Row

    'Check for duplicate
    With destinationSheet.Range(destinationSheet.Cells(destinationStartRow, destinationColumnCheck), destinationSheet.Cells(destinationLastRow, destinationColumnCheck))
        Set rng = .Find(What:=dataToCheck, _
                        LookIn:=xlValues, _
                        LookAt:=xlWhole, _
                        SearchOrder:=xlByRows, _
                        SearchDirection:=xlNext, _
                        MatchCase:=False)

        If Not rng Is Nothing Then
            'Record already exists

            'mark rows for deletion
            If Not rDel Is Nothing Then
                Set rDel = Union(Range("A" & curRow), rDel)
            Else
                Set rDel = Range("A" & curRow)
            End If

        Else
            'New record, so copy it over
            importSheet.Range("A" & curRow).EntireRow.Copy destinationSheet.Range("A" & destinationLastRow + 1)

            'mark rows for deletion
            If Not rDel Is Nothing Then
                Set rDel = Union(Range("A" & curRow), rDel)
            Else
                Set rDel = Range("A" & curRow)
            End If

        End If

    End With

Next curRow

'Delete rows that need to be deleted
'Un-comment the next line of code if you want to delete copied rows.
'rDel.EntireRow.Delete

End Sub

Where to install macro: Module

Use the Macro

Choose Worksheet to Copy from and Paste To

Change this section of the code to the correct names of the sheets from which you will copy your data and to which you will paste your data.

'Set the worksheets
Set importSheet = Sheets("Import") 'worksheet to copy data from
Set destinationSheet = Sheets("backup") 'worksheet to paste new data

Import is the name of the sheet from which you will copy data.

backup is the name of the sheet to which you will paste the data.

Change these as needed.

Change Start Row for Copying/Pasting

This is the first row from which you will copy data. Do not include the header row.

'Start row on import sheet
importStartRow = 2
'Start row on destination sheet
destinationStartRow = 2

Right now, the import and destination rows start on row 2.

Change Comparison Column — Column that is Used to Check for Duplicate Rows

You need to select one column in which to check for duplicate rows. For instance, you could check an ID or OrderNumber, basically anything that must always be unique for each record or row of data.

'Import data column to check
importColumnCheck = 1
'Destination data column to check
destinationColumnCheck = 1

This checks in column A for duplicate values.

1 means column A; 2 means column B; 3 means column C; and so on.

Delete All Records after Being Copied to the New Sheet

If you want all records that have already been copied over or already exist on the destination sheet to be deleted from the Import worksheet, uncomment the following line:

'rDel.EntireRow.Delete

This is at the very end of the macro.

To uncomment, remove the single quotation mark from the start of this line of code.

Notes

This is a powerful little macro and it is pretty easy to customize for your needs. I recommend using it on sample data first though to make sure you get the desired results.

Make sure to download the sample file attached to this tutorial to get the macro and some sample data with which to test the macro.


Excel VBA Course

Excel VBA Course — From Beginner to Expert

200+ Video Lessons
50+ Hours of Instruction
200+ Excel Guides

Become a master of VBA and Macros in Excel and learn how to automate all of your tasks in Excel with this online course. (No VBA experience required.)

View Course

Similar Content on TeachExcel

Automatically Updating Dependent Drop Down List Menus in Excel

Tutorial:
Step-by-step instruction on how to make automatically updating dependent data validation …

Pass Values from One Macro to Another Macro

Tutorial:
How to pass variables and values to macros. This allows you to get a result from one macr…

Import a Worksheet from One Workbook to Another in Excel

Tutorial: In Excel, you can quickly copy an entire worksheet from one workbook to another workbook.�…

Update, Change, and Manage the Data Used in a Chart in Excel

Tutorial: In this tutorial I am going to show you how to update, change and manage the data used by …

How to import Text Files (CSV) into Excel

Tutorial: Text files in CSV format are one of the easiest ways to store and transfer data as it is o…

Copy Data or Formatting to Multiple Worksheets in Excel

Tutorial:
Quickly copy all or parts of a single worksheet — data, formatting, or both — to multiple…

How to Install the Macro

  1. Select and copy the text from within the grey box above.
  2. Open the Microsoft Excel file in which you would like the Macro to function.
  3. Press «Alt + F11» — This will open the Visual Basic Editor — Works for all Excel Versions.
     Or For other ways to get there, Click Here.
  4. On the new window that opens up, go to the left side where the vertical pane is located. Locate your Excel file; it will be called VBAProject (YOUR FILE’S NAME HERE) and click this.
  5. If the Macro goes in a Module, Click Here, otherwise continue to Step 8.
  6. If the Macro goes in the Workbook or ThisWorkbook, Click Here, otherwise continue to Step 8.
  7. If the Macro goes in the Worksheet Code, Click Here, otherwise continue to Step 8.
  8. Close the Microsoft Visual Basic Editor window and save the Excel file. When you close the Visual Basic Editor window, the regular Excel window will not close.
  9. You are now ready to run the macro.

0 / 0 / 0

Регистрация: 27.10.2014

Сообщений: 7

1

Автоматическое копирование новой строки на другой лист

26.01.2016, 13:52. Показов 3044. Ответов 2


Студворк — интернет-сервис помощи студентам

Башку сломал, ищу решение с помощью коллективного разума.

Каждый раз при вводе данных через форму на листе создается новая строка с произвольными данными. Как сделать так, чтобы при создании новой строки все данные из нее автоматически копировались на другой лист (в другую книгу)? На новом листе (в новой книге) это должна быть единственная запись.



0



15136 / 6410 / 1730

Регистрация: 24.09.2011

Сообщений: 9,999

26.01.2016, 22:23

2

Цитата
Сообщение от Taxpolice
Посмотреть сообщение

Каждый раз при вводе данных через форму на листе создается новая строка

Форму Вы создали, или имеется в виду встроенная форма (Панель быстрого доступа — Все команды — Форма…)?
Если первое, то что мешает дописать копирование созданной строки на другой лист/книгу?



0



0 / 0 / 0

Регистрация: 27.10.2014

Сообщений: 7

27.01.2016, 09:27

 [ТС]

3

Нет, форма внешняя, сторонняя. К сожалению — защищенная. Про копирование из нее думал в первую очередь, но ломануть не смог.



0



Таблица в Excel – это сложный массив с множеством параметров. Он может состоять из значений, текстовых ячеек, формул и быть отформатирован разными способами (ячейки могут иметь определенное выравнивание, цвет, направление текста, специальные пометки и т.п.).

При копировании таблицы иногда требуется перенести не все ее элементы, а только некоторые. Рассмотрим, как это можно сделать.

Специальная вставка

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

Имеем таблицу с показателями по наличию макарон определенных марок на складе магазина. Наглядно видно, сколько килограмм было в начале месяца, сколько докуплено и продано, а также остаток на конец месяца. Два важных столбца выделены разными цветами. Остаток на конец месяца рассчитан по элементарной формуле.

Макароны.

Попробуем воспользоваться командой СПЕЦИАЛЬНАЯ ВСТАВКА и скопировать все данные.

Сначала мы выделяем имеющуюся таблицу, правой кнопкой вызываем меню и жмем КОПИРОВАТЬ.

В свободной ячейке снова вызываем меню правой кнопкой и нажимаем СПЕЦИАЛЬНАЯ ВСТАВКА.

Если мы оставим все как есть по умолчанию и просто нажмем ОК, то таблица вставится полностью, со всеми ее параметрами.

Попробуем поэкспериментировать. В СПЕЦИАЛЬНОЙ ВСТАВКЕ выберем другой пункт, например, ФОРМУЛЫ. Получили уже неформатированную таблицу, но с работающими формулами.

ФОРМУЛЫ.

Теперь вставим не формулы, а только ЗНАЧЕНИЯ результатов их вычислений.

ЗНАЧЕНИЯ.

Чтобы новая таблица со значениями получила внешний вид аналогичный образцу выделим ее и вставим ФОРМАТЫ с помощью специальной вставки.

ЗНАЧЕНИЯ.

Теперь попробуем выбрать пункт БЕЗ РАМКИ. Получили полную таблицу, но только без выделенных границ.

Полезный совет! Чтобы перенести формат вместе с размерами столбцов нужно перед копированием выделить не диапазон исходной таблицы, а столбцы целиком (в данном случаи это диапазон A:F).

Аналогично можно поэкспериментировать с каждым пунктом СПЕЦИАЛЬНОЙ ВСТАВКИ, чтобы наглядно увидеть, как она работает.

Перенос данных на другой лист

Перенос данных на другие листы книги Excel позволяет связывать несколько таблиц. Это удобно тем, что при замене какого-то значения на одном листе, меняются значения на всех остальных. При создании годовых отчетов это незаменимая вещь.

Рассмотрим, как это работает. Для начала переименуем листы Excel в месяцы. Затем с помощью уже знакомой нам СПЕЦИАЛЬНОЙ ВСТАВКИ перенесем таблицу на февраль и удалим значения из трех столбов:

  1. На начало месяца.
  2. Приход.
  3. Расход.

Столбец «На конец месяца» у нас задан формулой, поэтому при удалении значений из предыдущих столбцов, он автоматически обнуляется.

Перенесем данные по остатку макарон каждой марки с января на февраль. Это делается буквально в пару нажатий.

  1. На листе ФЕВРАЛЬ ставим курсор в ячейку, показывающую количество макарон марки А на начало месяца. Можно посмотреть на рисунок выше – это будет ячейка D3.
  2. Ставим в этой ячейке знак РАВНО.
  3. Переходим на лист ЯНВАРЬ и кликаем на ячейку, показывающую количество макарон марки А на конец месяца (в нашем случае это ячейка F2 на листе «январь»).

Получаем следующее: в ячейке C2 образовалась формула, которая отсылает нас на ячейку F2 листа ЯНВАРЬ. Протянем формулу вниз, чтобы знать количество макарон каждой марки на начало февраля.

Аналогично можно перенести данные на все месяцы и получить наглядный годовой отчет.

Перенос данных в другой файл

Аналогично можно переносить данные из одного файла в другой. Данная книга в нашем примере так и называется EXCEL. Создадим еще одну и назовем ее ПРИМЕР.

Примечание. Создавать новые файлы Excel можно даже в разных папках. Программа будет автоматически искать указанную книгу, независимо от того, в какой папке и на каком диске компьютера она находится.

Скопируем в книгу ПРИМЕР таблицу с помощью все той же СПЕЦИАЛЬНОЙ ВСТАВКИ. И опять удалим значения из трех столбцов. Проведем те же действия, что и в предыдущем параграфе, но переходить уже будем не на другой лист, а на другую книгу.

Получили новую формулу, которая показывает, что ячейка ссылается на книгу EXCEL. Причем видим, что ячейка F2 выглядит как $F$2, т.е. она зафиксирована. И если мы хотим протянуть формулу на остальные марки макарон, сначала нужно удалить значки доллара, чтобы снять фиксацию.

Пример.

Теперь вы знаете, как грамотно переносить данные из таблиц в рамках одного листа, с одного листа на другой, а также с одного файла в другой.

Автоматический перенос данных из одной таблицы в другую в программе Excel.

Приведу три способа Автоматического переноса данных с одного листа программы «Эксель» в другой.

Первый, самый простой и примитивный способ связи двух таблиц на разных листах документа -вставка данных при помощи опции специальной вставки.

Рассмотрим, как соединить две таблицы по шагам.

Первый шаг.

Необходимо выделить ту таблицу, из которой будут транслироваться данные во вторую таблицу.

Второй шаг.

Копировать информацию сочетанием клавиш ctrl+C или вызвав контекстное меню правой кнопкой мыши и кликнув по пункту меню «Копировать»

Копировать данные из одной таблицы

Третий шаг.

Перейти на лист документа «Excel», в который Вы планируете транслировать информацию из первой таблицы.

Четвертый шаг.

Вставить связь

Поставить курсор в первую (левую верхнюю) ячейку таблицы и выбрать в меню «Вставка» пункт «Вставить связь». В некоторых версиях программы «Excel» этот пункт находится в меню «Специальная вставка»

После вставки связи следует отформатировать вид ячеек – привести их к надлежащему виду.

Результат вставки связи

Результат вставки связи

Второй способ переноса данных из одной таблицы в другую — это использование сводных таблиц в программе «Excel».

При использовании данного метода роль второй таблицы («реципиента») играет сама сводная таблица.

Как обновить сводную таблицу

Как обновить сводную таблицу

При клике правой кнопкой мыши по сводной таблице и нажатии на пункт «Обновить» сводная таблица автоматически перенесет все данные из связанного массива информации («таблицы донора»).

О том, как в «Эксель» создавать сводные таблицы подробно написано в статье:

Как делать сводные таблицы в программе «Excel» и для чего они нужны.

Третий способ самый эффективный и наиболее автоматизированный — это использование меню надстройки «Power Query».

Правда нужно отметить, что этот способ подходит только пользователям Excel 2016 и пользователям Excel 2013и выше с установленной надстройкой «Power Query».

Смысл способа в следующем:

Необходимо открыть вкладку «Power Query». В разделе «Данные Excel» нажимаем кнопку (пиктограмму) «Из таблицы».

Из таблицы -Power QueryИз таблицы -Power Query

Далее нужно выбрать диапазон ячеек, из которых нужно «притянуть» информацию и нажимаем «Ок».

Источник данных для запроса Power Query

Источник данных для запроса Power Query

Настройка таблицы в Повер Квери

После выбора области данных появится окно настройки вида новой таблицы. В этом окне Вы можете настроить последовательность вывода столбцов и удалить ненужные столбцы.

После настройки вида таблицы нажмите кнопку «Закрыть и загрузить»

Обновление полученной таблицы происходит кликом правой кнопки мыши по названию нужного запроса в правой части листа (список «Запросы книги»). После клика правой кнопкой мыши в выпадающем контекстном меню следует нажать на пункт «Обновить»

Обновление запроса в PowerQuery

Обновление запроса в PowerQuery

Like this post? Please share to your friends:
  • Автоматическое исправление ошибок при вводе слова в ms word осуществляется с помощью средства
  • Автоматическое исправление ошибок в тексте word онлайн
  • Автоматическое имя файла word
  • Автоматическое изменение форматов в excel
  • Автоматическое изменение текста в word при изменении