Макрос копирования данных с одного листа на другой excel

0 / 0 / 0

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

Сообщений: 99

1

Excel

Макрос для копирования информации с одного листа на другой по определенным условиям

31.05.2019, 13:30. Показов 44379. Ответов 23


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

Доброго времени суток, Гуру excel!!!

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

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

заранее спасибо!!!



0



370 / 268 / 93

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

Сообщений: 990

31.05.2019, 13:31

2

А файл не приложили )



0



0 / 0 / 0

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

Сообщений: 99

31.05.2019, 13:32

 [ТС]

3

ArtNord, сейчас минутку

вот файл



0



370 / 268 / 93

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

Сообщений: 990

31.05.2019, 13:43

4

Да, вижу, а что куда и по какому условию.
Все увидел внизу



0



0 / 0 / 0

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

Сообщений: 99

31.05.2019, 13:45

 [ТС]

5

то что желтым выделено это условия, а синим это нужно перенести на лист 2



0



370 / 268 / 93

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

Сообщений: 990

31.05.2019, 14:07

6

Лучший ответ Сообщение было отмечено Александр_80 как решение

Решение

Проверьте



1



370 / 268 / 93

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

Сообщений: 990

31.05.2019, 14:08

7

Александр_80, проверьте



0



0 / 0 / 0

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

Сообщений: 99

31.05.2019, 14:21

 [ТС]

8

ArtNord, ДА ВСЕ РАБОТАЕТ ЭТО ПРОСТО МАГИЯ КАКАЯ ТО , ВОТ ТОЛЬКО Я ЗАБЫЛ УКАЗАТЬ НА КОЛОНКУ ДЮЙМЫ, МОЖНО ИХ ТОЖЕ КОПИРОВАТЬ? ПО ТЕМ ЖЕ УСЛОВИЯМ



0



370 / 268 / 93

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

Сообщений: 990

31.05.2019, 14:25

9

Добавил



1



Александр_80

0 / 0 / 0

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

Сообщений: 99

31.05.2019, 14:46

 [ТС]

10

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

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Sub Копирование()
AllRecs = Application.WorksheetFunction.CountA(Sheets("1").Range("B:B"))
cAllRecs = Application.WorksheetFunction.CountA(Sheets("2").Range("B:B"))
    For CurRec = 2 To AllRecs
    AllCrit = Sheets("1").Cells(CurRec, 2) & "_" & Sheets("1").Cells(CurRec, 3) & "_" & Sheets("1").Cells(CurRec, 8)
 
        For cRecs = 2 To cAllRecs
            CheckKrit = Sheets("2").Cells(cRecs, 2) & "_" & Sheets("2").Cells(cRecs, 3) & "_" & Sheets("2").Cells(cRecs, 19)
            If AllCrit = CheckKrit Then
            Sheets("2").Cells(cRecs, 27) = Sheets("1").Cells(CurRec, 11)
            Sheets("2").Cells(cRecs, 17) = Sheets("1").Cells(CurRec, 12)
            Sheets("2").Cells(cRecs, 18) = Sheets("1").Cells(CurRec, 13)
            Sheets("2").Cells(cRecs, 30) = Sheets("1").Cells(CurRec, 27)
            Sheets("2").Cells(cRecs, 29) = Sheets("1").Cells(CurRec, 30)
            Sheets("2").Cells(cRecs, 28) = Sheets("1").Cells(CurRec, 6)
            End If
        Next cRecs
    Next CurRec
End Sub



0



ArtNord

370 / 268 / 93

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

Сообщений: 990

31.05.2019, 14:57

11

