EXCEL, VBA, help!!!

Программирование на Visual Basic for Applications
MindHunter
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 4
Зарегистрирован: 08.10.2004 (Пт) 0:58
Откуда: Землянин

EXCEL, VBA, help!!!

Сообщение MindHunter » 08.10.2004 (Пт) 1:08

Короче трабл в следующем.
Пытаюсь кое что написать в Бейсике в Екселе.
Надо копировать строки из второго листа в первый.
Это просто. Например так:

Sheets("Sheet2").Rows("1:1").Select
Selection.Copy
Sheets("Sheet1").Select
Rows("1:1").Select
ActiveSheet.Paste

Коряво, я знаю. Это не главное.
Но мне надо не давать конкретные номера строк, а зациклить весь проесс с помощью переменных.
Но замена

Rows("1:1").Select

на

Rows("a:a").Select

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

Как прально написать это дело?
В хелпе такую чушь наверно не пишут - по крайней мере я не нашел...

Спасибо.
If you gaze for long into an abyss, the abyss gazes also into you.

corgi
ToyMan
ToyMan
 
Сообщения: 1367
Зарегистрирован: 01.10.2002 (Вт) 9:59
Откуда: Россия, Москва

Сообщение corgi » 08.10.2004 (Пт) 9:56

тогда пиши просто
Rows(1).Select
Ничто так не ограничивает полёт мысли программиста, как компилятор

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 08.10.2004 (Пт) 11:53

Код: Выделить всё
dim i as long

for i=1 to 10
  worksheets("Sheet2").rows(i).copy worksheets("Sheet1").rows(i)
next
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

MindHunter
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 4
Зарегистрирован: 08.10.2004 (Пт) 0:58
Откуда: Землянин

Сообщение MindHunter » 08.10.2004 (Пт) 13:45

Мужики спасибо за поддержку. Но опять ничего не выходит.
Опишу всю задачу.

Короче есть два листа. В первом колонка с названиями.
Во втором такая же колонка - только гораздо белее длинная + дополнительные столбцы с инфой.
Задача: дополнить недостающими столбцами первый спсок.

Короче мой нобор строк кода сравнивает первую ячейку первого списка с первым столбиком во втором и если находит совпадение копирует всю строку.
По причине полного незнания Бесика, получилось вот это:

Sub Macro1()

Dim str1, str2 As Integer

str1 = 1
str2 = 1
Do While str1 <= 1000
Do While str2 <= 1000

If Worksheets("Sheet1").Cells(str1, 1).NoteText = Worksheets("Sheet2").Cells(str2, 1).NoteText Then

Sheets("Sheet2").Rows("str2:str2").Select
Selection.Copy
Sheets("Sheet1").Select
Rows("str1:str1").Select
ActiveSheet.Paste

str1 = str1 + 1
str2 = 1
Else
str2 = str2 + 1
End If


Loop
Loop

End Sub


НЕ ПАШЕТ.

Пробовал так.

Sub Macro1()
Dim str1, str2 As Integer

str1 = 1
str2 = 1
Do While str1 <= 1000
Do While str2 <= 1000
If Worksheets("Sheet1").Cells(str1, 1).NoteText = Worksheets("Sheet2").Cells(str2, 1).NoteText Then
Worksheets("Sheet2").Rows(str2).Copy
Worksheets("Sheet1").Rows(str1).Paste


str1 = str1 + 1
str2 = 1
Else
str2 = str2 + 1
End If

Loop
Loop

End Sub


ТОЖЕ НЕ ПАШЕТ.


Я понимаю что все коряво и уродски, но....
Почему не пашет не понимаю.
Мужики, что делать? Спасибо вам!
If you gaze for long into an abyss, the abyss gazes also into you.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 08.10.2004 (Пт) 14:17

Код: Выделить всё
Sub Macro1()
  Dim i As Long, f As Range, s As String
 
  For i = 1 To Worksheets("Sheet1").UsedRange.Rows.Count
    s = Worksheets("Sheet1").Cells(i, 1).Value
    If Len(s) = 0 Then Exit For
    Set f = Worksheets("Sheet2").Columns(1).Find(s, , xlValues, xlWhole)
    If Not f Is Nothing Then f.EntireRow.Copy Worksheets("Sheet1").Cells(i, 1)
  Next
End Sub
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

MindHunter
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 4
Зарегистрирован: 08.10.2004 (Пт) 0:58
Откуда: Землянин

Сообщение MindHunter » 08.10.2004 (Пт) 14:52

