Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.60/30: Рейтинг темы: голосов - 30, средняя оценка - 4.60
1 / 1 / 0
Регистрация: 17.07.2011
Сообщений: 82

Копирование данных с одного листа в таблицу на другом листе

09.01.2020, 08:58. Показов 6847. Ответов 53
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Напишите пожалуйста код, как все данные из Лист2 колонки B9 скопировать на другой лист1 в умную таблицу, не могу разобраться, с моими вариантами копируется только одна строка из колонки B строки 9, а нужно чтоб полностью всё содержимое колонки, начиная с 9 строки и до последней заполненной копировалось.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.01.2020, 08:58
Ответы с готовыми решениями:

Копирование некоторых ячеек с одного листа в первую пустую строку на другом листе
Добрый день! У меня такая задача, есть лист Anketa и лист MB. Лист Anketa это анкета для заполнения, состоит из множества заполняемых...

Отображение части данных одного листа на другом
Здравствуйте! У меня вопрос: есть две страницы "Лист1" - пустая, и "Лист2" - с данными. Можно ли сделать в "Лист1" ссылку на...

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

53
1 / 1 / 0
Регистрация: 17.07.2011
Сообщений: 82
11.01.2020, 09:44  [ТС]
Студворк — интернет-сервис помощи студентам
Burk, очистите таблицу на листе data и нажмите ваш макрос.

файл лежит в 32 сообщении, и то что я написал пожалуйста тоже посмотрите
0
1847 / 1162 / 354
Регистрация: 11.07.2014
Сообщений: 4,107
11.01.2020, 10:13
root2, я не буду разбираться в том, что вы написали, я не учитель, чтобы править ваши коды, мне своих достаточно. 32-е сообщение тоже выискивать не буду, пришлите мне файл, кто его знает, что вы там ещё поменяли. Если нет, то я как и yutrans тихо уйду с вашей темы. и на свободном листе нарисуйте, что должно получится в итоге

Добавлено через 17 минут
root2, вы бы сами свой файл глянули, там у вас три листа, а на кнопке стоит ПЕРЕНЕСТИ НА Лист1, наверно надо на лист ДАТА?
0
1847 / 1162 / 354
Регистрация: 11.07.2014
Сообщений: 4,107
11.01.2020, 10:34
root2, сделал, как вы просили через сообщение 32. Всё работает, а самому поменять макрос и имена листов было слабо?
Вложения
Тип файла: rar test23.rar (21.3 Кб, 5 просмотров)
0
1 / 1 / 0
Регистрация: 17.07.2011
Сообщений: 82
11.01.2020, 10:35  [ТС]
Burk, По всей видимости мы друг друга не поняли,

Вот файл,

tested.zip

Вот код,

Visual Basic
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
Sub MMM()
With Sheets("COPYTODATA")
    LR1 = .Cells(Rows.Count, 4).End(xlUp).Row
    If LR1 < 9 Then
        MsgBox "No Data"
        Exit Sub
    End If
    
    If LR1 = 9 Then
        ARR = .Cells(9, 4).Value
        Flag = True
    Else
        ARR = Range(.Cells(9, 4), .Cells(LR1, 4)).Value
    End If
    
    
    ARR = Range(.Cells(9, 4), .Cells(LR1, 4)).Value
End With
 
 
With Sheets("Data")
If .Cells(2, 2).Value = 0 Then LR2 = 2 Else LR2 = .Cells(Rows.Count, 2).End(xlUp).Row + 1
 If Flag = True Then
 .Cells(LR2, 1).Value = Date
 .Cells(LR2, 2).Value = ARR
 Else
 .Cells(LR2, 1).Resize(UBound(ARR)).Value = Date
 .Cells(LR2, 2).Resize(UBound(ARR)).Value = ARR
 End If
End With
End Sub
Запускаю макрос и вижу следующее,

Если передаётся только одна строка с листа COPYTODATA, тогда всё хорошо, и на листе DATA добавляется новая строка с данными, ДАТА/НАИМЕНОВАНИЕ/ЕД/СТОИМОСТЬ

Если передаётся более одной строки с листа COPYTODATA, тогда всё плохо, и на листе DATA добавляются новые строки с данными, только ДАТА/НАИМЕНОВАНИЕ, код который внутри листа DATA перестаёт работать и заполнять колонки ЕД/СТОИМОСТЬ.
0
1 / 1 / 0
Регистрация: 17.07.2011
Сообщений: 82
11.01.2020, 11:30  [ТС]
Burk, Я читаю код прежде чем запускать всё поменяно, вы правда не видите что код с листа не выполняется ?