Спасибо за оценку!

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Sub Копирование()
AllRecs = Application.WorksheetFunction.CountA(Sheets("1").Range("B:B")) ' Получение количества строк на листе 1 (подсчет значений в столбце B)
cAllRecs = Application.WorksheetFunction.CountA(Sheets("2").Range("B:B")) 'Аналогично для листа 2
For CurRec = 2 To AllRecs ' Начало цикла для Листа 1
AllCrit = Sheets("1").Cells(CurRec, 2) & "_" & Sheets("1").Cells(CurRec, 3) & "_" & Sheets("1").Cells(CurRec, 8) ' объединение 'всех критериев на Листе 1 в одну переменную
' Теперь эту "сумму критериев" ищем в Листе 2
For cRecs = 2 To cAllRecs ' Начало цикла для Листа 2
'Пробегаемся циклом по всем строкам Листа 2 сверяя сумму критериев на каждой строке с имеющейся суммой критериев
CheckKrit = Sheets("2").Cells(cRecs, 2) & "_" & Sheets("2").Cells(cRecs, 3) & "_" & Sheets("2").Cells(cRecs, 19) '  объединение 'всех критериев на Листе 2 в одну переменную
If AllCrit = CheckKrit Then 'сверка критериев если Они равны то:
'в этой строке указанным ячейкам присвоить значения из листа 1
Sheets("2").Cells(cRecs, 27) = Sheets("1").Cells(CurRec, 11) 
Sheets("2").Cells(cRecs, 17) = Sheets("1").Cells(CurRec, 12)
Sheets("2").Cells(cRecs, 18) = Sheets("1").Cells(CurRec, 13)
Sheets("2").Cells(cRecs, 30) = Sheets("1").Cells(CurRec, 27)
Sheets("2").Cells(cRecs, 29) = Sheets("1").Cells(CurRec, 30)
Sheets("2").Cells(cRecs, 28) = Sheets("1").Cells(CurRec, 6)
End If 'конец условия
Next cRecs 'следующая строка на Листе2
'После  окончания проверки на Листе 2 возвращаемся на Лист 1 за следующей суммой критериев:
Next CurRec
End Sub



1



0 / 0 / 0

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

Сообщений: 99

31.05.2019, 15:01

 [ТС]

12

ArtNord, вам спасибо за помощь!!! на самом деле в этой таблице более 50000 строк и она с каждым днем становится больше. Макрос будет работать на все эти строки?



0



ArtNord

370 / 268 / 93

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

Сообщений: 990

31.05.2019, 15:01

13

Visual Basic
1
2
3
4
Next CurRec
'Здесь можно добавить вывод сообщения об окончании работы макроса:
msgbox("Готово!")
End Sub

Да, вот эта строчка как раз и опреляет сколько сейчас записей:

Visual Basic
1
cAllRecs = Application.WorksheetFunction.CountA(Sheets("2").Range("B:B"))



1



0 / 0 / 0

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

Сообщений: 99

31.05.2019, 15:04

 [ТС]

14

ArtNord, а если копировать нужно не на лист 2 а на другой лист который находится в другой книге, что нужно сделать?



0



ArtNord

370 / 268 / 93

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

Сообщений: 990

31.05.2019, 15:06

15

Если книга эта открыта то:

Visual Basic
1
Workbooks("Название книги.xls").Sheets("Название листа").Cells(cRecs, 27) = Sheets("1").Cells(CurRec, 11)



0



0 / 0 / 0

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

Сообщений: 99

31.05.2019, 15:12

 [ТС]

16

простите меня я такой овощь в этом деле, я не пойму куда мне нужно эту строчку вставить?



0



ArtNord

370 / 268 / 93

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

Сообщений: 990

31.05.2019, 15:15

17

Где присваиваете значения:
В каждой строке вида:

Visual Basic
1
Sheets("2").Cells(cRecs, 27) = Sheets("1").Cells(CurRec, 11)

Заменить на:

Visual Basic
1
Workbooks("Название книги.xls").Sheets("Название листа").Cells(cRecs, 27) = Sheets("1").Cells(CurRec, 11)

Добавлено через 1 минуту

