Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.63/104: Рейтинг темы: голосов - 104, средняя оценка - 4.63
1 / 1 / 0
Регистрация: 17.02.2010
Сообщений: 131

Скопировать строку из одного листа в другой (Excel)

18.12.2010, 21:39. Показов 22594. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Не понимаю почему работат.
Visual Basic
1
2
Worksheets('Work').Range(Cells(2, 1), Cells(2, 14)).Copy
Worksheets('Work').Range(Cells(31, 1), Cells(31, 14)).PasteSpecial

Visual Basic
1
2
Worksheets('Base').Range(Cells(2, 1), Cells(2, 14)).Copy
Worksheets('Work').Range(Cells(31, 1), Cells(31, 14)).PasteSpecial
нет.
Всё прописано в work(List1).
Base(List1).- Другой лист.
Короче. Надо скопировать ряд из одного листа в другой.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
18.12.2010, 21:39
Ответы с готовыми решениями:

Скопировать строку из одного листа в другой
Осуществляют поиск записей с совпадениями. Если оно есть, то строку нужно скопировать на созданный лист Результаты поиска. Вот код: ...

Скопировать определенные данные с одного листа на другой
Исходный файл:Есть некий файл с огромным количеством данных.Первый столбец данных это нумерация.Второй – меняется от 1501 до 1520 в...

Скопировать определенные данные с одного листа на другой
Здравствуйте,давно читаю и впервые понадобилась помощь,нужно чтобы с одного листа с определенного человека с определеной даты копировались...

20
 Аватар для pashulka
4138 / 2242 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
19.12.2010, 03:06
Вы забыли инструкцию Select или Activate
Visual Basic
1
2
3
4
Worksheets('Base').Range(Cells(2, 1), Cells(2, 14)).Copy
Worksheets('Work').Activate ' вариант I
Worksheets('Work').Select   ' вариант II
Worksheets('Work').Range(Cells(31, 1), Cells(31, 14)).PasteSpecial
0
1 / 1 / 0
Регистрация: 17.02.2010
Сообщений: 131
19.12.2010, 18:09  [ТС]
Activate Точно отпадает.
Прикинь! Один запрос на 500 записей.
500 раз визуально прыгнуть из одного окна в другое.
А Select не работает.
Мне надо прописать в work(list1)
А прыгать в Base(list2)
Visual Basic
1
2
3
4
5
6
Private Sub CommandButton3_Click()
Worksheets('Base').Select
Worksheets('Base').Range(Cells(2, 1), Cells(2, 14)).Copy
Worksheets('Work').Select
Worksheets('Work').Range(Cells(31, 1), Cells(31, 14)).PasteSpecial
End Sub
0
 Аватар для pashulka
4138 / 2242 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
19.12.2010, 18:36
Вы спросили, почему не работает Ваш код, и я ответил, что
Paste нужно применять только в активном листе, поэтому я и предложил инструкцию Select, Activate (что в данном случае одно и тоже)
----------------------------------------
0
1 / 1 / 0
Регистрация: 17.02.2010
Сообщений: 131
19.12.2010, 20:48  [ТС]
Неужели никак иначе.
Exel когда переносит, то всякая хрень перел глазами не маячит.
0
 Аватар для pashulka
4138 / 2242 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
19.12.2010, 21:39
Можно и иначе, советую более внимательно ознакомиться с help.
Вот самый примитивный пример :
Worksheets('Work').Cells(1) = Worksheets('Base').Cells(1)
будет работать независимо от того в каком листе этой рабочей книги Вы находитесь.
0
22 / 5 / 1
Регистрация: 05.09.2010
Сообщений: 370
20.12.2010, 09:55
Так чтобы не маячило, может надо
Application.ScreenUpdating = False
в начале поставить?
0
1 / 1 / 0
Регистрация: 17.02.2010
Сообщений: 131
20.12.2010, 20:04  [ТС]
Да отлично я это знаю.
Мне для Range надо!!!!!
Worksheets('Work').Range(Cells(2, 1), Cells(2, 2)) = Worksheets('Base').Range(Cells(2, 1), Cells(2, 2))
Не работает!
0
22 / 5 / 1
Регистрация: 05.09.2010
Сообщений: 370
21.12.2010, 05:25
А так?
Range(Worksheets('Work').Cells(2, 1), Worksheets('Work').Cells(2, 2)).Value = Range(Worksheets('Base').Cells(2, 1), Worksheets('Base').Cells(2, 2)).Value
0
1 / 1 / 0
Регистрация: 17.02.2010
Сообщений: 131
21.12.2010, 22:56  [ТС]
НЕ...
я это естественно пробывал.
0
 Аватар для pashulka
