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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 31.07.2017, 11:31   #1
Ksiname
Новичок
Джуниор
 
Регистрация: 31.07.2017
Сообщений: 2
По умолчанию Конкатенация по условию

Добрый день
Есть таблица со списком компонентов. Параметры компонентов заданы в разных столбцах. Нужно объединить все параметры из разных столбцов в один(Для приведённой таблицы первые четыре столбца). Для этого я пытался использовать конкатенацию. Особенность в том, что для параметры нужно объединить через "-". Но в случае если этот параметр у элемента пустой, то "-" добавлять не надо. И что-то тут у меня с этим проблемы. Задачу решил писать на VBA, что называется в лоб и что-то у меня возникли проблемы. Вот как пытался решить:
#
Код:
Sub Macross_select()

    Num_Row = ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Row
    Num = 2
    
    For i = Range.Cells(2, 1) To Range.Cells(Num_Row, 1)
        If Cells(Num, 2) = "" Then
            Cells(Num, 1) = Cells(Num, 1) & "-" & Cells(Num, 3) & Cells(Num, 4)
        ElseIf Cells(Num, 3) = "" Then
            Cells(Num, 1) = Cells(Num, 1) & "-" & Cells(Num, 2) & Cells(Num, 4)
        ElseIf Range.Cells(Cells(Num, 2), Cells(Num, 3)) = "" Then
            Cells(Num, 1) = Cells(Num, 1) & Cells(Num, 4)
        Else
            Cells(Num, 1) = Cells(Num, 1) & "-" & Cells(Num, 2) & "-" & Cells(Num, 3) & Cells(Num, 4)
        End If
        Num = Num + 1
    Next
 
End Sub
#
Изображения
Тип файла: jpg VBA_BOM.jpg (76.5 Кб, 103 просмотров)

Последний раз редактировалось Ksiname; 31.07.2017 в 11:34.
Ksiname вне форума Ответить с цитированием
Старый 31.07.2017, 11:48   #2
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Вариант
Код:
Sub Macross_select()

    num_row = ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Row
    Num = 2
    
    For i = 2 To num_row
        rez = Cells(i, 1) & "-" & Cells(i, 2) & "-" & Cells(i, 3) & "-" & Cells(i, 4)
        Do While InStr(rez, "--") > 0
            rez = Replace(rez, "--", "-")
        Loop
        Do While Left(rez, 1) = "-"
            rez = Mid(rez, 2)
        Loop
        Do While Right(rez, 1) = "-"
            rez = Mid(rez, 1, Len(rez) - 1)
        Loop
        Cells(i, 8) = rez
    Next
 
End Sub
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 31.07.2017, 11:54   #3
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Код:
Sub JoinParametrs()
  Dim r&, s$
  For r = 2 To Cells(Rows.Count, 1).End(xlUp).Row
    s = Join(WorksheetFunction.Transpose(WorksheetFunction.Transpose(Cells(r, 1).Resize(1, 5).Value)), "-")
    Do While InStr(s, "--") > 0: s = Replace(s, "--", "-"): Loop
    Cells(r, 1) = iif(Right(s, 1) = "-",Left(s, Len(s)-1,s))
  Next
End Sub
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете

Последний раз редактировалось IgorGO; 31.07.2017 в 12:24.
IgorGO вне форума Ответить с цитированием
Старый 31.07.2017, 12:02   #4
Ksiname
Новичок
Джуниор
 
Регистрация: 31.07.2017
Сообщений: 2
По умолчанию

Цитата:
Сообщение от Aleksandr H. Посмотреть сообщение
Вариант
Код:
Sub Macross_select()

    num_row = ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Row
    Num = 2
    
    For i = 2 To num_row
        rez = Cells(i, 1) & "-" & Cells(i, 2) & "-" & Cells(i, 3) & "-" & Cells(i, 4)
        Do While InStr(rez, "--") > 0
            rez = Replace(rez, "--", "-")
        Loop
        Do While Left(rez, 1) = "-"
            rez = Mid(rez, 2)
        Loop
        Do While Right(rez, 1) = "-"
            rez = Mid(rez, 1, Len(rez) - 1)
        Loop
        Cells(i, 8) = rez
    Next
 
End Sub
Заработало, спасибо большое
Ksiname вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
конкатенация с++ dima1257 Помощь студентам 2 29.06.2013 13:34
конкатенация Darlee БД в Delphi 2 20.04.2012 18:24
конкатенация LPSTR SNUPY Visual C++ 5 10.02.2011 17:23
конкатенация строк larry Win Api 3 26.07.2009 08:22