Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Сумму соседних ячеек значения из буфера копировать на лист2 - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Сумму соседних ячеек значения из буфера копировать на лист2
timo64uk Дата: Воскресенье, 29.09.2024, 11:25 | Сообщение № 1
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 100
Репутация: 1 ±
Замечаний: 0% ±

Office16
День добрый.
На листе База в столбце А содержатся данные для поиска, в столбце В числа Прошу вашего содействия в решении задачи предполагающей, если при открытой книге в конкретном листе Результат (не открытом) в буфер обмена "внести" (Ctrl+C) данные для поиска, то макрос бы автоматически прошелся по столбцу А листа База и просуммировал соседние с найденным значением числа столбца В. А результат (сумму) вписал в лист Результат в соседнюю справа ячейку от ячейки содержащей Итого:. Например: копирую слово Иванов и запускаю макрос из книги макросов на рабочем столе, код суммирует 2,05+5+6 и результат 13,05 вставляет в лист Результат в ячейку E6, т.к. рядом в ячейке D6 (постоянен только столбец D) находится Итог:
Названия листов постоянны.
К буферу обмена привязался ,т.к. это экономит время.
К сообщению приложен файл: 88888.xlsx (9.9 Kb)
 
Ответить
СообщениеДень добрый.
На листе База в столбце А содержатся данные для поиска, в столбце В числа Прошу вашего содействия в решении задачи предполагающей, если при открытой книге в конкретном листе Результат (не открытом) в буфер обмена "внести" (Ctrl+C) данные для поиска, то макрос бы автоматически прошелся по столбцу А листа База и просуммировал соседние с найденным значением числа столбца В. А результат (сумму) вписал в лист Результат в соседнюю справа ячейку от ячейки содержащей Итого:. Например: копирую слово Иванов и запускаю макрос из книги макросов на рабочем столе, код суммирует 2,05+5+6 и результат 13,05 вставляет в лист Результат в ячейку E6, т.к. рядом в ячейке D6 (постоянен только столбец D) находится Итог:
Названия листов постоянны.
К буферу обмена привязался ,т.к. это экономит время.

Автор - timo64uk
Дата добавления - 29.09.2024 в 11:25
i691198 Дата: Воскресенье, 29.09.2024, 13:33 | Сообщение № 2
Группа: Проверенные
Ранг: Обитатель
Сообщений: 342
Репутация: 109 ±
Замечаний: 0% ±

Здравствуйте. Попробуйте такой код.
[vba]
Код
Sub SumClip()
   Dim x As String, Cl As Range, Sm As Double
   With GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
     .GetFromClipboard
     x = WorksheetFunction.Clean(.GetText(1))
   End With
   For Each Cl In Sheets("База").Range("A2:A100")
     If Cl = x Then Sm = Sm + Cl.Offset(, 1)
   Next
   Sheets("Результат").Range("E6") = Sm
End Sub
[/vba]
 
Ответить
СообщениеЗдравствуйте. Попробуйте такой код.
[vba]
Код
Sub SumClip()
   Dim x As String, Cl As Range, Sm As Double
   With GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
     .GetFromClipboard
     x = WorksheetFunction.Clean(.GetText(1))
   End With
   For Each Cl In Sheets("База").Range("A2:A100")
     If Cl = x Then Sm = Sm + Cl.Offset(, 1)
   Next
   Sheets("Результат").Range("E6") = Sm
End Sub
[/vba]

Автор - i691198
Дата добавления - 29.09.2024 в 13:33
Gustav Дата: Воскресенье, 29.09.2024, 17:22 | Сообщение № 3
Группа: Админы
Ранг: Участник клуба
Сообщений: 2797
Репутация: 1161 ±
Замечаний: ±

начинал с Excel 4.0, видел 2.1
For Each Cl In Sheets("База").Range("A2:A100")
    If Cl = x Then Sm = Sm + Cl.Offset(, 1)
Next

А цикл-то зачем? Есть же аналог функции СУММЕСЛИ в WorksheetFunction:
[vba]
Код
Sub SumClip()
Dim x As String, Cl As Range, Sm As Double
With GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
    .GetFromClipboard
    x = WorksheetFunction.Clean(.GetText(1))
End With
Set Cl = Sheets("База").Range("A2:A100")
Sheets("Результат").Range("E6") = WorksheetFunction.SumIf(Cl, x, Cl.Offset(, 1))
End Sub
[/vba]


МОИ: Ник, Tip box: 41001663842605
 
Ответить
Сообщение
For Each Cl In Sheets("База").Range("A2:A100")
    If Cl = x Then Sm = Sm + Cl.Offset(, 1)
Next

А цикл-то зачем? Есть же аналог функции СУММЕСЛИ в WorksheetFunction:
[vba]
Код
Sub SumClip()
Dim x As String, Cl As Range, Sm As Double
With GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
    .GetFromClipboard
    x = WorksheetFunction.Clean(.GetText(1))
End With
Set Cl = Sheets("База").Range("A2:A100")
Sheets("Результат").Range("E6") = WorksheetFunction.SumIf(Cl, x, Cl.Offset(, 1))
End Sub
[/vba]

Автор - Gustav
Дата добавления - 29.09.2024 в 17:22
timo64uk Дата: Понедельник, 30.09.2024, 02:55 | Сообщение № 4
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 100
Репутация: 1 ±
Замечаний: 0% ±

Office16
Sheets("Результат").Range("E6") = Sm

Спасибо. type mismatch в сообщении предупреждает и подсвечивает, вероятно я что-то не то сделал, т.к. вчера со своим кодом мучался и схожая ошибка выскакивала
[vba]
Код
Sm = Sm + Cl.Offset(, 1)
[/vba]
Sheets("Результат").Range("E6") = WorksheetFunction.SumIf(Cl, x, Cl.Offset(, 1))

Спасибо
[vba]
Код
Sheets("Результат").Range("E6") = WorksheetFunction.SumIf(Cl, x, Cl.Offset(, 1))
[/vba]
здесь идет вставка в ячейку E6 без учета Итог:
Я допустил ошибку в описании, сказав что (постоянен только столбец D), где находится Итог:, но имел ввиду, что Итог: может находится только в этом столбце D, а так то Итог: перемещается от D3 до D999999. Прошу прощения. Учту.


Сообщение отредактировал timo64uk - Понедельник, 30.09.2024, 02:56
 
Ответить
Сообщение
Sheets("Результат").Range("E6") = Sm

Спасибо. type mismatch в сообщении предупреждает и подсвечивает, вероятно я что-то не то сделал, т.к. вчера со своим кодом мучался и схожая ошибка выскакивала
[vba]
Код
Sm = Sm + Cl.Offset(, 1)
[/vba]
Sheets("Результат").Range("E6") = WorksheetFunction.SumIf(Cl, x, Cl.Offset(, 1))

Спасибо
[vba]
Код
Sheets("Результат").Range("E6") = WorksheetFunction.SumIf(Cl, x, Cl.Offset(, 1))
[/vba]
здесь идет вставка в ячейку E6 без учета Итог:
Я допустил ошибку в описании, сказав что (постоянен только столбец D), где находится Итог:, но имел ввиду, что Итог: может находится только в этом столбце D, а так то Итог: перемещается от D3 до D999999. Прошу прощения. Учту.

Автор - timo64uk
Дата добавления - 30.09.2024 в 02:55
i691198 Дата: Понедельник, 30.09.2024, 19:11 | Сообщение № 5
Группа: Проверенные
Ранг: Обитатель
Сообщений: 342
Репутация: 109 ±
Замечаний: 0% ±

timo64uk, Последнюю строку кода нужно изменить. Вместо [vba]
Код
Sheets("Результат").Range("E6") = . . .
[/vba] записать [vba]
Код
Sheets("Результат").Range("D:D").Find(What:="Итог*").Offset(, 1) = . . .
[/vba]
 
Ответить
Сообщениеtimo64uk, Последнюю строку кода нужно изменить. Вместо [vba]
Код
Sheets("Результат").Range("E6") = . . .
[/vba] записать [vba]
Код
Sheets("Результат").Range("D:D").Find(What:="Итог*").Offset(, 1) = . . .
[/vba]

Автор - i691198
Дата добавления - 30.09.2024 в 19:11
timo64uk Дата: Вторник, 01.10.2024, 03:08 | Сообщение № 6
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 100
Репутация: 1 ±
Замечаний: 0% ±

Office16
записать

Спасибо.
Пополню свою коллекцию двумя вариантами
 
Ответить
Сообщение
записать

Спасибо.
Пополню свою коллекцию двумя вариантами

Автор - timo64uk
Дата добавления - 01.10.2024 в 03:08
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!