Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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


Донат для форума - использовать для поднятия настроения себе и модераторам

А ещё здесь можно купить рекламу за 25 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru

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

Добрый день
Есть таблица со списком компонентов. Параметры компонентов заданы в разных столбцах. Нужно объединить все параметры из разных столбцов в один(Для приведённой таблицы первые четыре столбца). Для этого я пытался использовать конкатенацию. Особенность в том, что для параметры нужно объединить через "-". Но в случае если этот параметр у элемента пустой, то "-" добавлять не надо. И что-то тут у меня с этим проблемы. Задачу решил писать на 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
#
Миниатюры
Нажмите на изображение для увеличения
Название: VBA_BOM.jpg
Просмотров: 44
Размер:	76.5 Кб
ID:	89056  

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

Вариант
Код:
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
__________________
Mailto: media.project@ukr.net
Aleksandr H. вне форума   Ответить с цитированием
Старый 31.07.2017, 12:54   #3
IgorGO
МегаМодератор
СуперМодератор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Адрес: УКРАЇНА, Київ
Сообщений: 9,174
Репутация: 1811

icq: 7934250
skype: i2x0,5
По умолчанию

Код:
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
__________________
41001804815208 - Яндекс-деньги благодарности за удачные советы и решения можно отправлять прямо сюда)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете

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

Цитата:
Сообщение от 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 вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

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


17:25.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.