Visual Basic
1
2
3
4
5
Workbooks("Название книги.xls").Sheets("Название листа").Cells(cRecs, 27) = Sheets("1").Cells(CurRec, 11) 
Workbooks("Название книги.xls").Sheets("Название листа").Cells(cRecs, 17) = Sheets("1").Cells(CurRec, 12)
Workbooks("Название книги.xls").Sheets("Название листа").Cells(cRecs, 18) = Sheets("1").Cells(CurRec, 13)
Workbooks("Название книги.xls").Sheets("Название листа").Cells(cRecs, 30) = Sheets("1").Cells(CurRec, 27)
Workbooks("Название книги.xls").Sheets("Название листа").Cells(cRecs, 28) = Sheets("1").Cells(CurRec, 6)



0



0 / 0 / 0

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

Сообщений: 99

31.05.2019, 15:16

 [ТС]

18

ArtNord, Вы просто супер!!!! Я если честно даже не ожидал, что мне так сразу тут помогут!!! Дай вам бог здоровья!!!



0



370 / 268 / 93

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

Сообщений: 990

31.05.2019, 15:17

19

Спасибо! Взаимно! Просто коротаю время до конца рабочего дня ))))



1



0 / 0 / 0

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

Сообщений: 99

31.05.2019, 15:23

 [ТС]

20

ArtNord, нет не просто коротаете, вы людям помогаете!!!! Еще раз огромное спасибо ВАМ!!!!

Добавлено через 4 минуты
ArtNord, вы не подскажете, можно самому так научиться макросы писать, если да то где?



0



IT_Exp

Эксперт

87844 / 49110 / 22898

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

Сообщений: 92,604

31.05.2019, 15:23

20

Решение задачи по копированию данных с одного листа на другой без использования и с использованием массивов. Вызов из кода VBA Excel других процедур.

Условие задачи по копированию данных

На одном листе расположен список повторяющихся городов с информацией о предприятиях общепита:

Исходная таблица задания №1

Исходная таблица задания №1

Необходимо данные по каждому городу перенести в одну строку на другом листе (таблица обрезана справа):

Часть результирующего списка задания №1

Часть результирующего списка задания №1

Решение копированием с листа на лист

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

Sub Resheniye1()

Dim n1 As Long, n2 As Long, n3 As Long, n4 As Long, _

i1 As Long, gorod As Variant

n1 = Sheets(«Лист1»).Cells(1, 1).CurrentRegion.Rows.Count

  For i1 = 1 To n1

    With Sheets(«Лист1»)

      If gorod <> .Cells(i1, 1) Then

        gorod = .Cells(i1, 1)

        n2 = 1

        n3 = n3 + 1

        n4 = 1

      Else

        n2 = 2

      End If

      Do While .Cells(i1, n2) <> «»

        Sheets(«Лист2»).Cells(n3, n4) = .Cells(i1, n2)

        n4 = n4 + 1

        n2 = n2 + 1

      Loop

    End With

  Next

End Sub

Переменные:

  • n1 – количество строк в исходной таблице;
  • n2 – номер столбца текущей ячейки исходной таблицы, к которой обращается цикл;
  • n3 – номер строки текущей ячейки на втором листе;
  • n4 – номер столбца текущей ячейки на втором листе;
  • i1 – счетчик цикла For… Next;
  • gorod – переменная с наименованием города, предназначенная для контроля за сменой текущего города, который обрабатывается циклом.

Решение с использованием массивов

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

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

‘Объявление глобальных переменных

‘в разделе Declarations

Dim massiv1 As Variant, n2 As Long, _

n3 As Long, i1 As Long, txt1 As Variant

‘Исполняемая процедура для решения

‘задания вторым способом

Sub Resheniye2()

Dim n1 As Long, gorod As Variant

With Sheets(«Лист1»).Cells(1, 1)

    massiv1 = .CurrentRegion

    n1 = .CurrentRegion.Rows.Count

    n2 = .CurrentRegion.Columns.Count

End With

n3 = 0