*Исходный текст Лист DATA, посмотрите )
0
 Аватар для Narimanych
2753 / 1727 / 779
Регистрация: 23.03.2015
Сообщений: 5,452
11.01.2020, 13:16
root2,

порпробуйте:

Кликните здесь для просмотра всего текста

Visual Basic
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
Sub MMM()
With Sheets("COPYTODATA")
    LR1 = .Cells(Rows.Count, 4).End(xlUp).Row
    If LR1 < 9 Then
        MsgBox "No Data"
        Exit Sub
    End If
    
    If LR1 = 9 Then
        ARR = .Cells(9, 4).Value
        Flag = True
    Else
        ARR = Range(.Cells(9, 4), .Cells(LR1, 4)).Value
    End If
        ARR = Range(.Cells(9, 4), .Cells(LR1, 4)).Value
End With
 
 
With Sheets("Data")
.ListObjects("Таблица3").Unlist
If .Cells(2, 2).Value = 0 Then LR2 = 2 Else LR2 = .Cells(Rows.Count, 2).End(xlUp).Row + 1
 If Flag = True Then
 .Cells(LR2, 1).Value = Date
 .Cells(LR2, 2).Value = ARR
 Else
 .Cells(LR2, 1).Resize(UBound(ARR)).Value = Date
 .Cells(LR2, 2).Resize(UBound(ARR)).Value = ARR
 End If
   
 For i = LR2 To .Cells(Rows.Count, 2).End(xlUp).Row
 
 For j = 2 To Sheets("Base").Cells(Rows.Count, 1).End(xlUp).Row
   If .Cells(i, 2).Value = Sheets("Base").Cells(j, 1).Value Then
      .Cells(i, 3).Value = Sheets("Base").Cells(j, 2).Value
      .Cells(i, 4).Value = Sheets("Base").Cells(j, 3).Value
   End If
 Next
Next
 LR2 = .Cells(Rows.Count, 2).End(xlUp).Row
.ListObjects.Add(xlSrcRange, Range(.Cells(1, 1), .Cells(LR2, 4)), xlYes).Name = "Таблица3"
 
 
 
End With
End Sub

1
1847 / 1162 / 354
Регистрация: 11.07.2014
Сообщений: 4,107
11.01.2020, 13:25
root2, по странной случайности у меня оказался ваш макрос, а не мой, видимо, исправил, но не сохранил.
Пришлось снова делать. Сейчас проверьте. И надо помнить такую штуку - при передаче диапазона в массив массив двухмерный даже если передача одного столбца. В некоторых строка столбцы не заполнены, это при отладке, не стал удалятб
Вложения
Тип файла: rar test23.rar (23.3 Кб, 8 просмотров)
1
1 / 1 / 0
Регистрация: 17.07.2011
Сообщений: 82
11.01.2020, 15:16  [ТС]
Burk, Спасибо, всё хорошо, но есть маленький нюанс, если таблица пустая, пропускает 1 строку и начинает заполнять данными со второй строки.
0
1847 / 1162 / 354
Регистрация: 11.07.2014
Сообщений: 4,107
11.01.2020, 16:05
root2, подправлю позже, сегодня или завтра, там есть нюанс.
1
1 / 1 / 0
Регистрация: 17.07.2011
Сообщений: 82
11.01.2020, 16:13  [ТС]
Burk, Хорошо, я пока тоже попробую разобраться.
0
1847 / 1162 / 354
Регистрация: 11.07.2014
Сообщений: 4,107
11.01.2020, 16:35
root2, кстати, по-моему у вас эта ситуация - обязательная пустая строка в незаполненной таблице - была предусмотрена. Подправьте мой макрос
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
' в описание переменных поставьте 
Dim M As Integer
' после строки
  Lr2 = .Range.Rows.Count
' поставьте такую строку
  M = IIf(Lr2 = 2 And .Range(2, 2) = "", 1, 0)
' после строки
  If K = 1 Then
' замените строку следующей
    If M = 0 Then .ListRows.Add
' аналогичную замену сделайте после строки
    For I = 1 To K
' такой же строкой
      If M = 0 Then .ListRows.Add
