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

Вход

Регистрация

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

 

= Мир MS Excel/Вставить в ячейку слова из перечисленных в столбце - Мир MS Excel

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

Office16
В столбце В есть ячейки содержащие "значения-слова" целиком (без лишних символов и пробелов).
Нужно уникальные "значения-слова" вставить через запятую + пробел (кроме последнего или кроме случая, если значение-слово одно) в столбец F во вторую строку после последней заполненной ячейки в этом же F столбце.
значения-слова известны и неизменны: "A";"AB...AP";"GH";"I";"KK";"L";"MC2-MN2-MN3-MN4-MP2-MU2-MZ2-MA2-MC7-MP7";"M";"NN";"W"
Пытался через формулу СУММЕСЛИ
Код
=ЕСЛИОШИБКА(СУММ(СУММЕСЛИ(B:B;{"A";"AB...AP";"GH";"I";"KK";"L";"MC2-MN2-MN3-MN4-MP2-MU2-MZ2-MA2-MC7-MP7";"M";"NN";"W"};B:B));"")
. Прошу вашей помощи.
К сообщению приложен файл: 01010111.xlsx (229.7 Kb)
 
Ответить
СообщениеВ столбце В есть ячейки содержащие "значения-слова" целиком (без лишних символов и пробелов).
Нужно уникальные "значения-слова" вставить через запятую + пробел (кроме последнего или кроме случая, если значение-слово одно) в столбец F во вторую строку после последней заполненной ячейки в этом же F столбце.
значения-слова известны и неизменны: "A";"AB...AP";"GH";"I";"KK";"L";"MC2-MN2-MN3-MN4-MP2-MU2-MZ2-MA2-MC7-MP7";"M";"NN";"W"
Пытался через формулу СУММЕСЛИ
Код
=ЕСЛИОШИБКА(СУММ(СУММЕСЛИ(B:B;{"A";"AB...AP";"GH";"I";"KK";"L";"MC2-MN2-MN3-MN4-MP2-MU2-MZ2-MA2-MC7-MP7";"M";"NN";"W"};B:B));"")
. Прошу вашей помощи.

Автор - timo64uk
Дата добавления - 12.11.2024 в 10:04
and_evg Дата: Вторник, 12.11.2024, 10:14 | Сообщение № 2
Группа: Проверенные
Ранг: Обитатель
Сообщений: 465
Репутация: 79 ±
Замечаний: 0% ±

Excel 2007
 
Ответить
СообщениеЕще раз добрый день ))
посмотрите здесь (на VBA)
Конкатенация уникальных значений из диапазона в строку с разделителем

Автор - and_evg
Дата добавления - 12.11.2024 в 10:14
timo64uk Дата: Вторник, 12.11.2024, 10:33 | Сообщение № 3
Группа: Пользователи
Ранг: Участник
Сообщений: 94
Репутация: 1 ±
Замечаний: 0% ±

Office16
здесь

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

Функции тяжело даются мне.

Автор - timo64uk
Дата добавления - 12.11.2024 в 10:33
and_evg Дата: Вторник, 12.11.2024, 11:32 | Сообщение № 4
Группа: Проверенные
Ранг: Обитатель
Сообщений: 465
Репутация: 79 ±
Замечаний: 0% ±

Excel 2007
См. Красную ячейку
К сообщению приложен файл: 01010111_1.xlsm (240.3 Kb)
 
Ответить
СообщениеСм. Красную ячейку

Автор - and_evg
Дата добавления - 12.11.2024 в 11:32
timo64uk Дата: Среда, 13.11.2024, 04:48 | Сообщение № 5
Группа: Пользователи
Ранг: Участник
Сообщений: 94
Репутация: 1 ±
Замечаний: 0% ±

Office16
Красную ячейку

Спасибо большое.
Ячейку для ввода формулы определяю так: [vba]
Код
With Cells(Cells.Rows.Count, 3).End(xlUp).Offset(3, 3)
    .FormulaR1C1 = "=@JoinWithoutDuplicates(R[-22]C[-4]:RC[-4],"", "")"  
    .Copy
    .PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
    End With