txt1 = «»

  For i1 = 1 To n1

    If gorod <> massiv1(i1, 1) Then

      If txt1 <> «» Then

        Call Vstavka

      End If

        gorod = massiv1(i1, 1)

        txt1 = massiv1(i1, 1)

        Call Kopirovanie

    Else

        Call Kopirovanie

    End If

    If i1 = n1 Then

        Call Vstavka

    End If

  Next

End Sub

‘Копирование данных из массива в

‘строковую переменную через разделитель

Sub Kopirovanie()

Dim i2 As Long

  For i2 = 2 To n2

    If massiv1(i1, i2) <> Empty Then

      txt1 = txt1 & «|» & massiv1(i1, i2)

    End If

  Next

End Sub

‘Обработка данных из строковой

‘переменной в дополнительных массивах и

‘вставка очередной строки на второй лист

Sub Vstavka()

Dim n4 As Long, massiv2 As Variant, _

massiv3 As Variant, i3 As Long

n3 = n3 + 1

massiv2 = Split(txt1, «|»)

n4 = UBound(massiv2)

ReDim massiv3(0 To 0, 0 To n4)

  For i3 = 0 To n4

    massiv3(0, i3) = massiv2(i3)

  Next

Sheets(«Лист2»).Range(Cells(n3, 1), _

Cells(n3, n4 + 1)).Value = massiv3

End Sub

Подпрограммы Kopirovanie и Vstavka используются в цикле For... Next процедуры Resheniye2 по два раза, поэтому их коды вынесены за пределы процедуры Resheniye2 и вызываются по мере необходимости.

Переменные:

  • massiv1 – его элементам присваиваются значения ячеек исходной таблицы;
  • massiv2 – одномерный массив, заполняемый данными из переменной txt1;
  • massiv3 – двумерный массив, заполняемый данными из одномерного массива massiv2 и используемый для вставки очередной строки на второй лист;
  • txt1 – сюда копируются через разделитель значения элементов массива massiv1, предназначенные для заполнения очередной строки на втором листе;
  • n1 – количество строк в исходной таблице;
  • n2 – количество столбцов в исходной таблице;
  • n3 – номер текущей строки на втором листе;
  • n4 – количество столбцов текущей строки на втором листе (соответствует количеству элементов массива massiv2);
  • i1, i2, i3 – счетчики цикла For… Next;
  • gorod – переменная с наименованием города, предназначенная для контроля за сменой текущего города, который обрабатывается циклом.

Переменные, использующиеся более чем в одной процедуре, объявлены как глобальные в разделе Declarations программного модуля.


How to copy and paste data using a Macro in Excel. I’ll show you multiple ways to do this, including across worksheets and workbooks.

Sections:

Simple Copy/Paste

Copy Entire Range

Copy between Worksheets

Copy between Workbooks

Notes

Simple Copy/Paste

Range("A1").Copy Range("B1")

This copies cell A1 to cell B1.

Range(«A1»).Copy is the part that copies the cell.

Range(«B1») is the cell where the data will be copied.

This is a simple one line piece of code and it’s very easy to use.

Notice that there is a space between these two parts of the code.

Copy Entire Range

Range("A1:A5").Copy Range("B1:B5")

Range(«A1:A5»).Copy is the part that copies the range.

Range(«B1:B5») is the range where the data will be copied.

You can also write it like this:

Range("A1:A5").Copy Range("B1")

Notice that the range to where you will copy the data has only a reference to cell B1.

You only have to reference the very first cell to which the range will be copied and the entire range will copy in the cells below there.

NOTE: if you do it like this, you may end up overwriting data and Excel will not give you a warning about this; the data will simply be filled down as far as it needs to go to copy the first range.

Copy between Worksheets

Sheets("Sheet1").Range("A1").Copy Sheets("Sheet2").Range("B1")

This follows the same pattern as the above examples except that we need to tell the macro from which sheet we want to get the data and to which sheet we want to copy the data.

Sheets(«Sheet1»). is placed in front of the first range and that means to get the data from Sheet1, which is the name of a worksheet in the workbook.