4138 / 2242 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
22.12.2010, 07:06
А вот так ...
iLists = Array('Base', 'Work')
Worksheets(iLists).FillAcrossSheets Worksheets('Base').Range('A2:B2')
0
1 / 1 / 0
Регистрация: 17.02.2010
Сообщений: 131
22.12.2010, 20:06  [ТС]
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
Private Sub cmdProv_Click()
'Dim iLists
'iLists = Array('Base', 'Work')
'Мне во что надо. В цикле!!!
'Worksheets(iLists).FillAcrossSheets Worksheets('Base').Range(Cells(i, n), Cells(i+15, n)).Value
'Не работает!
 
'Я тут прикинул. Если функцию найти не можем,то надо написать самому.
Dim iLists
iLists = Array('Base', 'Work')
'm = 'A7: IV7' Копируем всю седьмую полосу!
Call mat(0, 7, 256, 7, iLists, 'Base')
'Это конечно бред. Но он работает. Может пригодиться кому-либо.
'Можете продолжать копать дальше. Найдёте скиньте!!! Please! Хватит извращений.
End Sub
Private Sub mat(num_1 As Integer, num_2 As Long, num_3 As Integer, _
num_4 As Long, listNom, ListName As String) 'wishco@yandex.ru 14.10.2004
If num_1 > 256 Or num_3 > 256 Then MsgBox 'Out of range': Exit Sub
Dim m As String: Dim m2 As String: Dim m3 As String
Dim n_1 As Integer: Dim num0 As Integer
num0 = num_1
met:
For n_1 = 0 To 8
    If num0 > 25 Then
    num0 = num0 - 26
    Else: If n_1 <> 0 Then n_1 = n_1 - 1
    Exit For: End If
Next n_1
If n_1 <> 0 Then: m = Chr(n_1 + 64)
 If num0 <> 0 Then
 m = m & Chr(num0 + 64)
 Else: m = m & Chr(65): End If
If m2 = '' Then m2 = m: m = '': num0 = num_3: GoTo met
m3 = m2 & num_2 & ':' & m & num_4
Worksheets(listNom).FillAcrossSheets Worksheets(ListName).Range(m3)
End Sub
0
 Аватар для pashulka
4138 / 2242 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
22.12.2010, 22:58
А вот так :
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
Sub ExtremePerverts()
 
iRow = 2: iCol = 2
 
iColTemp = iNameColumn(iRow, iCol)
iDiapazon = iColTemp & iRow & ':' & iColTemp & iRow + 2
 
iLists = Array('Base', 'Work')
Worksheets(iLists).FillAcrossSheets Worksheets('Base').Range(iDiapazon)
 
End Sub
 
Function iNameColumn(iRow, iCol)
 
iAddress = Cells(iRow, iCol).Column
 
iAdr = Cells(iRow, iCol).Address(RowAbsolute:=False, ColumnAbsolute:=False)
 
If iAddress > 26 Then
   iNameColumn = Left(iAdr, 2)
Else
   iNameColumn = Left(iAdr, 1)
End If
 
End Function
'хотя в Excel наверняка существует функция возвращающая имя столбца,
'если известен его номер (Count)
0
1 / 1 / 0
Регистрация: 17.02.2010
Сообщений: 131
23.12.2010, 18:14  [ТС]
У тебя код побыстрее, но у меня для Rows и Cols, в функции содержатся все операторы.
Сделай также, и проставь переменные. И я возьму твой код.
Скажу заранее спасибо.

Кстати. Ссылка на адрес... это черевато крахом Exel.
У меня пару раз вылетал в исправлении кода. Давай дорабатывай.
0
 Аватар для pashulka
