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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.12.2011, 22:47   #1
Snekich
Форумчанин
 
Аватар для Snekich
 
Регистрация: 19.11.2011
Сообщений: 128
По умолчанию Исправить ошибку в функции: сцепить с условием

Помогите пожалуйста исправить ошибку в функции.

Код:
Option Explicit
Public Function Conc$(c As Range, x As Integer)
    If c.Value = "" Then Exit Function
    If Range(c, c.End(xlDown).Offset(-1)).Offset(, x).Count = 1 Then Conc = c.Offset(, x): Exit Function
    Conc = Trim(Join(Application.Transpose(Range(c, c.End(xlDown).Offset(-1)).Offset(, x).Value), " "))
End Function
Функция Conc имеет вид:
=Conc(А9;2)
где:
A9 - ячейка по которой идет проверка на наличие какого-либо значения
2 - количество столбцов направо от A9. Определяет столбец в котором производить объединение текста в ячейках пока в столбце после А9 будут пустые ячейки.

Пример работы функции в файле на листе "Функция".

Но в этой функции есть ошибка.

Если в проверяемом столбце (столбец "В") после не пустой ячейки "В7" подряд две и более не пустых ячеек ("В8" и "В9"), то вместо того что бы в ячейке с формулой вписать только значение "С7", формула вписывает значения "С7" + "С8" + "С9".

Помогите пожалуйста исправить функцию.
Ячейки, в которых неверный результат я выделил желтым цветом.

P.S.
Я уже перепробовал несколько вариантов исправить, но после моего вмешательства снановилось только хуже: формула для больших таблиц начинала работать очень медленно.
Вложения
Тип файла: rar Функция.rar (10.6 Кб, 11 просмотров)
Нет ничего невозможного, главное верить в это.

Последний раз редактировалось Snekich; 21.12.2011 в 15:47.
Snekich вне форума Ответить с цитированием
Старый 21.12.2011, 00:17   #2
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

Почему не продолжили тут?
http://programmersforum.ru/showthread.php?t=174301
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Старый 21.12.2011, 00:57   #3
Snekich
Форумчанин
 
Аватар для Snekich
 
Регистрация: 19.11.2011
Сообщений: 128
По умолчанию

Цитата:
Сообщение от Казанский Посмотреть сообщение
Почему не продолжили тут?
http://programmersforum.ru/showthread.php?t=174301
не нашел ее...
Нет ничего невозможного, главное верить в это.
Snekich вне форума Ответить с цитированием
Старый 23.12.2011, 10:23   #4
Snekich
Форумчанин
 
Аватар для Snekich
 
Регистрация: 19.11.2011
Сообщений: 128
По умолчанию

оказывается я сильно ступил сначала. Решение нашел, все элементарно:
Код:
Public Function Conc$(c As Range, x As Integer)
    If c.Value = "" Then Exit Function
    If Range(c, c.Offset()).Offset(1, 0).Value <> "" Then Conc = c.Offset(, x): Exit Function
    Conc = Trim(Join(Application.Transpose(Range(c, c.End(xlDown).Offset(-1)).Offset(, x).Value), " "))
End Function
Нет ничего невозможного, главное верить в это.
Snekich вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
исправить ошибку Дмитрий Solov Паскаль, Turbo Pascal, PascalABC.NET 1 03.12.2011 13:26
С# Исправить ошибку PROkaZZZniK Помощь студентам 3 20.11.2011 22:49
[C] лабораторка. Указатели на функции. Помогите исправить ошибку) KrL^^ Помощь студентам 2 11.03.2009 22:33
Исправить ошибку LLIypLLIyH Помощь студентам 5 16.06.2008 16:50