Sheets(«Sheet2»). is placed in front of the range to which we want to copy the data and Sheet2 is the name of the worksheet where the data will be copied.

Copy between Workbooks

Workbooks("Copy and Paste Data using Macro VBA in Excel.xlsm").Sheets("Sheet1").Range("A1").Copy Workbooks("Copy and Paste Data using Macro VBA in Excel.xlsm").Sheets("Sheet3").Range("A1")

Here, we follow the above examples and, this time, add a reference to the workbooks from which we want to get the data and to which we want to place the data.

Workbooks(«Copy and Paste Data using Macro VBA in Excel.xlsm»). is the code that says in which workbook we want to place the data. Copy and Paste Data using Macro VBA in Excel.xlsm is the name of the workbook. In this example I used this for both parts, the workbook from which the data comes and where it goes. This allows you to run this macro within a single workbook and still show you how it works. In a real-world example, the first part contains the name of the workbook where you get the data from and the second contains the name of the workbook where you want to place the data.

Read this tutorial to copy values from another workbook, even if it’s closed.

Notes

All examples in the attached workbook have been commented out. Simply remove the single quote from the line of code you want to test and then run the macro.

cf5e0ebf6d62c9ec73df03c55f727e77.jpg

Download the attached file to get these examples in Excel.

Similar Content on TeachExcel

Activate or Navigate to a Worksheet using Macros VBA in Excel

Tutorial: Make a particular worksheet visible using a macro in Excel.
This is called activating a wo…

Get the Name of a Worksheet in Macros VBA in Excel

Tutorial: How to get the name of a worksheet in Excel using VBA and Macros and also how to store tha…

Get the Last Row using VBA in Excel

Tutorial:
(file used in the video above)
How to find the last row of data using a Macro/VBA in Exce…

Remove Dashed Lines from Copy Paste VBA in Excel

Tutorial: How to remove the flashing dashes from a copy/paste range using VBA in Excel; this removes…

Copy one range and paste in another range

Tutorial: Below is a macro, just copy and paste it into a module in your workbook and go from there…

Guide to Combine and Consolidate Data in Excel

Tutorial: Guide to combining and consolidating data in Excel. This includes consolidating data from …

Subscribe for Weekly Tutorials

BONUS: subscribe now to download our Top Tutorials Ebook!

 

IGGI

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

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

Добрый день!
У меня такая задача. На листе А есть таблица с данными. Мне нужно данные из заранее известных ячеек таблицы, по нажатию кнопки, скопировать на лист В, при этом, при нажатии на кнопку еще раз в этот же день, данные должны переноситься в тоже самое место (или больше не переноситься), а в другой день, через строку от нижней заполненной ячейки. Т.е. данные на листе В не должны затираться, а каждое последующее копирование должно располагаться на две строчки ниже.
Простыми словами, есть дневная статистика на листе А, ее нужно архивировать по нажатию кнопки, на лист В, с текущей датой. От одной и той же даты, данные на листе А, не могут быть разные, поэтому переносить их можно или один раз в день или просто записывать их в те же самые  ячейки на листе В. В след. день, данные будут другие, их нужно расположить на листе В через строчку ниже, от предыдущих.
Буду очень рад Вашей помощи. Оговорюсь, в VBA знаний почти нет.
Спасибо.

 

Юрий М

Модератор

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

Контакты см. в профиле

#2

14.06.2013 22:52:35

Цитата
IGGI пишет: в VBA знаний почти нет

В таком случае результат получите быстрее, если разместите свою тему в разделе «Работа». Но и там потребуется Ваш файл с исходными данным и с желаемым результатом. Или ждите здесь…

 

как-то так — простенько без излишеств  :D

Изменено: kalbasiatka15.06.2013 00:44:31

 

IGGI

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

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

Kalbasiatka, спасибо Вам огромное!!! Так быстро..) Это очень похоже на то что мне нужно. Буду пробовать адаптировать для своих данных)

 