4138 / 2242 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
24.12.2010, 01:41
Этот код я написал специально для Вас, и в свете вышеописанных задач он свою функцию выполняет на 100%.
P.S. Что касается моей функции, то я в ней Const не увидел.
А проблему с Office можно свести к минимуму если поставить не ставить ломаные версии.
0
1 / 1 / 0
Регистрация: 17.02.2010
Сообщений: 131
24.12.2010, 11:29  [ТС]
У меня сверху стоит Option Explicit
и если необъявлять не все переменные, то и происходит ошибка.
А в сумме с запросом к адресу, то вылетает ошибка типа GPF.

Ну мне покрайней мере надо было
iAddress = Cells(iRow, iCol).rows

Не. Дописал бы.. Самому пригодилось бы...
0
1 / 1 / 0
Регистрация: 17.02.2010
Сообщений: 131
24.12.2010, 14:01  [ТС]
Я тут к твоему коду присмотрелся и написал...
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Private Sub CommandButton2_Click()
Call iCopyRows(5, 2, 1, 14, 'Base', 'work')
'5-номер копируемого ряда из Base,2-номер вставляемого ряда в work
'1-14 Размер ряда.
End Sub
 
Sub iCopyRows(iRow, i2Row, iCol, i2Col, listCopy, ListPaste)
Dim iAdr1 As String, iAdr2 As String, iAdr3 As String, iAdr4 As String
iAdr1 = Cells(iRow, iCol).Address(RowAbsolute:=False, ColumnAbsolute:=False)
iAdr2 = Cells(iRow, i2Col).Address(RowAbsolute:=False, ColumnAbsolute:=False)
iAdr3 = Cells(i2Row, iCol).Address(RowAbsolute:=False, ColumnAbsolute:=False)
iAdr4 = Cells(i2Row, i2Col).Address(RowAbsolute:=False, ColumnAbsolute:=False)
Worksheets(listCopy).Range(iAdr1 & ':' & iAdr2).Copy
Worksheets(ListPaste).Range(iAdr3 & ':' & iAdr4).PasteSpecial
End Sub
0
0 / 0 / 1
Регистрация: 11.10.2010
Сообщений: 48
24.12.2010, 19:51
А вот так не проще ли будет ?
Visual Basic
1
2
3
4
5
Dim i As Integer
 For i = 1 To 14
  Worksheets('Work').Cells(31, i) = Worksheets('Base').Cells(2, i).Value
 Next
End Sub
0
1 / 1 / 0
Регистрация: 17.02.2010
Сообщений: 131
24.12.2010, 22:08  [ТС]
По моему мой код побыстрее...
Как узнать что нет?
0
 Аватар для pashulka
4138 / 2242 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
25.12.2010, 01:21
Снимаю шляпу перед Dimakart. Я этот код хотел оставить напоследок, как мега извращение. Теперь снова придётся придумывать что-то более извращённое.
Проверить быстроту работы кода, можно :
1) включив в программу таймер
2) засечь время в начале и в конце работы программы, а разница между ними собственно говоря и есть время работы программы.
P.S. Но вариант с таймером проще.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
25.12.2010, 01:21
Помогаю со студенческими работами здесь

Скопировать одинаковые данные с одного листа на другой
Вроде выражение правильное, но не работает. Столбы под соответствующими именами. Копировать необходимо равные Sub GetAllValues() ...

Как скопировать данные из одного листа Excel на другой в Java?
Как скопировать данные из одного листа Excel на другой в Java?

Как скопировать значения столбца из одного листа в другой?
Здравствуйте! Написал код, который копирует значения столбца &quot;Центр питания&quot; листа &quot;Каскад&quot; на создаваемый при...

Как скопировать данные с одного листа и вставить в другой
Необходимо средствами VBA Excel скопировать данные ФИО(записано в одной ячейке), нужно скопировать эти данные на Лист2 но уже в три ячейки....

Скопировать данные с одного листа на другой с сохранением всего форматирования
Всем привет. Есть 2 файла: общий и свод. В файле общий есть следующие листы: макросы, общий1, общий2. В файле свод есть много листов,...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru