Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.12.2011, 15:15   #1
Vja4eslav
Пользователь
 
Регистрация: 13.08.2011
Сообщений: 90
По умолчанию сложить значения в диапазонах

Здравствуйте, уважаемые форумчане. Пытаюсь с помощью мароса сложить значения в двух одинаковых диапазонах на разных листах, но макрос не "фурычит". Подскажите, пожалуйста, что я делаю не так. В VBA я самоучка с начальным стажем.
Файл прилагаю.
Вложения
Тип файла: rar ТЕСТ.rar (6.9 Кб, 16 просмотров)
Vja4eslav вне форума Ответить с цитированием
Старый 20.12.2011, 15:57   #2
nilem
Форумчанин
 
Регистрация: 25.04.2010
Сообщений: 616
По умолчанию

Пробуйте так
Код:
Sub Метод_тыка()
Dim i As Long, ARange As Range, BRange As Range
Set ARange = Sheets(1).Range("A1:F23")
Set BRange = Sheets(2).Range("A1:F23")
For i = 1 To ARange.Cells.Count
    BRange.Cells(i).Value = BRange.Cells(i).Value + ARange.Cells(i).Value
Next
End Sub
а лучше так
Код:
Sub Метод_тыка2()
Sheets(1).Range("A1:F23").Copy
Sheets(2).Range("A1").PasteSpecial Paste:=xlValues, Operation:=xlAdd
Application.CutCopyMode = False
End Sub
nilem вне форума Ответить с цитированием
Старый 21.12.2011, 11:01   #3
Vja4eslav
Пользователь
 
Регистрация: 13.08.2011
Сообщений: 90
По умолчанию

Большое спасибо! Сейчас попробую
Vja4eslav вне форума Ответить с цитированием
Старый 21.12.2011, 11:44   #4
Vja4eslav
Пользователь
 
Регистрация: 13.08.2011
Сообщений: 90
По умолчанию

Не мог бы кто- нибудь подсказать, как изменить код, чтобы он работал при разрыве диапазона, т.е., например:
Sub Метод_тыка_2()
Dim i As Long, ARange As Range, BRange As Range
Set ARange = Sheets(1).Range("A1:F1,A3:F3")
Set BRange = Sheets(2).Range("A1:F1,A3:F3")
For i = 1 To ARange.Cells.Count
BRange.Cells(i).Value = BRange.Cells(i).Value + ARange.Cells(i).Value
Next
End Sub
Потому что
For Each x In ARange
For Each y In BRange
If y.Address = x.Address Then y = x + y
Next
Next
почему то не действует

Последний раз редактировалось Vja4eslav; 21.12.2011 в 11:46.
Vja4eslav вне форума Ответить с цитированием
Старый 21.12.2011, 12:21   #5
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

> почему то не действует
Будет действовать, если написать
Код:
        If y.Address = x.Address Then y.Value = x + y
или объявить переменные:
Код:
Dim  x As Range, y As Range
Хотя делать вложенный цикл - это жестоко
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Старый 21.12.2011, 12:24   #6
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

Код:
Sub Метод_тыка_2()
Dim i As Long, ARange As Range, BRange As Range, y As Range
Set BRange = Sheets(2).Range("A1:F1,A3:F3")
For Each y In BRange
    y = y + Sheets(1).Range(y.Address)
Next
End Sub
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Старый 21.12.2011, 13:19   #7
Vja4eslav
Пользователь
 
Регистрация: 13.08.2011
Сообщений: 90
По умолчанию

Спасибо, Казанский! Сейчас попробую
Vja4eslav вне форума Ответить с цитированием
Старый 22.12.2011, 12:01   #8
Vja4eslav
Пользователь
 
Регистрация: 13.08.2011
Сообщений: 90
По умолчанию

Пытаюсь прописать, чтобы макрос считал только те ячейки, в которых находятся числовые значения (т.е. если в ячейке вместо числа будет, например прочерк "-", то значение этой ячейки не суммируется). Однако мой макрос ругается:"несоответствие типа". Что я делаю не так?
Вот мой скрипт:
Sub Метод_тыка_3()
Dim i As Long, ARange As Range, BRange As Range, y As Range
Set BRange = Sheets(2).Range("A1:F1,A3:F3")
For Each y In BRange
If Not IsNumeric(y.Value) Then GoTo lable
y = y + Sheets(1).Range(y.Address)
lable:
Next
End Sub
Vja4eslav вне форума Ответить с цитированием
Старый 22.12.2011, 12:13   #9
kuklp
Участник клуба
 
Регистрация: 02.05.2010
Сообщений: 1,390
По умолчанию

Код:
Set BRange = Sheets(2).Range("A1:F1,A3:F3")
For Each y In BRange.specialcells(2,1).cells
y = y + Sheets(1).Range(y.Address)
Next
mailto: kuklp60@gmail.com, ящики для благодарностей:
WM Z206653985942, R334086032478, U238399322728

Последний раз редактировалось kuklp; 22.12.2011 в 12:19.
kuklp вне форума Ответить с цитированием
Старый 22.12.2011, 12:36   #10
Vja4eslav
Пользователь
 
Регистрация: 13.08.2011
Сообщений: 90
По умолчанию

Большое спасибо, kuklp! Сейчас попробую
Vja4eslav вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
сложить значения в диапазонах Vja4eslav Microsoft Office Excel 1 20.12.2011 17:04
как сложить значения в столбце? Neymexa SQL, базы данных 4 27.04.2010 09:23
Сложить значения в StringGrid zluchka Помощь студентам 3 31.10.2009 17:40
Как сложить текстовые значения? Сергей Яковлевич Microsoft Office Excel 7 10.06.2008 16:57
Как сложить 2 значения из разных БД по ключу Nitti БД в Delphi 1 04.05.2007 12:58