1
1 / 1 / 0
Регистрация: 17.07.2011
Сообщений: 82
11.01.2020, 16:46  [ТС]
Burk, теперь ниже таблицы заполняет, данные в таблицу не попадают.
*Таблица пустая*
0
1847 / 1162 / 354
Регистрация: 11.07.2014
Сообщений: 4,107
11.01.2020, 17:16
Лучший ответ Сообщение было отмечено root2 как решение

Решение

root2, забыл ещё - после строк с добавлением новой строки надо изменить следующими строками
Visual Basic
1
2
3
    .Range(Lr2 + 1 - M, 2) = Ar
' и в следующем аналогичном месте
      .Range(Lr2 + I - M, 2).Value = Arr(I)
а проще записать этот кусок полностью
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
With Tabl
  Lr2 = .Range.Rows.Count
  M = IIf(Lr2 = 2 And .Range(2, 2) = "", 1, 0)
  If K = 1 Then
    If M = 0 Then .ListRows.Add
    .Range(Lr2 + 1 - M, 2) = Ar
  Else
    For I = 1 To K
      If M = 0 Then .ListRows.Add
      .Range(Lr2 + I - M, 2).Value = Arr(I)
    Next
  End If
End With
Добавлено через 23 минуты
root2, а ещё проще так и красивее (я ведь тоже раньше не имел дела с умными таблицами) И М не нужно
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
With Tabl
  Lr2 = .Range.Rows.Count
  If Lr2 = 2 And .Range(2, 2) = "" Then Lr2 = Lr2 - 1
  If K = 1 Then
    .Range(Lr2 + 1, 2) = Ar
  Else
    For I = 1 To K
      .Range(Lr2 + I, 2).Value = Arr(I)
    Next
  End If
End With
1
1 / 1 / 0
Регистрация: 17.07.2011
Сообщений: 82
11.01.2020, 18:19  [ТС]
Burk, Отлично! Это именно то что я хотел увидеть, спасибо Вам огромное, я точно был уверен, что, тут мне помогут.

Добавлено через 55 минут
Narimanych, Спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.01.2020, 18:19

Копирование данных с одного листа на другой
Здравствуйте! Помогите, пожалуйста, профану в программировании написать процедурку копирования с одного листа на другой. На одном листе...

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

Копирование данных с одного листа на другой
У меня еще 2 небольших вопросика. 1) Скопировать лист с именем &quot;list1&quot; в пустой уже существующий лист &quot;&quot;list2&quot; я...

Копирование данных с одного листа на другой
Добрый день. Есть такая проблемка. В данном коде появляется ошибка при вставке данных из одной книги в другую Method ‘Paste’ of object...

Копирование данных с одного листа на другой
Доброго времени суток. Помогите, пожалуйста придумать макрос для копирования. Имеется два листа. Нужно создать макрос для копирования...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
54
Ответ Создать тему
Новые блоги и статьи
Генератор паролей (вариант №4)
Maks 01.11.2026
После публикации 3-го варианта генератора паролей, разослал его своим коллегам (с целью оценки), в итоге были получены следующие рекомендации: 1. Вернуть возможность использования знаков | 1 l I;. . .
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С. Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты:. . .
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию? Фраза «Любая достаточно развитая технология неотличима от магии». . .
За какое время ИИ может подобрать пароль по хешу (рассказывает Джемени ИИ)
zorxor 30.10.2026
Расскажи, Джемени, если известен хэш МД5, например, за сколько ИИ сможет подобрать соответствующий пароль? Искусственный интеллект (ИИ) может подобрать простой или средний по сложности пароль по. . .
Кто убил Suno? Почему наше солнышко погасло? (диалог с ИИ Джемени)
zorxor 30.10.2026
Как убивали Suno. Хронология. «Убийство» музыкальной нейросети Suno — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
Генератор паролей (вариант №2)
Maks 30.10.2026
Обновленная версия ранее созданной обработки. Добавлены следующие реквизиты типа Булево: - Буквы; - Цифры; - Символы. Изменена логика команды "Сгенерировать" и процедуры "ПриОткрытии":. . .
Генератор паролей (вариант №1)
Maks 29.10.2026
Реализация из решения ниже выполнена исключительно по моей инициативе, дабы облегчить себе работу в создании паролей для администрируемых мною сервисов и пользователей. Самым главным критерием для. . .
Установка ChatGPT (Codex) на Windows без использования Microsoft Store
Fabien159 28.10.2026
Здравствуйте всем читающим! Опишу процесс установки ChatGPT (Codex) на Windows, если по каким-то причинам у вас не получается устанавить его через Microsoft Store. И так: 1. Скачиваем с. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru