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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.04.2013, 15:45   #1
Molletta
 
Регистрация: 15.06.2011
Сообщений: 3
По умолчанию Суммирование значение с тире и без

Добрый день.

Уважаемые форумчане, помогите решить следующую задачу.
В столбце "В" в разных ячейках есть значения 1-3 или 2-4 или даже просто 1. Необходимо по поиску двух значений столбце "А" суммировать значения из столбца "В". Например, 1-3 и 2-4 должно быть 3-7, т.е. суммируются первые значения, тире, потом последние значения. А если 1-3 и 1, то должно получиться 2-4, т.е. единичное значение должно плюсоваться и к первому и к последнему.
Вложения
Тип файла: zip пример.zip (15.3 Кб, 16 просмотров)
Molletta вне форума Ответить с цитированием
Старый 30.04.2013, 18:35   #2
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Макрос называется Вперед.
Начало полезных данных вторая строка.
Данные должны быть на первом листе,вывод на второй лист.
Вложения
Тип файла: zip пример.zip (34.3 Кб, 14 просмотров)
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 30.04.2013, 19:15   #3
Molletta
 
Регистрация: 15.06.2011
Сообщений: 3
По умолчанию

Не совсем понимаю как и что он считает... Он только выставляет уже существующие значения. На втором листе поправила данные, которые должны быть на выходе.
Вложения
Тип файла: zip пример.zip (30.1 Кб, 12 просмотров)
Molletta вне форума Ответить с цитированием
Старый 30.04.2013, 19:53   #4
MCH
Форумчанин
 
Регистрация: 21.11.2010
Сообщений: 326
По умолчанию

так нужно?
Вложения
Тип файла: rar пример2.rar (19.4 Кб, 19 просмотров)
MCH вне форума Ответить с цитированием
Старый 30.04.2013, 20:11   #5
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Цитата:
Сообщение от Molletta Посмотреть сообщение
Не совсем понимаю как и что он считает... Он только выставляет уже существующие значения. На втором листе поправила данные, которые должны быть на выходе.
Он считает в соответствии с постом 1.
об Из города В город Сроки речи вообще не было.
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 30.04.2013, 23:11   #6
Molletta
 
Регистрация: 15.06.2011
Сообщений: 3
По умолчанию

MCH, да, огромное спасибо ))) целый день искала нужное ))

Doober, извиняюсь если изначально неверно описала проблему, но предложенный Вами вариант абсолютно ничего не считает, а только переносит всю таблицу на второй лист... Но все равно большое спасибо за участие. Попробую разобраться в Вашем макросе, возможно для чего-то еще пригодится.
Molletta вне форума Ответить с цитированием
Старый 01.05.2013, 01:26   #7
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

1. Учтите, что формула МСН неправильно считает двузначные числа. Из примера
Код:
Агой	Американское Самоа	9-3	3	6-10
Американское Самоа	Аруба	10-4	6-10	4
2. Предложенный Doober вариант суммирует числа повторяющихся значений, например из строк
Код:
Алексеевка	2
Алексеевка	3-6
формирует
Код:
Алексеевка	5-8
exceleved@yandex.ru Яндекс.Деньги: 410011500007619

Последний раз редактировалось Казанский; 01.05.2013 в 02:14.
Казанский вне форума Ответить с цитированием
Старый 01.05.2013, 02:31   #8
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

Написал пользовательскую функцию, которая работает с длинными числами и не требует доп. столбцов:
Код:
Function Molletta(Table As Range, a, b)
a = Application.VLookup(a, Table, 2, 0)
If IsError(a) Then Molletta = a: Exit Function
b = Application.VLookup(b, Table, 2, 0)
If IsError(b) Then Molletta = b: Exit Function
a = Split(a, "-")
b = Split(b, "-")
Select Case UBound(a) + 2 * UBound(b)
Case 0
    Molletta = 0 + a(0) + b(0)
Case 1
    Molletta = 0 + a(0) + b(0) & "-" & 0 + a(1) + b(0)
Case 2
    Molletta = 0 + a(0) + b(0) & "-" & 0 + a(0) + b(1)
Case 3
    Molletta = 0 + a(0) + b(0) & "-" & 0 + a(1) + b(1)
End Select
End Function
Вложения
Тип файла: rar пример3.rar (22.5 Кб, 11 просмотров)
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Старый 01.05.2013, 02:39   #9
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

Или так - менее очевидно, но компактнее
Код:
Function Molletta(Table As Range, a, b)
Dim k%
a = Application.VLookup(a, Table, 2, 0)
If IsError(a) Then Molletta = a: Exit Function
b = Application.VLookup(b, Table, 2, 0)
If IsError(b) Then Molletta = b: Exit Function
a = Split(a, "-")
b = Split(b, "-")
k = UBound(a) + 2 * UBound(b)
Molletta = 0 + a(0) + b(0)
If k Then Molletta = Molletta & "-" & 0 + a(k And 1) + b(k \ 2)
End Function
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Убрать скобки, тире и пробелы 1Hitman1 Паскаль, Turbo Pascal, PascalABC.NET 6 12.03.2013 14:53
Минимальное значение без учета пустых ячеек mrantonio Microsoft Office Excel 4 26.06.2011 14:22
Длинное тире ElenaA Общие вопросы Delphi 4 24.06.2010 09:10
Суммирование значение textbox в форме! Punker1 Microsoft Office Excel 7 05.02.2010 20:27