IGGI

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

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

kalbasiatka, Вы не могли бы подсказать, что нужно добавить, что бы на другую страницу переносились не только значения исходных ячеек, но и форматирование (фон ячейки, границы, шрифт и т.п)?
А так все получилось, очень рад Вашей помощи  :)

 

kalbasiatka

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

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

#6

15.06.2013 21:03:19

может так?

Код
Sub uuu()
    With Sheets("Лист2")
        lr = .Cells(Rows.Count, 1).End(xlUp).Row
        If .Cells(lr, 1) = Date Then
            Range("A2, C2, E2").Copy .Cells(lr, 1)
        Else: Range("A2, C2, E2").Copy .Cells(lr + 2, 1)
        End If
    End With
End Sub 
 

IGGI

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

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

Да, это то, что нужно!) Спасибо Вам большое, все получилось!

 

IGGI

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

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

Kolbasiatka, в моем случае все таки не получилось) В смысле у меня данные не в одной строке, а в разных. Как только в этой строке Else: Range(«A2, C2, E2» ;) .Copy .Cells(lr + 2, 1) появляются данные из разных строк, выдает ошибку. Например вот так: Else: Range(«A2, C2,

E3

» ;) .Copy .Cells(lr + 2, 1) уже не получается. Нельзя ли написать макрос, в кот. я смогу подставлять данные из множества ячеек на листе из разных строк и столбцов?
Спасибо.

 

KuklP

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

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

E-mail и реквизиты в профиле.

Вот поэтому Вам и порекомендовали во 2-м посте перенести тему туда, где ей самое место.

Я сам — дурнее всякого примера! …

 

Юрий М

Модератор

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

Контакты см. в профиле

#10

16.06.2013 15:06:03

Цитата
IGGI пишет:
у меня данные не в одной строке, а в разных.

Вы об этом предупредили? Или свой файл-пример показали?

 

IGGI

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

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

#11

16.06.2013 15:50:36

Да нет, не показывал. Мне сходу предложили вариант который полностью меня устроил. А дополнительная, второстепенная задача, возникла позже. Тут я извиняюсь, пример сделаю.

Цитата
KuklP пишет:
Вот поэтому Вам и порекомендовали во 2-м посте перенести тему туда, где ей самое место.

Уважаемый, KukIP! Я так понимаю рекомендовали не Вы, Вы не модератор и по существу вопроса Вам сказать нечего. Во втором посте модератором было сказано «или ждите здесь». Так что не стоит засорять ветку, своими умными замечаниями, я разберусь без Вас.

 

Юрий М

Модератор

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

Контакты см. в профиле

#12

16.06.2013 15:57:14

Цитата
IGGI пишет:
пример сделаю.

И это правильно! :)

 

KuklP

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

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

E-mail и реквизиты в профиле.

#13

16.06.2013 16:03:51

Цитата
IGGI пишет:
по существу вопроса Вам сказать нечего.

Есть чего сказать. Но не для халявщиков. Тем более не для грубиянов-халявщиков. Персонально для Вас,IGGI, — форум не стол халявных заказов. Для заказов есть ветка «Работа»:

http://www.planetaexcel.ru/forum/?PAGE_NAME=list&FID=7

Цитата
IGGI пишет:
У меня такая задача… в VBA знаний почти нет…

Вот там и уместно ставить задачи.

Я сам — дурнее всякого примера! …

 

IGGI

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

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

#14

16.06.2013 16:30:24

Цитата
KuklP пишет:
Есть чего сказать. Но не для халявщиков. Тем более не для грубиянов-халявщиков. Персонально для Вас, IGGI,  — форум не стол халявных заказов. Для заказов есть ветка «Работа»:

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

 

IGGI

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

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

Вот пример)

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

  • Пример.xlsx (13.21 КБ)

 

IGGI

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

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

#16

19.06.2013 17:21:33

Цитата
IGGI пишет:
Вот пример)