Спасибо большое!!! Работает. Безупречно.
Если нетрудно, напиши пожалста комментарии. Инетерсно как работает. я половину примерно догнал :), а концовку как то не очень....

С меня 100 грамм и пончик.
If you gaze for long into an abyss, the abyss gazes also into you.

Чудик
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 639
Зарегистрирован: 06.07.2004 (Вт) 12:18
Откуда: г. Егорьевск

Сообщение Чудик » 08.10.2004 (Пт) 14:59

А смысл привязки к таким командам как Copy или Paste? Нельзя просто приравнять:

Sheets(2).Rows(1).Value = Sheets(1).Rows(1).Value

тогда значение первого ряда первого листа будет передано в первый ряд второго листа. Соответствено, вместо единицы можно поставить перменную (например, i) - и тоже будет работать. Нет?
Век живи - век учись!
www.detal-plast.narod.ru

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 08.10.2004 (Пт) 15:20

Приравнять можно. Форматирование слетит.

Комментирую.
Код: Выделить всё
Sub Macro1()
  Dim i As Long, f As Range, s As String
 
  'Цикл по всем строкам листа от 1 до последней использованной
  For i = 1 To Worksheets("Sheet1").UsedRange.Rows.Count
    'Сохраняем, чтобы потом лишний раз не дёргать объект worksheet
    s = Worksheets("Sheet1").Cells(i, 1).Value
    'А вдруг у тебя там столбец 1 заканчивается раньше остальных?
    If Len(s) = 0 Then Exit For
    'То, что запомнили, поищем в столбце второго листа.
    Set f = Worksheets("Sheet2").Columns(1).Find(s, , xlValues, xlWhole)
    'Если нашли, копируем строку. Если не нашли, переходим к следующей.
    If Not f Is Nothing Then f.EntireRow.Copy Worksheets("Sheet1").Cells(i, 1)
  Next
End Sub
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Sergo
Начинающий
Начинающий
 
Сообщения: 13
Зарегистрирован: 07.05.2002 (Вт) 19:04

Сообщение Sergo » 10.10.2004 (Вс) 23:47

Для этой задачи можно использовать функцию ВПР вместо макроса

MindHunter
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 4
Зарегистрирован: 08.10.2004 (Пт) 0:58
Откуда: Землянин

Сообщение MindHunter » 10.10.2004 (Вс) 23:51

GSerg - спасибо все понял худо бедно!!!

Sergo - поясни плиз! что это ВПР? кк это работает? ни хрена не знаю, но быстро учусь!
If you gaze for long into an abyss, the abyss gazes also into you.

Sergo
Начинающий
Начинающий
 
Сообщения: 13
Зарегистрирован: 07.05.2002 (Вт) 19:04

Сообщение Sergo » 11.10.2004 (Пн) 21:45

Функция ВПР
Ищет значение в крайнем левом столбце таблицы и возвращает значение в той же строке из указанного столбца таблицы

В твоём случае в столбец на листе1 в который нужно вставить инфу из столбца N листа2 вставляшь формулу

=ВПР(RC1;Лист2!C1:C100;N;ЛОЖЬ)

(допущение: искомые значения находятся в 1 столбце листа1)
N поменяй на реальный номер

читай хелп по этой функции

Вяч Вяч
Начинающий
Начинающий
 
Сообщения: 1
Зарегистрирован: 04.03.2005 (Пт) 23:35

Если нашли, копируем строку. Если не нашли, переходим к след

Сообщение Вяч Вяч » 04.03.2005 (Пт) 23:44

Может подскажете как зделать немного по другому.

Если нашли, копируем строку. Если не нашли, добавить в список, переходим к следующей.
:roll:

vrodo
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 109
Зарегистрирован: 09.10.2003 (Чт) 18:45
Откуда: Дубна МО, Москва

Сообщение vrodo » 09.03.2005 (Ср) 11:12

Привет всем
У меня была подобная ситуация
Решил следующим образом
Код: Выделить всё
Dim rng As Range
Dim ws As Worksheet
Set ws = Application.ThisWorkbook.Worksheets("лист1")

Set rng = ws.Range("A1").End(xlDown).Range("A1").Next(2, 0)


теперь переменную rng ты можешь использовать как метку т.е.
Копируешь то что тебе надо и делаешь
Код: Выделить всё
rng.Insert


Вроде все
Чтобы понять свои ошибки их достаточно написать (c)
Интернет большой, ему видней
С наилучшими Пожеланиями и Всех Благ :D


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: PetalBot и гости: 1

    TopList