[/vba]
Функция отрабатывает чётко, но я не могу учесть верхнюю (R[-22]C[-4]) и нижнюю (RC[-4]) ячейки массива для формулы, т.к. иногда "борода" в рабочем файле имеет различное количество строк.
Сейчас попробую через переменные, с последующей подставкой в тело формулы (вчера похожее делал с разбиением формулы на несколько частей, типа: [vba]
Код
a="=СУММ("
b="адрес_верхней_ячейки"
c=":"
d="адрес_нижней_ячейки"
e=")"
[/vba]
***
Всё проще решилось [vba]
Код
.FormulaLocal = "=@JoinWithoutDuplicates(B" & PerYa + 1 & ":B" & PosYa & ";"", "")"
[/vba] предварительно назначив переменным PerYa и PosYa первую и последнюю строки массива.
Спасибо за помощь.


Сообщение отредактировал timo64uk - Среда, 13.11.2024, 10:47
 
Ответить
Сообщение
Красную ячейку

Спасибо большое.
Ячейку для ввода формулы определяю так: [vba]
Код
With Cells(Cells.Rows.Count, 3).End(xlUp).Offset(3, 3)
    .FormulaR1C1 = "=@JoinWithoutDuplicates(R[-22]C[-4]:RC[-4],"", "")"  
    .Copy
    .PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
    End With
[/vba]
Функция отрабатывает чётко, но я не могу учесть верхнюю (R[-22]C[-4]) и нижнюю (RC[-4]) ячейки массива для формулы, т.к. иногда "борода" в рабочем файле имеет различное количество строк.
Сейчас попробую через переменные, с последующей подставкой в тело формулы (вчера похожее делал с разбиением формулы на несколько частей, типа: [vba]
Код
a="=СУММ("
b="адрес_верхней_ячейки"
c=":"
d="адрес_нижней_ячейки"
e=")"
[/vba]
***
Всё проще решилось [vba]
Код
.FormulaLocal = "=@JoinWithoutDuplicates(B" & PerYa + 1 & ":B" & PosYa & ";"", "")"
[/vba] предварительно назначив переменным PerYa и PosYa первую и последнюю строки массива.
Спасибо за помощь.

Автор - timo64uk
Дата добавления - 13.11.2024 в 04:48
timo64uk Дата: Четверг, 14.11.2024, 10:41 | Сообщение № 6
Группа: Пользователи
Ранг: Участник
Сообщений: 94
Репутация: 1 ±
Замечаний: 0% ±

Office16
добрый день

Очень пытался подружиться с функциями. Разнес их по разным модулям. Вчера отрабатывало все отлично, а сегодня формула, содержащая функцию работает лишь в файле с модулями функции (и макроса), а когда работаю в простом .xlsx и вызываю функцию из стороннего файла "каталога макросов", то функция не подтягивается. Перезагружался...
Вероятно я что-либо не так делаю.
Либо через надстройки нужно запускать, подскажите, пожалуйста?
 
Ответить
Сообщение
добрый день

Очень пытался подружиться с функциями. Разнес их по разным модулям. Вчера отрабатывало все отлично, а сегодня формула, содержащая функцию работает лишь в файле с модулями функции (и макроса), а когда работаю в простом .xlsx и вызываю функцию из стороннего файла "каталога макросов", то функция не подтягивается. Перезагружался...
Вероятно я что-либо не так делаю.
Либо через надстройки нужно запускать, подскажите, пожалуйста?

Автор - timo64uk
Дата добавления - 14.11.2024 в 10:41
i691198 Дата: Четверг, 14.11.2024, 11:31 | Сообщение № 7
Группа: Проверенные
Ранг: Обитатель
Сообщений: 337
Репутация: 108 ±
Замечаний: 0% ±

timo64uk, Добрый день. Вам нужно перенести модуль VBA из файла с функцией в ваш файл. Открываете оба файла, нажимаете ALT+F11, в окне VBA в правом окне под именем файла с функцией увидите "Модуль 1". Наведите на него курсор, зажмите ЛКМ и перетащите на ваш новый файл. Все, эта фукция будет в вашем файле, не забудьте сохранить его в формате с поддержкой макросов.
 
Ответить
Сообщениеtimo64uk, Добрый день. Вам нужно перенести модуль VBA из файла с функцией в ваш файл. Открываете оба файла, нажимаете ALT+F11, в окне VBA в правом окне под именем файла с функцией увидите "Модуль 1". Наведите на него курсор, зажмите ЛКМ и перетащите на ваш новый файл. Все, эта фукция будет в вашем файле, не забудьте сохранить его в формате с поддержкой макросов.

Автор - i691198
Дата добавления - 14.11.2024 в 11:31
Hugo Дата: Четверг, 14.11.2024, 12:00 | Сообщение № 8
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3690
Репутация: 790 ±
Замечаний: 0% ±

365
timo64uk,
Удобнее переносить модуль с кодом не в свой файл (где будете использовать), а вот именно в подключенную НАДСТРОЙКУ - тогда сможете использовать всюду (у себя) как любую встроенную функцию.


webmoney: E265281470651 Z422237915069
USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD


Сообщение отредактировал Hugo - Четверг, 14.11.2024, 12:00
 
Ответить
Сообщениеtimo64uk,
Удобнее переносить модуль с кодом не в свой файл (где будете использовать), а вот именно в подключенную НАДСТРОЙКУ - тогда сможете использовать всюду (у себя) как любую встроенную функцию.

Автор - Hugo
Дата добавления - 14.11.2024 в 12:00
timo64uk Дата: Пятница, 15.11.2024, 11:10 | Сообщение № 9
Группа: Пользователи
Ранг: Участник
Сообщений: 94
Репутация: 1 ±
Замечаний: 0% ±

Office16
Спасибо за пояснения.
Прошу с кодом помочь. На основе двух недавно рассмотренных на данном форуме, в рамках данной темы.
[vba]
Код
    Dim r1_ As Variant  ' номер строки по столбцу 3 последний заполненный
    Dim au As Variant  'массив в столбце В из которого выбираем значения
    Dim bu As Variant   'разделитель ", " после вставки в eu
    Dim eu As Variant ' ячейка для вставки уникальных значений из массива столбца С
    Dim cu As Variant, du As Variant 
    ActiveSheet.UsedRange 'сбросить результат с последней ячейкой, строкой
    r1_ = Cells(Rows.Count, 3).End(xlUp).Row 'номер последней используемой строки
    ar_ = Cells(1, 3).Resize(r1_).Value 'в массив все от С1 вниз на r1_
    t_ = "от Заказчика / Owner" 'текст для поиска
    For i = r1_ To 1 Step -1 'цикл от r1_ до 1
        If ar_(i, 1) = t_ Then 'если элемент массива с номером i равен тексту для поиска
            fl_ = 1 'флаг равен 1
            au = Cells(i + 1, 2).Resize(r1_ - i) '.Select 'здесь ???
            Exit For 'Заканчиваем цикл
        End If ' окончание if
    Next i 'окончание цикла
    If fl_ <> 1 Then 'если флаг не =1 (мы не нашли искомый текст)
        MsgBox "Текст ''" & t_ & "'' не найден в столбце С." 'выводим об этом сообщение
    End If '
    bu = ", "    'если в подряд  bu = ", "   а , если в столбец в одну ячейку, как в реестр bu = "," & Chr(10)
    eu = ""
    For Each cu In au '.Rows '.Cells    'здесь ??? For Each cu In Range("C8:C" & au).SpecialCells(xlCellTypeConstants, 23)
    du = cu.Row
    If du = r1_ Then bu = ""
    eu = eu & cu.Value & bu
    Next
    eu = Cells(Cells.Rows.Count, 3).End(xlUp).Offset(3, 3)
[/vba]
Не могу эту строку победить For Each cu In au (в остальном, конечно тоже не очень уверен, но тут прям перепробовал всё известное). Он пока не убирает дубли (под это у меня есть 3ий код не адаптированный ещё.


Сообщение отредактировал timo64uk - Пятница, 15.11.2024, 11:15
 
Ответить
СообщениеСпасибо за пояснения.
Прошу с кодом помочь. На основе двух недавно рассмотренных на данном форуме, в рамках данной темы.
[vba]
Код
    Dim r1_ As Variant  ' номер строки по столбцу 3 последний заполненный
    Dim au As Variant  'массив в столбце В из которого выбираем значения
    Dim bu As Variant   'разделитель ", " после вставки в eu
    Dim eu As Variant ' ячейка для вставки уникальных значений из массива столбца С
    Dim cu As Variant, du As Variant 
    ActiveSheet.UsedRange 'сбросить результат с последней ячейкой, строкой
    r1_ = Cells(Rows.Count, 3).End(xlUp).Row 'номер последней используемой строки
    ar_ = Cells(1, 3).Resize(r1_).Value 'в массив все от С1 вниз на r1_
    t_ = "от Заказчика / Owner" 'текст для поиска
    For i = r1_ To 1 Step -1 'цикл от r1_ до 1
        If ar_(i, 1) = t_ Then 'если элемент массива с номером i равен тексту для поиска
            fl_ = 1 'флаг равен 1
            au = Cells(i + 1, 2).Resize(r1_ - i) '.Select 'здесь ???
            Exit For 'Заканчиваем цикл
        End If ' окончание if
    Next i 'окончание цикла
    If fl_ <> 1 Then 'если флаг не =1 (мы не нашли искомый текст)
        MsgBox "Текст ''" & t_ & "'' не найден в столбце С." 'выводим об этом сообщение
    End If '
    bu = ", "    'если в подряд  bu = ", "   а , если в столбец в одну ячейку, как в реестр bu = "," & Chr(10)
    eu = ""
    For Each cu In au '.Rows '.Cells    'здесь ??? For Each cu In Range("C8:C" & au).SpecialCells(xlCellTypeConstants, 23)
    du = cu.Row
    If du = r1_ Then bu = ""
    eu = eu & cu.Value & bu
    Next
    eu = Cells(Cells.Rows.Count, 3).End(xlUp).Offset(3, 3)
[/vba]
Не могу эту строку победить For Each cu In au (в остальном, конечно тоже не очень уверен, но тут прям перепробовал всё известное). Он пока не убирает дубли (под это у меня есть 3ий код не адаптированный ещё.

Автор - timo64uk
Дата добавления - 15.11.2024 в 11:10
Hugo Дата: Пятница, 15.11.2024, 11:39 | Сообщение № 10
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3690
Репутация: 790 ±
Замечаний: 0% ±

365
au = Cells(i + 1, 2).Resize(r1_ - i)

Нужно
[vba]
Код
set au=
[/vba]
раз там далее смотрите cu.Row


webmoney: E265281470651 Z422237915069
USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD
 
Ответить
Сообщение
au = Cells(i + 1, 2).Resize(r1_ - i)

Нужно
[vba]
Код
set au=
[/vba]
раз там далее смотрите cu.Row

Автор - Hugo
Дата добавления - 15.11.2024 в 11:39
timo64uk Дата: Пятница, 15.11.2024, 12:00 | Сообщение № 11
Группа: Пользователи
Ранг: Участник
Сообщений: 94
Репутация: 1 ±
Замечаний: 0% ±

Office16
Нужно
Спасибо.
И только что открыл, что [vba]
Код
eu = Cells(Cells.Rows.Count, 3).End(xlUp).Offset(3, 3)
[/vba] не равно [vba]
Код
Cells(Cells.Rows.Count, 3).End(xlUp).Offset(3, 3) = eu
[/vba] во втором случае получается результат
 
Ответить
Сообщение
Нужно
Спасибо.
И только что открыл, что [vba]
Код
eu = Cells(Cells.Rows.Count, 3).End(xlUp).Offset(3, 3)
[/vba] не равно [vba]
Код
Cells(Cells.Rows.Count, 3).End(xlUp).Offset(3, 3) = eu
[/vba] во втором случае получается результат

Автор - timo64uk
Дата добавления - 15.11.2024 в 12:00
_Boroda_ Дата: Пятница, 15.11.2024, 12:44 | Сообщение № 12
Группа: Админы
Ранг: Местный житель
Сообщений: 16714
Репутация: 6503 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
[vba]
Код
Sub tt()
    ActiveSheet.UsedRange
    r1_ = Cells(Rows.Count, 3).End(xlUp).Row
    ar_ = Cells(1, 3).Resize(r1_).Value
    t_ = "от Заказчика / Owner"
    For i = r1_ To 1 Step -1
        If ar_(i, 1) = t_ Then
            If i < r1_ Then
                nr_ = r1_ - i
                fl_ = 1
                ar1_ = Cells(i + 1, 2).Resize(nr_).Value
                del_ = ", "
                Set slov = CreateObject("scripting.dictionary")
                With slov
                    For j = 1 To UBound(ar1_)
                        z_ = ar1_(j, 1)
                        If z_ <> "" Then
                            If Not .exists(z_) Then
                    aaa = .Item(z_)
                            End If
                        End If
                    Next j
                    x_ = Join(.keys, del_)
                End With
                Cells(r1_ + 3, 6) = x_
            End If
            Exit For
        End If
    Next i
    If fl_ <> 1 Then
        MsgBox "Текст ''" & t_ & "'' не найден в столбце С."
        Exit Sub
    End If    '
End Sub
[/vba]


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
Сообщение[vba]
Код
Sub tt()
    ActiveSheet.UsedRange
    r1_ = Cells(Rows.Count, 3).End(xlUp).Row
    ar_ = Cells(1, 3).Resize(r1_).Value
    t_ = "от Заказчика / Owner"
    For i = r1_ To 1 Step -1
        If ar_(i, 1) = t_ Then
            If i < r1_ Then
                nr_ = r1_ - i
                fl_ = 1
                ar1_ = Cells(i + 1, 2).Resize(nr_).Value
                del_ = ", "
                Set slov = CreateObject("scripting.dictionary")
                With slov
                    For j = 1 To UBound(ar1_)
                        z_ = ar1_(j, 1)
                        If z_ <> "" Then
                            If Not .exists(z_) Then
                    aaa = .Item(z_)
                            End If
                        End If
                    Next j
                    x_ = Join(.keys, del_)
                End With
                Cells(r1_ + 3, 6) = x_
            End If
            Exit For
        End If
    Next i
    If fl_ <> 1 Then
        MsgBox "Текст ''" & t_ & "'' не найден в столбце С."
        Exit Sub
    End If    '
End Sub
[/vba]

Автор - _Boroda_
Дата добавления - 15.11.2024 в 12:44
timo64uk Дата: Суббота, 16.11.2024, 02:42 | Сообщение № 13
Группа: Пользователи
Ранг: Участник
Сообщений: 94
Репутация: 1 ±
Замечаний: 0% ±

Office16
If z_ <> ""

Спасибо большое.
Думал как не воспринимать пустые ячейки из массива-донора, а то лишние запятые-пробелы из "моего" кода вылазили.
***

Сейчас перечитал тему и не обнаружил упоминаний о том, что слов-индикаторов (из примера это "от Заказчика / Owner") может быть несколько, определяющих верхнюю границу массива для отбора значений. И ранее мне известные способы определения данного массива не подходили, т.к. выбирали самое верхнее слово-индикатор. Однако все коды представленные в теме выбирают именно нужный массив. Спасибо ещё раз всем.


Сообщение отредактировал timo64uk - Суббота, 16.11.2024, 03:25
 
Ответить
Сообщение
If z_ <> ""

Спасибо большое.
Думал как не воспринимать пустые ячейки из массива-донора, а то лишние запятые-пробелы из "моего" кода вылазили.
***

Сейчас перечитал тему и не обнаружил упоминаний о том, что слов-индикаторов (из примера это "от Заказчика / Owner") может быть несколько, определяющих верхнюю границу массива для отбора значений. И ранее мне известные способы определения данного массива не подходили, т.к. выбирали самое верхнее слово-индикатор. Однако все коды представленные в теме выбирают именно нужный массив. Спасибо ещё раз всем.

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

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