Для потомков. Вопрос был решен с помощью такого макроса:

Код
Sub архив()
Application.ScreenUpdating = False
    With Sheets("архив")
        lr = .Cells(Rows.Count, 2).End(xlUp).Row
        If .Cells(lr, 2) = Date Then
            Range("B5").Copy .Cells(lr - 1, 2)
            Range("C5").Copy
            .Cells(lr, 2).PasteSpecial Paste:=xlPasteValues
            .Cells(lr, 2).PasteSpecial Paste:=xlPasteFormats
            Range("J13:N13").Copy .Cells(lr - 1, 3)
            Range("C13:C17").Copy
            .Cells(lr, 3).PasteSpecial Transpose:=True
        Else
            Range("B5").Copy .Cells(lr + 2, 2)
            Range("C5").Copy
            .Cells(lr + 3, 2).PasteSpecial Paste:=xlPasteValues 'специальная вставка значения
            .Cells(lr + 3, 2).PasteSpecial Paste:=xlPasteFormats 'специальная вставка форматы
            Range("J13:N13").Copy .Cells(lr + 2, 3)
            Range("C13:C17").Copy
            .Cells(lr + 3, 3).PasteSpecial Transpose:=True
        End If
    End With
Application.ScreenUpdating = True
End Sub

Спасибо!

 

faridvg

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

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

Здравствуйте. А можно изменить этот макрос, чтоб он записывал данные на лист Б подряд и убрать привязку к дате?
Спасибо.

Изменено: faridvg11.07.2017 13:15:49

 

vikttur

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

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

Лучше создать новую тему с названием, отражающим суть задачи.

 

ANSWERIVER

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

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

#19

12.12.2018 15:18:55

Всем привет,

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

Код
Private Sub CommandButton3_Click()

    Range("F2").Copy
    Range("K2").Select
    ActiveSheet.Paste
    Range("F3").Copy
    Range("K3").Select
    ActiveSheet.Paste
    Range("F4").Copy
    Range("K4").Select
    ActiveSheet.Paste
    Range("F5").Copy
    Range("K5").Select
    ActiveSheet.Paste

Изменено: ANSWERIVER12.12.2018 15:19:37

копирование данных с одного листа на другой.

Ona

Дата: Понедельник, 23.06.2014, 21:41 |
Сообщение № 1

Группа: Пользователи

Ранг: Прохожий

Сообщений: 4


Репутация:

0

±

Замечаний:
0% ±


Excel 2010

Добрый вечер. Как можно создать макрос вот к такой задаче: копирование постоянно меняющихся данных, на лист1 в солбце B записываются данные, которые меняются с 1 по 6 строку, далее данные с 1 строки по 3 включительно записывались на лист2 в столбец А, данные с 4 строки по 6 включительно, записывались на лист2 в столбец B.

К сообщению приложен файл:

4164505.xlsx
(11.8 Kb)

Сообщение отредактировал OnaПонедельник, 23.06.2014, 23:11

 

Ответить

DJ_Marker_MC

Дата: Понедельник, 23.06.2014, 23:29 |
Сообщение № 2

Группа: Друзья

Ранг: Ветеран

Сообщений: 991


Репутация:

213

±

Замечаний:
0% ±


Excel 2019

[vba]

Код

Sub icopy()
Worksheets(«Лист2»).Range(«A2:A4»).Value = Worksheets(«Лист1»).Range(«B1:B3»).Value
Worksheets(«Лист2»).Range(«b2:b4»).Value = Worksheets(«Лист1»).Range(«B4:B6»).Value
End Sub

[/vba]

Сообщение отредактировал DJ_Marker_MCПонедельник, 23.06.2014, 23:49

 

Ответить

Ona

Дата: Понедельник, 23.06.2014, 23:51 |
Сообщение № 3

Группа: Пользователи

Ранг: Прохожий

Сообщений: 4


Репутация:

0

±

Замечаний:
0% ±


Excel 2010

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

К сообщению приложен файл:

123.xlsm
(15.7 Kb)

 

Ответить

DJ_Marker_MC

Дата: Вторник, 24.06.2014, 00:02 |
Сообщение № 4

Группа: Друзья

Ранг: Ветеран

Сообщений: 991


Репутация:

213

±

Замечаний:
0% ±


Excel 2019

Тогда так:
[vba]

Код

Sub icopy()
Application.ScreenUpdating = False
Application.CutCopyMode = False
iLastA = Worksheets(«Лист2»).Cells(Rows.Count, 1).End(xlUp).Row + 1
iLastB = Worksheets(«Лист2»).Cells(Rows.Count, 2).End(xlUp).Row + 1

Worksheets(«Лист1»).Range(«B1:B3»).Copy
Worksheets(«Лист2»).Range(«A» & iLastA).PasteSpecial xlValue
Worksheets(«Лист1»).Range(«B4:B6»).Copy
Worksheets(«Лист2»).Range(«B» & iLastB).PasteSpecial xlValue

Application.CutCopyMode = True
Application.ScreenUpdating = True
End Sub

[/vba]

К сообщению приложен файл:

4875981.xlsm
(19.8 Kb)

 

Ответить

Ona

Дата: Вторник, 24.06.2014, 00:09 |
Сообщение № 5

Группа: Пользователи

Ранг: Прохожий

Сообщений: 4


Репутация:

0

±

Замечаний:
0% ±


Excel 2010

Спасибо великое, за помощь, все работает. hands

 

Ответить

DJ_Marker_MC

Дата: Вторник, 24.06.2014, 00:11 |
Сообщение № 6

Группа: Друзья

Ранг: Ветеран

Сообщений: 991


Репутация:

213

±

Замечаний:
0% ±


Excel 2019

Кстати, вот так будет лучше.
Добавил еще суммирование по диапазону. Ато когда вы накопируете больше чем 500 строк, придется растягивать сверху формулу сумма, а сейчас будет сразу вставляется на листе2 в А1 и В1 готовая сумма без формулы.

Up.
Сори, не приложил файл. Прилаживаю.

К сообщению приложен файл:

7369996.xlsm
(20.5 Kb)

Сообщение отредактировал DJ_Marker_MCВторник, 24.06.2014, 00:13

 

Ответить

Ona

Дата: Вторник, 24.06.2014, 01:26 |
Сообщение № 7

Группа: Пользователи

Ранг: Прохожий

Сообщений: 4


Репутация:

0

±

Замечаний:
0% ±


Excel 2010

Ага…понятно.еще лучше. Спасибо :)

 

Ответить

Xaroos

Дата: Вторник, 26.05.2015, 14:06 |
Сообщение № 8

Группа: Пользователи

Ранг: Новичок

Сообщений: 11


Репутация:

0

±

Замечаний:
0% ±


Excel 2007

Добрый день, воспользовался данным макросом, исправил под свои нужды, все работает , но не совсем так как мне нужно. Хочется, что бы с листа ПРОДАЖА, после нажатия кнопки в журнал, все что находится в накладной копировалось в ЖУРНАЛ ПРОДАЖ и в конце добавлялась дата продажи. а между продажами ставилась сумма по накладной. И каждый день в журнале добавлялся итог за день, на листе Журнал продаж как смог изобразил желаемое и еще желательно что бы копировались значения, а не формулы. Спасибо!
[moder]Читаем Правила форума, создаём свою тему. Эта тема закрыта[/moder]

К сообщению приложен файл:

2359108.xlsx
(94.8 Kb)

Сообщение отредактировал PelenaВторник, 26.05.2015, 14:12

 

Ответить

Понравилась статья? Поделить с друзьями:
  • Макрос копирование ячеек с листа на лист в excel
  • Макрос или надстройка excel
  • Макрос копирование строки с листа на лист в excel
  • Макрос изменения цвета ячейки в excel при
  • Макрос копирование строк с листа на лист в excel