Excel массив через запятую

Вывод значений через запятую из таблицы

azZazZello

Дата: Среда, 15.07.2015, 07:18 |
Сообщение № 1

Группа: Пользователи

Ранг: Прохожий

Сообщений: 9


Репутация:

0

±

Замечаний:
0% ±


Excel 2010

Добрый день!
Есть задачка, вроде простая, но синтаксис никак не могу сопоставить правильно.
Суть такая: есть огромная таблица, в которой указаны МОЛы, которых ведут БУХгалтера (для примера сократил её, но искомое значение может повторятся много раз). Требуется получить результат через запятую в другой таблице.
Не могу понять как правильно из массива получить данные через запятую. ВПР выдает только 1 значение :(

 

Ответить

Nic70y

Дата: Среда, 15.07.2015, 07:35 |
Сообщение № 2

Группа: Друзья

Ранг: Экселист

Сообщений: 8132


Репутация:

1998

±

Замечаний:
0% ±


Excel 2010

может так сойдет?
массивная:

Код

=ЕСЛИОШИБКА(ИНДЕКС($B$2:$B$11;НАИМЕНЬШИЙ(ЕСЛИ($F2=$A$2:$A$11;СТРОКА($1:$10));СТОЛБЕЦ(A1)));»»)


ЮMoney 41001841029809

 

Ответить

azZazZello

Дата: Среда, 15.07.2015, 07:42 |
Сообщение № 3

Группа: Пользователи

Ранг: Прохожий

Сообщений: 9


Репутация:

0

±

Замечаний:
0% ±


Excel 2010

Да это просто праздник какой-то!!! Такой вариант тоже имеет право на жизнь!!! Если что, через СЦЕПИТЬ потом допинаю… Спасибо большое! hands

 

Ответить

azZazZello

Дата: Среда, 15.07.2015, 08:45 |
Сообщение № 4

Группа: Пользователи

Ранг: Прохожий

Сообщений: 9


Репутация:

0

±

Замечаний:
0% ±


Excel 2010

Чего то логику выражения понять не могу. Можете по пунктам разложить?
Непонятная часть выражения:

Код

НАИМЕНЬШИЙ(ЕСЛИ($F2=$A$2:$A$11;СТРОКА($1:$10));СТОЛБЕЦ(D1))

 

Ответить

Nic70y

Дата: Среда, 15.07.2015, 09:14 |
Сообщение № 5

Группа: Друзья

Ранг: Экселист

Сообщений: 8132


Репутация:

1998

±

Замечаний:
0% ±


Excel 2010

ЕСЛИ($F2=$A$2:$A$11 соот. строки массива на примере G2 это массив {ЛОЖЬ:ЛОЖЬ:3:4:ЛОЖЬ:ЛОЖЬ:ЛОЖЬ:ЛОЖЬ:ЛОЖЬ:ЛОЖЬ}
НАИМЕНЬШИЙ( … СТОЛБЕЦ(A1))это наименьший 1 из массива = 3; H2 => СТОЛБЕЦ(B1) это наименьший 2 из массива = 4


ЮMoney 41001841029809

Сообщение отредактировал Nic70yСреда, 15.07.2015, 09:15

 

Ответить

ShAM

Дата: Среда, 15.07.2015, 09:52 |
Сообщение № 6

Группа: Друзья

Ранг: Старожил

Сообщений: 1347


Репутация:

249

±

Замечаний:
0% ±


Excel 2010

 

Ответить

azZazZello

Дата: Среда, 15.07.2015, 10:05 |
Сообщение № 7

Группа: Пользователи

Ранг: Прохожий

Сообщений: 9


Репутация:

0

±

Замечаний:
0% ±


Excel 2010

Всё, разобрался. Всем спасибо!
Пошёл дальше читать матчасть deal

 

Ответить

_Boroda_

Дата: Среда, 15.07.2015, 10:06 |
Сообщение № 8

Группа: Модераторы

Ранг: Местный житель

Сообщений: 16618


Репутация:

6465

±

Замечаний:
0% ±


2003; 2007; 2010; 2013 RUS

Еще вариант немассивной формулой

Код

=ЕСЛИОШИБКА(ПРОСМОТР(;-1/($F2=$A$2:$A$11)/ЕНД(ПОИСКПОЗ($B$2:$B$11;$F2:F2;));$B$2:$B$11);»»)

Объяснялку смотрите здесь


Скажи мне, кудесник, любимец ба’гов…
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995

 

Ответить

Rioran

Дата: Среда, 15.07.2015, 10:07 |
Сообщение № 9

Группа: Авторы

Ранг: Ветеран

Сообщений: 903


Репутация:

290

±

Замечаний:
0% ±


Excel 2013

azZazZello, здравствуйте.

Ради спортивного интереса предлагаю решение пользовательской функцией.

Во вложении пример использования. Макросы должны быть разрешены. Первые два аргумента должны быть столбцами, 3-й аргумент — проверочное имя. Аргументы функции:

Код

=СЦЕПИТЬЕСЛИ( [«Кого будем сцеплять»] ; [«Диапазон для проверки критерия»] ; [«Критерий»] )

Код функции:

[vba]

Код

Function СЦЕПИТЬЕСЛИ$(Data As Range, Condition As Range, Target$)
      Dim i As Long, j As Long, ArrX() As String, rNum As Long
      rNum = Data.Rows.Count
      If rNum <> Condition.Rows.Count Then
          СЦЕПИТЬЕСЛИ = «- Укажите равные диапазоны -»
          Exit Function
      End If
      ReDim ArrX(rNum)
      For i = 1 To rNum
          If Condition.Cells(i, 1).Value = Target Then
              ArrX(j) = Data.Cells(i, 1).Value
              j = j + 1
          End If
      Next i
      ReDim Preserve ArrX(j — 1)
      СЦЕПИТЬЕСЛИ = Join(ArrX, «, «)
End Function

[/vba]


Роман, Москва, voronov_rv@mail.ru
Яндекс-Деньги: 41001312674279

Сообщение отредактировал RioranСреда, 15.07.2015, 10:10

 

Ответить

sv2014

Дата: Среда, 15.07.2015, 11:15 |
Сообщение № 10

Группа: Проверенные

Ранг: Форумчанин

Сообщений: 226


Репутация:

61

±

Замечаний:
0% ±


Excel 2013

azZazZello, добрый день,
могу предложить вам макрос,который решает ваш вопрос при любом количестве ваших данных
в столбце F

[vba]

Код

Sub incert()
   Dim i&, j&, n&, s$
  n = Range(«F» & Cells.Rows.Count).End(xlUp).Row
For j = 2 To n
    s = «»
    For i = 2 To 11
      If Range(«A» & i) = Range(«F» & j) Then
          s = s & «,» & Range(«B» & i)
      End If
    Next i
     Range(«G» & j) = Right(s, Len(s) — 1)
    Next j
  End Sub

[/vba]

 

Ответить

sv2014

Дата: Среда, 15.07.2015, 11:43 |
Сообщение № 11

Группа: Проверенные

Ранг: Форумчанин

Сообщений: 226


Репутация:

61

±

Замечаний:
0% ±


Excel 2013

azZazZello, или такой же вариант с пробелом при необходимости.
На вашем файле- примере проверил.

[vba]

Код

Sub incert1()
   Dim i&, j&, n&, s$
  n = Range(«F» & Cells.Rows.Count).End(xlUp).Row
For j = 2 To n
    s = «»
    For i = 2 To 11
      If Range(«A» & i) = Range(«F» & j) Then
          s = s & «,» & Chr(32) & Range(«B» & i)
      End If
    Next i
     Range(«G» & j) = Right(s, Len(s) — 1)
    Next j
  End Sub

[/vba]

 

Ответить

Alekc7711

Дата: Суббота, 22.02.2020, 02:05 |
Сообщение № 12

Группа: Пользователи

Ранг: Прохожий

Сообщений: 2


Репутация:

0

±

Замечаний:
0% ±


Excel 2019

 

Ответить

Alekc7711

Дата: Суббота, 22.02.2020, 02:30 |
Сообщение № 13

Группа: Пользователи

Ранг: Прохожий

Сообщений: 2


Репутация:

0

±

Замечаний:
0% ±


Excel 2019

Излишнее цитирование удалено. Нарушение Правил форума
Что нужно прописать, чтобы перебор не останавливался, а пропускал ячейку ?

Сообщение отредактировал PelenaСуббота, 22.02.2020, 08:05

 

Ответить

Pelena

Дата: Суббота, 22.02.2020, 08:04 |
Сообщение № 14

Группа: Админы

Ранг: Местный житель

Сообщений: 18797


Репутация:

4284

±

Замечаний:
±


Excel 2016 & Mac Excel

Попробуйте в этой строке поставить проверку
[vba]

Код

If Len(s)>1 Then Range(«G» & j) = Right(s, Len(s) — 1)

[/vba]


«Черт возьми, Холмс! Но как??!!»
Ю-money 41001765434816

 

Ответить

solniechnaya

Дата: Воскресенье, 05.03.2023, 09:57 |
Сообщение № 15

Группа: Пользователи

Ранг: Прохожий

Сообщений: 2


Репутация:

0

±

Замечаний:
0% ±


Друзья,
Не получается решить аналогичную задачу- где в виде итоговой таблицы нужна сводная.
В кликабельной ячейке сводной таблицы нужны не значения (например суммы), а номера строк перечисленных через запятую.

Пример во вложении

С Уважением…
Solniechnaya@gmail.com

 

Ответить

jakim

Дата: Воскресенье, 05.03.2023, 10:23 |
Сообщение № 16

Группа: Друзья

Ранг: Старожил

Сообщений: 1149


Репутация:

305

±

Замечаний:
0% ±


Excel 2010

Power Query

[vba]

Код

let
    Source = Excel.CurrentWorkbook(){[Name=»Table1″]}[Content],
    #»Grouped Rows» = Table.Group(Source, {«mol»}, {{«Count», each _, type table}}),
    #»Added Custom» = Table.AddColumn(#»Grouped Rows», «Custom», each [Count][buh]),
    #»Removed Columns» = Table.RemoveColumns(#»Added Custom»,{«Count»}),
    #»Extracted Values» = Table.TransformColumns(#»Removed Columns», {«Custom», each Text.Combine(List.Transform(_, Text.From), «, «), type text})
in
    #»Extracted Values»

[/vba]

К сообщению приложен файл:

6945041.xlsx
(16.5 Kb)

 

Ответить

jakim

Дата: Воскресенье, 05.03.2023, 10:46 |
Сообщение № 17

Группа: Друзья

Ранг: Старожил

Сообщений: 1149


Репутация:

305

±

Замечаний:
0% ±


Excel 2010

Исправляю ошибку, т.к. мой ответ был сделан по первому посту.

[vba]

Код

let
    Source = Excel.CurrentWorkbook(){[Name=»Table1″]}[Content],
    #»Changed Type» = Table.TransformColumnTypes(Source,{{«ном-стр», Int64.Type}, {«mol», type text}, {«buh», type text}}),
    #»Grouped Rows» = Table.Group(#»Changed Type», {«mol», «buh»}, {{«Count», each Table.RowCount(_), type number}}),
    #»Pivoted Column» = Table.Pivot(#»Grouped Rows», List.Distinct(#»Grouped Rows»[buh]), «buh», «Count»)
in
    #»Pivoted Column»

[/vba]

 

Ответить

jakim

Дата: Воскресенье, 05.03.2023, 12:13 |
Сообщение № 18

Группа: Друзья

Ранг: Старожил

Сообщений: 1149


Репутация:

305

±

Замечаний:
0% ±


Excel 2010

Последний вариант

[vba]

Код

let
    Source = Excel.CurrentWorkbook(){[Name=»Table1″]}[Content],
    #»Grouped Rows» = Table.Group(Source, {«mol», «buh»}, {{«Count», each _, type table}}),
    #»Added Custom» = Table.AddColumn(#»Grouped Rows», «Custom», each [Count][номстр]),
    #»Removed Columns» = Table.RemoveColumns(#»Added Custom»,{«Count»}),
    #»Extracted Values» = Table.TransformColumns(#»Removed Columns», {«Custom», each Text.Combine(List.Transform(_, Text.From), «, «), type text}),
    #»Pivoted Column» = Table.Pivot(#»Extracted Values», List.Distinct(#»Extracted Values»[buh]), «buh», «Custom»)
in
    #»Pivoted Column»

[/vba]

К сообщению приложен файл:

1724779.xlsx
(22.4 Kb)

 

Ответить

прохожий2019

Дата: Воскресенье, 05.03.2023, 12:52 |
Сообщение № 19

Группа: Проверенные

Ранг: Старожил

Сообщений: 1037


Репутация:

292

±

Замечаний:
0% ±


365 Beta Channel


[vba]

Код

let
    from = Excel.CurrentWorkbook(){[Name=»Table1″]}[Content],
    gr = Table.Group(from, {«mol», «buh»}, {«tmp», (t)=>Text.Combine(List.Transform(t[номстр],Text.From),», «)}),
    to = Table.Pivot(gr, List.Distinct(gr[buh]), «buh», «tmp»)
in
    to

[/vba]

хотя задачка, конечно, для DAX:

Код

=CONCATENATEX(‘Table1’;’Table1′[номстр];», «)

К сообщению приложен файл:

12345.xlsx
(94.7 Kb)

Сообщение отредактировал прохожий2019Воскресенье, 05.03.2023, 13:06

 

Ответить

solniechnaya

Дата: Воскресенье, 05.03.2023, 21:30 |
Сообщение № 20

Группа: Пользователи

Ранг: Прохожий

Сообщений: 2


Репутация:

0

±

Замечаний:
0% ±


прохожий2019, jakim,
Благодарю за предложенные варианты решения,
А всё же можно сделать с использованием кликабельной сводной таблицы?
Если мы дабл-кликнем в примере на жёлтую ячейку с числом «2» в сводной таблице, то откроется лист с детальной информацией.
также ожидается при дабл-клике в итоговой таблице на ячейку с «6, 9»

С надеждой,

 

Ответить

 

Xapa6apga

Пользователь

Сообщений: 372
Регистрация: 07.02.2014

#1

24.12.2015 18:47:32

Здравствуйте, прошу Вашей помощи.
Есть:
1
2
3
Получаем: 1,2,3
У меня на такой случай есть макрос:

Скрытый текст

Но я где-то слышал, что такое можно делать через «Найти/Заменить»
Якобы пишешь что-то типо «/p» и получается магия ))
Мог бы кто-то рассказать этот секрет?

Изменено: Xapa6apga24.12.2015 18:49:17

 

МВТ

Пользователь

Сообщений: 1198
Регистрация: 01.02.2015

#2

24.12.2015 19:01:50

Я бы так сделал

Код
Function tt(Rng As Range) As String
    If Rng.Columns.Count > 1 Then Exit Function
    Set Rng = Intersect(Rng, Rng.Parent.UsedRange)
    tt = Join(Application.WorksheetFunction.Transpose(Rng.Value), ",")
End Function

 

Xapa6apga

Пользователь

Сообщений: 372
Регистрация: 07.02.2014

МВТ

, макросом это конечно хорошо. Но вроде как возможно это сделать встроенными инструментами EXCEL Через «Найти/Заменить»

 

Sanja

Пользователь

Сообщений: 14838
Регистрация: 10.01.2013

#4

25.12.2015 10:50:29

из неизвестного источника
ЗАМЕНА ПЕРЕНОСА СТРОКИ (ALT+ENTER) В ЯЧЕЙКЕ

Цитата
Предположим, у вас имеется таблица с ячейками, данные в которых перенесены по строкам с помощью сочетания клавиш Alt+Enter и требуется заменить символ переноса строк (каретку) на пробел.Вызываем диалоговое окно Найти и заменить сочетанием клавиш Ctrl+H. В поле Найти вводим Ctrl+J (внешне поле останется пустым), в поле Заменить на вводим Пробел (или любой другой символ, в т.ч. запятую)

и магия

Изменено: Sanja25.12.2015 10:52:25

Согласие есть продукт при полном непротивлении сторон.

 

Казанский

Пользователь

Сообщений: 8839
Регистрация: 11.01.2013

#5

25.12.2015 10:51:49

Цитата
Xapa6apga написал:
Но я где-то слышал, что такое можно делать через «Найти/Заменить»
Якобы пишешь что-то типо «/p» и получается магия

Наверно, это «где-то» — форум по Word. В Ворде, действительно, можно заменить знак абзаца ^p на запятую.
В Excel, если данные расположены

в одной ячейке

через перевод строки, можно заменить Ctrl+j на запятую.

Изменено: Казанский25.12.2015 11:10:47

 

Xapa6apga

Пользователь

Сообщений: 372
Регистрация: 07.02.2014

Sanja

, у меня не получается ((

Казанский

, может быть, но вот Sanja,  говорит что можно ))

 

Андрей VG

Пользователь

Сообщений: 11878
Регистрация: 22.12.2012

Excel 2016, 365

#7

25.12.2015 11:08:34

Доброе время суток

Цитата
Xapa6apga написал: может быть, но вот Sanja,  говорит что можно

Sanja, пишет об этом случае

Цитата
Sanja написал: ячейками, данные в которых перенесены по строкам с помощью сочетания клавиш Alt+Enter

А у вас в коде, о соединение данных нескольких ячеек в столбце через запятую. Поэтому

Цитата
Xapa6apga написал: Sanja, у меня не получается ((
 

Sanja

Пользователь

Сообщений: 14838
Регистрация: 10.01.2013

Это к вопросу о неумении правильно задать вопрос. Я понял (если конечно код не смотреть), что данные находятся в ОДНОЙ ЯЧЕЙКЕ.

Согласие есть продукт при полном непротивлении сторон.

 

The_Prist

Пользователь

Сообщений: 14181
Регистрация: 15.09.2012

Профессиональная разработка приложений для MS Office

Ээх….По шагам:
1. Выделяем ячейку, пишем в ней равно
2. Указываем ссылку на диапазон данных
3. Не выходя из режима редактирования ячейки выделяем адрес указанного диапазона в формуле
4. Жмем F9
5. Убираем равно и фигурные скобки спереди и сзади. Подтверждаем ввод, нажатием Enter
6. Вот теперь можно через Ctrl+H в получившемся тексте заменить точку с запятой и двоеточия на нужный разделитель.

Если плохо понятно — дам ссылку на вебинар, в котором я показывал этот финт, но там придется посмотреть и остальные, т.к. я не помню на какой минуте это показывать.

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы…

 

JeyCi

Пользователь

Сообщений: 3357
Регистрация: 27.11.2013

#10

25.12.2015 18:35:02

Цитата
The_Prist написал: Ээх….

ого

Цитата
The_Prist написал: Если плохо понятно —  дам ссылку на вебинар… , но там придется посмотреть и остальные

ручками всё получилось… в п.3 можно даже не выделять, а зайти в строку редактирования формулы и нажать F9
а остальные тоже такие интересные?

Изменено: JeyCi25.12.2015 18:36:52

чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок — обратитесь к собеседнику на ВЫ — ответ на ваш вопрос получите — а остальное вас не касается (п.п.п. на форумах)

 

The_Prist

Пользователь

Сообщений: 14181
Регистрация: 15.09.2012

Профессиональная разработка приложений для MS Office

#11

25.12.2015 21:20:50

Цитата
JeyCi написал:
а остальные тоже такие интересные?

Если честно — не помню. Было месяц назад. Вебинар состоял из вопросов пользователей. Некоторые вопросы были собран по почте примерно за неделю до вебинара, остальные разбирались онлайн прямо во время проведения. Но по большей части там несложные приемчики показывал.

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы…

 

Vitallic

Пользователь

Сообщений: 239
Регистрация: 23.07.2013

#12

26.12.2015 21:11:42

Добрый вечер,
когда-то рассматривался аналогичный вопрос

здесь

.

Хитрости »

11 Июль 2016              126357 просмотров


ВПР с возвратом всех значений

Все, кто сталкивался с функцией ВПР знают, что она умеет возвращать исключительно одно значений — первое найденное. Но что делать, когда надо видеть все значения? К примеру имеется такая таблица:
Таблица
И из этой таблицы необходимо получить фамилии(поле ФИО) всех сотрудников из отдела Сбыта:
Таблица
Тут два варианта:

  • Вариант 1: все значения необходимо получить в одной ячейке через разделитель(скажем запятую). Такое возможно только через использование VBA(на момент написания статьи). Такую функцию я написал давно: Как сцепить несколько значений в одну ячейку по критерию? СцепитьЕсли
  • . В результате получим что-то вроде: Александров Иван,Александров Петр,Андреев Алексей.

  • Вариант 2: каждое значение должно быть в отдельной ячейке. Этот вариант мы и рассмотрим более подробно в данной статье. Причем решать задачу будем без использования макросов — только встроенными функциями

Здесь надо сразу оговориться — при помощи непосредственно ВПР(VLookup) это сделать ну никак не получится. Но это можно сделать при помощи её родственников — связки ИНДЕКС(ПОИСКПОЗ)(INDEX(MATCH)). Плюс еще пара функций. В сборе функция выглядит так:
=ИНДЕКС($A$12:$G$111;НАИМЕНЬШИЙ(ЕСЛИ($I$12=$C$12:$C$111;СТРОКА($C$12:$C$111)-11);СТРОКА(A1));1)
=INDEX($A$12:$G$111;SMALL(IF($I$12=$C$12:$C$111;ROW($C$12:$C$111)-11);ROW(A1));1)
где:

  • $A$12:$G$111 — таблица с ФИО и всеми данными
  • $I$12 — ячейка с названием отдела
  • $C$12:$C$111 — столбец с названиями отделов в таблице $A$12:$G$111

А теперь начнем разбирать формулу по кусочкам
Предлагаю сразу скачать пример файла с данными и формулами — тогда понять будет проще:

  Tips_All_VlookupAllVals.xls (84,5 KiB, 23 005 скачиваний)

  • Первое и самое главное — формула вводится в ячейку как формула массива. Это значит, что для приложенного к статье примера необходимо будет выделить ячейку J12, записать в неё формулу и завершить ввод нажатием сразу трех клавиш: Ctrl+Shift+Enter. После этого скопировать ячейку, выделить диапазон J13:J39 и вставить туда скопированную ячейку.
  • За отбор ФИО указанного отдела отвечает этот кусок: ЕСЛИ($I$12=$C$12:$C$111;СТРОКА($C$12:$C$111)-11)
    IF($I$12=$C$12:$C$111;ROW($C$12:$C$111)-11)
    Как видно здесь идет сравнение отдела, записанного в $I$12 со всеми отделами в таблице: $C$12:$C$111. Если отдел совпадает, то функция возвращает номер строки СТРОКА($C$12:$C$111). Но нам нужен не номер строки на листе, а номер строки внутри таблицы(потому что в формулу ИНДЕКС(INDEX) у нас передан диапазон $A$12:$G$111 и если передать в его второй аргумент(номер_строки) 14, то получим не Александров Иван, а Андреев Олег). Поэтому отнимаем от номера строки 11, чтобы было возвращено число 3(а не 14). Т.к. формула записана формулой массива — ЕСЛИ(IF) возвращает массив из номеров строк и логического ЛОЖЬ(FALSE)(если отдел не совпадает):
    шаг 1: ЕСЛИ({ЛОЖЬ:ЛОЖЬ:ИСТИНА:ЛОЖЬ:ЛОЖЬ:ИСТИНА:ЛОЖЬ:ЛОЖЬ:ЛОЖЬ};{12:13:14:15:16:17:18:19:20}-11)
    шаг 2: ЕСЛИ({ЛОЖЬ:ЛОЖЬ:ИСТИНА:ЛОЖЬ:ЛОЖЬ:ИСТИНА:ЛОЖЬ:ЛОЖЬ:ЛОЖЬ};{1:2:3:4:5:6:7:8:9})
    шаг 3: {ЛОЖЬ:ЛОЖЬ:3:ЛОЖЬ:ЛОЖЬ:6:ЛОЖЬ:ЛОЖЬ:ЛОЖЬ}
  • Т.к. ЕСЛИ(IF) в данном случае возвращает массив значений, включая ненужные нам ЛОЖЬ(FALSE) — применяем НАИМЕНЬШИЙ(SMALL), которая будет брать только числа (сначала 3, затем 6 и т.д.), а логические значения ЛОЖЬ(FALSE) будет игнорировать:
    НАИМЕНЬШИЙ({ЛОЖЬ:ЛОЖЬ:3:ЛОЖЬ:ЛОЖЬ:6:ЛОЖЬ:ЛОЖЬ:ЛОЖЬ};СТРОКА(A1))
    SMALL({ЛОЖЬ:ЛОЖЬ:3:ЛОЖЬ:ЛОЖЬ:6:ЛОЖЬ:ЛОЖЬ:ЛОЖЬ};ROW(A1))
    Функция НАИМЕНЬШИЙ(SMALL) отбирает из указанного массива чисел наименьшее. При этом можно отобрать по рангу — первое наименьшее, второе наименьшее, третье наименьшее и т.д.

    1. с первым аргументом разобрались — это уже отобранные записи, где число — строка в таблице с нужной ФИО и ненужные нам логические ЛОЖЬ(FALSE).
    2. второй аргумент СТРОКА(A1) для каждой следующей строки будет меняться. В приложенном примере первая ячейка с формулой — J12. В ней СТРОКА(A1) равна 1, т.е. НАИМЕНЬШИЙ(SMALL) вернет первое наименьшее из массива чисел — 3. В ячейке J13 это уже будет СТРОКА(A2) и она равна 2, а значит НАИМЕНЬШИЙ(SMALL) вернет второе наименьшее из массива чисел — 6. И т.д. Когда все числа закончатся — НАИМЕНЬШИЙ(SMALL) вернет значение ошибки #ЧИСЛО!(#NUM!)
      ячейка J12
      шаг 1: НАИМЕНЬШИЙ({ЛОЖЬ:ЛОЖЬ:3:ЛОЖЬ:ЛОЖЬ:6:ЛОЖЬ:ЛОЖЬ:ЛОЖЬ};СТРОКА(A1))
      шаг 2: НАИМЕНЬШИЙ({ЛОЖЬ:ЛОЖЬ:3:ЛОЖЬ:ЛОЖЬ:6:ЛОЖЬ:ЛОЖЬ:ЛОЖЬ};1)
      шаг 3: НАИМЕНЬШИЙ(3)
      ячейка J13
      шаг 1: НАИМЕНЬШИЙ({ЛОЖЬ:ЛОЖЬ:3:ЛОЖЬ:ЛОЖЬ:6:ЛОЖЬ:ЛОЖЬ:ЛОЖЬ};СТРОКА(A2))
      шаг 2: НАИМЕНЬШИЙ({ЛОЖЬ:ЛОЖЬ:3:ЛОЖЬ:ЛОЖЬ:6:ЛОЖЬ:ЛОЖЬ:ЛОЖЬ};2)
      шаг 3: НАИМЕНЬШИЙ(6)

  • И последний штрих — все это передается в функцию ИНДЕКС(INDEX). Для ячейки J12 это будет значение ячейки, расположенной на пересечении 3-й строки и 1-го столбца диапазона $A$12:$G$111. На листе это ячейка A14. Т.е. третья сверху ячейка столбца А в диапазоне $A$12:$G$111 — Александров Иван.

    ячейка J12
    шаг 1: =ИНДЕКС($A$12:$G$111;НАИМЕНЬШИЙ(3);1)
    шаг 2: =ИНДЕКС($A$12:$G$111;3;1)
    шаг 3: Александров Иван
    ячейка J13
    шаг 1: =ИНДЕКС($A$12:$G$111;НАИМЕНЬШИЙ(6);1)
    шаг 2: =ИНДЕКС($A$12:$G$111;6;1)
    шаг 3: Александров Петр

И в довершение неплохо бы убрать ошибку в случае, если ни одно значение не соответствует критерию или значений больше, чем ячеек с формулами. Более подробно подобное решение я описывал в этой статье: Как в ячейке с формулой вместо ошибки показать 0
Для всех версий Excel:
=ЕСЛИ(ЕОШ(ИНДЕКС($A$12:$G$111;НАИМЕНЬШИЙ(ЕСЛИ($I$12=$C$12:$C$111;СТРОКА($C$12:$C$111)-11);СТРОКА(A1));1));»»;ИНДЕКС($A$12:$G$111;НАИМЕНЬШИЙ(ЕСЛИ($I$12=$C$12:$C$111;СТРОКА($C$12:$C$111)-11);СТРОКА(A1));1))
=IF(ISERR(INDEX($A$12:$G$111;SMALL(IF($I$12=$C$12:$C$111;ROW($C$12:$C$111)-11);ROW(A1));1));»»;INDEX($A$12:$G$111;SMALL(IF($I$12=$C$12:$C$111;ROW($C$12:$C$111)-11);ROW(A1));1))
Для Excel 2007 и выше:
=ЕСЛИОШИБКА(ИНДЕКС($A$12:$G$111;НАИМЕНЬШИЙ(ЕСЛИ($I$12=$C$12:$C$111;СТРОКА($C$12:$C$111)-11);СТРОКА(A1));1);»»)
=IFERROR(INDEX($A$12:$G$111;SMALL(IF($I$12=$C$12:$C$111;ROW($C$12:$C$111)-11);ROW(A1));1);»»)
Плюс к этому в приложенном к статье файле я привел формулу, которая возвращает список всех сотрудников выбранного отдела без повторений и формулу с возможностью просто поменять заголовок в результирующем столбце(в файле это столбец K, ячейка K11) на любой из исходной таблицы и данные будут отображены из этого столбца.
Например, если вместо столбца ФИО записать в K11 Адрес — будут отображены все адреса сотрудников выбранного отдела. Если записать Телефон — все телефоны сотрудников выбранного отдела.

Скачать пример:

  Tips_All_VlookupAllVals.xls (84,5 KiB, 23 005 скачиваний)

Так же см.:
Как найти значение в другой таблице или сила ВПР
ВПР с поиском по нескольким листам
ВПР_МН


Статья помогла? Поделись ссылкой с друзьями!

  Плейлист   Видеоуроки


Поиск по меткам



Access
apple watch
Multex
Power Query и Power BI
VBA управление кодами
Бесплатные надстройки
Дата и время
Записки
ИП
Надстройки
Печать
Политика Конфиденциальности
Почта
Программы
Работа с приложениями
Разработка приложений
Росстат
Тренинги и вебинары
Финансовые
Форматирование
Функции Excel
акции MulTEx
ссылки
статистика

Цитата: sergo44441 от 09.09.2010, 22:08
попробуйте мой вариант макроса

Спасибо за желание помочь! (+1)
На самом деле, это тот самый способ, с которого я и сам начинал — в смысле, через Instr и Mid. Вот так вот я делал:

             Счётчик = 1
       Do While Счётчик <= ВсегоСтрокВтаблице
         If Счётчик Mod 200 = 0 Then DoEvents
         ProgressBar1.Value = Счётчик
        With Sheets("Обработка")
         КопияНачальнойСтроки = .Range("A" & Счётчик)

         ПозицияПервойЗапятой = InStr(1, КопияНачальнойСтроки, ",")
         ПозицияВторойЗапятой = InStr(ПозицияПервойЗапятой + 1, _
                                         КопияНачальнойСтроки, ",")
         ПозицияТретьейЗапятой = InStr(ПозицияВторойЗапятой + 1, _
                                         КопияНачальнойСтроки, ",")
         ПозицияЧетвёртойЗапятой = InStr(ПозицияТретьейЗапятой + 1, _
                                         КопияНачальнойСтроки, ",")
         ПозицияПятойЗапятой = InStr(ПозицияЧетвёртойЗапятой + 1, _
                                         КопияНачальнойСтроки, ",")
         ПозицияШестойЗапятой = InStr(ПозицияПятойЗапятой + 1, _
                                         КопияНачальнойСтроки, ",")
         ПозицияСедьмойЗапятой = InStr(ПозицияШестойЗапятой + 1, _
                                         КопияНачальнойСтроки, ",")
         ПозицияВосьмойЗапятой = InStr(ПозицияСедьмойЗапятой + 1, _
                                         КопияНачальнойСтроки, ",")

         .Range("A" & Счётчик) = _
                Mid(КопияНачальнойСтроки, 1, ПозицияПервойЗапятой - 1)
         .Range("B" & Счётчик) = _
                Mid(КопияНачальнойСтроки, ПозицияПервойЗапятой + 1, _
                               ПозицияВторойЗапятой - ПозицияПервойЗапятой - 1)
         .Range("C" & Счётчик) = _
                Mid(КопияНачальнойСтроки, ПозицияВторойЗапятой + 1, _
                               ПозицияТретьейЗапятой - ПозицияВторойЗапятой - 1)
         .Range("D" & Счётчик) = _
                Mid(КопияНачальнойСтроки, ПозицияТретьейЗапятой + 1, _
                               ПозицияЧетвёртойЗапятой - ПозицияТретьейЗапятой - 1)
         .Range("E" & Счётчик) = _
                Mid(КопияНачальнойСтроки, ПозицияЧетвёртойЗапятой + 1, _
                               ПозицияПятойЗапятой - ПозицияЧетвёртойЗапятой - 1)
         .Range("F" & Счётчик) = _
                Mid(КопияНачальнойСтроки, ПозицияПятойЗапятой + 1, _
                               ПозицияШестойЗапятой - ПозицияПятойЗапятой - 1)
         .Range("G" & Счётчик) = _
                Mid(КопияНачальнойСтроки, ПозицияШестойЗапятой + 1, _
                               ПозицияСедьмойЗапятой - ПозицияШестойЗапятой - 1)
         .Range("H" & Счётчик) = _
                Mid(КопияНачальнойСтроки, ПозицияСедьмойЗапятой + 1, _
                               ПозицияВосьмойЗапятой - ПозицияСедьмойЗапятой - 1)
         .Range("I" & Счётчик) = _
                Mid(КопияНачальнойСтроки, ПозицияВосьмойЗапятой + 1)
      End With
     Счётчик = Счётчик + 1
   Loop

Получалось очень долго. А чтобы не было совсем уж тоскливо, даже ПрогрессБары стал применять :)  А потом вспомнил, что мы живём в 21-ом веке, стал копаться в справочной системе и «надыбал» :) метод PasteSpecial, который почему-то вставляет данные то сразу «разбросанными» по ячейкам, то «одним куском» в столбец «A».   Отчего  зависит такая ощутимая разница в работе этого метода, я понять, увы, не смог.
И ещё нашёл метод TextToColumns, который вроде бы для этого и предназначен. Но эксперименты с ним особым успехом тоже  не увенчались. Потому-то и решил прибегнуть к помощи знатоков.
Может кто-нибудь подскажет, как следует правильно использовать эти методы для решения моей задачи или посоветует ещё какой-нибудь способ?

Распределить числа через запятую в ячейки

31.05.2015, 20:07. Показов 14808. Ответов 6

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

Есть массив чисел через запятую и пробел. Например 1, 2, 4, 55, 896, 345, 39835, 345. Нужно их вставить в файл exel и получить один столбец чисел (1, 2, 4, 55, 896, 345, 39835, 345) в каждой ячейке которого содержится только одно число.

Буду благодарен, если подскажете как это реализовать в MS Office Excel или другом аналогичном софте (например, libre office).
Заранее спасибо!



0



Преобразование строки со значениями в массив

Ситуация: дана строка, в которой через запятую перечислены значения (или диапазоны значений)

Требуется подсчитать, сколько значений содержится в строке, или же разбить строку на массив, содержащий все значения из исходной строки.

И, если при исходных строках вида «5,6,8,18,2,21» всё просто (достаточно применить VB-функцию Split), то при наличии в строке диапазонов значений вида Число1-Число2 (например, строка «9-15,18,2,11-9«) задача заметно усложняется.

В этих случаях на помощь придёт функция ArrayOfValues

Function ArrayOfValues(ByVal txt$) As Variant
 
' Принимает в качестве параметра строку типа ",,5,6,8,,9-15,18,2,11-9,,1,4,,21,"
    ' Возвращает одномерный (горизонтальный) массив в формате
    ' array(5,6,8,9,10,11,12,13,14,15,18,2,11,10,9,1,4,21)
    ' (пустые значения удаляются; диапазоны типа 9-15 и 17-13 раскрываются)

arr = Split(Replace(txt$, " ", ""), ","): Dim n As Long: ReDim tmpArr(0 To 0)
    For i = LBound(arr) To UBound(arr)
        Select Case True
            Case arr(i) = "", Val(arr(i)) < 0
                '  раскомментируйте эту строку, чтобы пустые и нулевые значения
                '  тоже добавлялись в результат (преобразовывались в значение -1)
                'tmpArr(UBound(tmpArr)) = -1: ReDim Preserve tmpArr(0 To UBound(tmpArr) + 1)
            Case IsNumeric(arr(i))
                tmpArr(UBound(tmpArr)) = arr(i): ReDim Preserve tmpArr(0 To UBound(tmpArr) + 1)
            Case arr(i) Like "*#-#*"
                spl = Split(arr(i), "-")
                If UBound(spl) = 1 Then
                    If IsNumeric(spl(0)) And IsNumeric(spl(1)) Then
                        For j = Val(spl(0)) To Val(spl(1)) Step IIf(Val(spl(0)) > Val(spl(1)), -1, 1)
                            tmpArr(UBound(tmpArr)) = j: ReDim Preserve tmpArr(0 To UBound(tmpArr) + 1)
                        Next j
                    End If
                End If
        End Select
    Next i
    On Error Resume Next: ReDim Preserve tmpArr(0 To UBound(tmpArr) - 1)
    ArrayOfValues = tmpArr
End Function

Использовать её можно так:

Sub ПримерИспользования()
    ' разбиваем строку в массив, содержащий все значения исходной строки
    a = ArrayOfValues(",,5,6,8,,9-15,18,2,11-9,,1,4,,21,")
 
    Debug.Print Join(a, ",") ' объединяем обратно созданный массив
    ' результатом будет строка "5,6,8,9,10,11,12,13,14,15,18,2,11,10,9,1,4,21"
End Sub

Функция нашла применение в программе выгрузки тарифов в XML


Ещё один вариант функции, только она возвращает из аналогичной текстовой строки КОЛЛЕКЦИЮ НЕПОВТОРЯЮЩИХСЯ чисел от 1 до 255

Function ArrayOfValuesEx(ByVal txt$) As Collection
    ' Принимает в качестве параметра строку типа ",,5,6,8,,9-15,18,2,11-9,,1,4,,21,"
    ' Возвращает колекцию уникальных чисел в формате    (5,6,8,9,10,11,12,13,14,15,18,2,1,4,21)
    ' (удаляются все значения кроме целых чисел от 1 до 255; диапазоны типа 9-15 и 17-13 раскрываются)

    On Error Resume Next: Set ArrayOfValuesEx = New Collection
    MaxNumber& = 255
    txt = Replace(Replace(txt, ".", ","), " ", "")
    For i = 1 To Len(txt)
        If Mid(txt, i, 1) Like "[0-9,-]" Then res = res & Mid(txt, i, 1) Else res = res & " "
    Next
    txt = Replace(res, " ", "")
 
    arr = Split(txt, ","):
    For i = LBound(arr) To UBound(arr)
        Select Case True
            Case arr(i) = "", Val(arr(i)) < 0
            Case IsNumeric(arr(i))
                v& = Val(arr(i)): If v > 0 And v <= MaxNumber& Then ArrayOfValuesEx.Add v, CStr(v)
            Case arr(i) Like "*#-#*"
                spl = Split(arr(i), "-")
                If UBound(spl) = 1 Then
                    If IsNumeric(spl(0)) And IsNumeric(spl(1)) Then
                        For j = Val(spl(0)) To Val(spl(1)) Step IIf(Val(spl(0)) > Val(spl(1)), -1, 1)
                            v& = j: If v > 0 And v <= MaxNumber& Then ArrayOfValuesEx.Add v, CStr(v)
                        Next j
                    End If
                End If
        End Select
    Next i
End Function
 
Private Sub ArrayOfValuesEx_ПримерИспользования()
    ' разбиваем строку в массив, содержащий все значения исходной строки
    Dim coll As Collection
    Set coll = ArrayOfValuesEx(",,5,6,+8,,9-12,18//,2,11-9,,1,4.6,,21,7a,ajsgh55,4-")
 
    For Each Item In coll: Debug.Print Item;: Next: Debug.Print
    ' результатом будет   5  6  8  9  10  11  12  18  2  1  4  21  7  55
End Sub
  • 20625 просмотров

Не получается применить макрос? Не удаётся изменить код под свои нужды?

Оформите заказ у нас на сайте, не забыв прикрепить примеры файлов, и описать, что и как должно работать.

Как вернуть несколько значений поиска в одной ячейке, разделенной запятыми?

В Excel мы можем применить функцию ВПР для возврата первого совпадающего значения из ячеек таблицы, но иногда нам нужно извлечь все совпадающие значения, а затем разделить их определенным разделителем, таким как запятая, тире и т. Д., В один ячейку, как показано на следующем снимке экрана. Как мы могли получить и вернуть несколько значений поиска в одной ячейке, разделенной запятыми в Excel?

документ возвращает несколько значений, разделенных запятыми, 1

Возвращает несколько значений поиска в одной ячейке, разделенной запятыми, с помощью функции, определяемой пользователем

Вернуть несколько значений поиска в одной ячейке, разделенной запятыми, с помощью Kutools for Excel


Возвращает несколько значений поиска в одной ячейке, разделенной запятыми, с помощью функции, определяемой пользователем

Обычно у нас нет прямого способа извлечь и вернуть несколько совпадающих значений, разделенных запятыми, в одну ячейку, здесь вы можете создать определяемую пользователем функцию для решения этой задачи, пожалуйста, сделайте следующее:

1. Удерживайте ALT + F11 , чтобы открыть Microsoft Visual Basic для приложений окно.

2. Нажмите Вставить > Модулии вставьте следующий код в Модули Окно.

Код VBA: возврат нескольких значений поиска в одну ячейку, разделенную запятыми

Function SingleCellExtract(LookupValue As String, LookupRange As Range, ColumnNumber As Integer, Char As String)
'Updateby Extendoffice
    Dim I As Long
    Dim xRet As String
    For I = 1 To LookupRange.Columns(1).Cells.Count
        If LookupRange.Cells(I, 1) = LookupValue Then
            If xRet = "" Then
                xRet = LookupRange.Cells(I, ColumnNumber) & Char
            Else
                xRet = xRet & "" & LookupRange.Cells(I, ColumnNumber) & Char
            End If
        End If
    Next
    SingleCellExtract = Left(xRet, Len(xRet) - 1)
End Function

3. Затем сохраните этот код и закройте окно модуля, вернитесь на свой рабочий лист и введите эту формулу: = SingleCellExtract (D2; A2: B15,2; «,») в пустую ячейку, в которую вы хотите вернуть результат. А затем нажмите Enter ключ для получения результата, см. снимок экрана:

документ возвращает несколько значений, разделенных запятыми, 2

Внимание: В приведенной выше формуле:

D2: указывает значения ячеек, которые вы хотите найти;

А2: В15: это диапазон данных, из которого вы хотите получить данные;

2: число 2 — это номер столбца, в котором должно быть возвращено совпадающее значение;

,: запятая — это разделитель, которым вы хотите разделить несколько значений.

Вы можете изменить их по своему усмотрению.


Вернуть несколько значений поиска в одной ячейке, разделенной запятыми, с помощью Kutools for Excel

Если у вас есть Kutools for Excel, эта задача больше не будет проблемой. В Расширенные ряды комбинирования Утилита может помочь вам объединить все относительные значения на основе столбца.

После установки Kutools for Excel, пожалуйста, сделайте следующее:

1. Выберите диапазон данных, в котором вы хотите объединить все совпадающие значения на основе столбца.

2. Нажмите Кутулс > Слияние и разделение > Расширенные ряды комбинирования, см. снимок экрана:

3. В Объединить строки на основе столбца В диалоговом окне щелкните имя столбца, на основе которого вы хотите объединить, а затем щелкните Основной ключ кнопку, см. снимок экрана:

документ возвращает несколько значений, разделенных запятыми, 4

4. Затем щелкните имя другого столбца, в котором вы хотите объединить совпадающие значения, и щелкните Сочетать чтобы выбрать один разделитель для разделения комбинированных значений, см. снимок экрана:

документ возвращает несколько значений, разделенных запятыми, 5

5. Затем нажмите OK кнопки, все соответствующие ячейки с одинаковым значением были объединены в одну ячейку, разделенную запятой, см. скриншоты:

Нажмите, чтобы узнать больше об этой утилите Advanced Combine Rows…

Скачать и бесплатную пробную версию Kutools for Excel Сейчас !


Демонстрация: вернуть несколько значений поиска в одну ячейку, разделенную запятыми, с помощью Kutools for Excel


Лучшие инструменты для работы в офисе

Kutools for Excel Решит большинство ваших проблем и повысит вашу производительность на 80%

  • Снова использовать: Быстро вставить сложные формулы, диаграммы и все, что вы использовали раньше; Зашифровать ячейки с паролем; Создать список рассылки и отправлять электронные письма …
  • Бар Супер Формулы (легко редактировать несколько строк текста и формул); Макет для чтения (легко читать и редактировать большое количество ячеек); Вставить в отфильтрованный диапазон
  • Объединить ячейки / строки / столбцы без потери данных; Разделить содержимое ячеек; Объединить повторяющиеся строки / столбцы… Предотвращение дублирования ячеек; Сравнить диапазоны
  • Выберите Дубликат или Уникальный Ряды; Выбрать пустые строки (все ячейки пустые); Супер находка и нечеткая находка во многих рабочих тетрадях; Случайный выбор …
  • Точная копия Несколько ячеек без изменения ссылки на формулу; Автоматическое создание ссылок на несколько листов; Вставить пули, Флажки и многое другое …
  • Извлечь текст, Добавить текст, Удалить по позиции, Удалить пробел; Создание и печать промежуточных итогов по страницам; Преобразование содержимого ячеек в комментарии
  • Суперфильтр (сохранять и применять схемы фильтров к другим листам); Расширенная сортировка по месяцам / неделям / дням, периодичности и др .; Специальный фильтр жирным, курсивом …
  • Комбинируйте книги и рабочие листы; Объединить таблицы на основе ключевых столбцов; Разделить данные на несколько листов; Пакетное преобразование xls, xlsx и PDF
  • Более 300 мощных функций. Поддерживает Office/Excel 2007-2021 и 365. Поддерживает все языки. Простое развертывание на вашем предприятии или в организации. Полнофункциональная 30-дневная бесплатная пробная версия. 60-дневная гарантия возврата денег.

вкладка kte 201905


Вкладка Office: интерфейс с вкладками в Office и упрощение работы

  • Включение редактирования и чтения с вкладками в Word, Excel, PowerPoint, Издатель, доступ, Visio и проект.
  • Открывайте и создавайте несколько документов на новых вкладках одного окна, а не в новых окнах.
  • Повышает вашу продуктивность на 50% и сокращает количество щелчков мышью на сотни каждый день!

офисный дно

Работа с функцией СЦЕПИТЬ в Microsoft Excel

Функция СЦЕПИТЬ в Microsoft Excel

Одной из интересных функций приложения Microsoft Excel является функция СЦЕПИТЬ. Её основной задачей является соединение содержимого двух или нескольких ячеек в одной. Данный оператор помогает решить некоторые задачи, которые с помощью других инструментов воплотить невозможно. Например, с его помощью удобно производить процедуру объединения ячеек без потерь. Рассмотрим возможности данной функции и нюансы её применения.

Применение оператора СЦЕПИТЬ

Функция СЦЕПИТЬ относится к группе текстовых операторов Excel. Её основная задача — объединение в одной ячейке содержимого нескольких ячеек, а также отдельных символов. Начиная с версии Excel 2016, вместо данного оператора используется функция СЦЕП. Но в целях сохранения обратной совместимости оператор СЦЕПИТЬ тоже оставлен, и его можно использовать наравне со СЦЕП.

Синтаксис этого оператора выглядит следующим образом:

В качестве аргументов могут выступать, как текст, так и ссылки на ячейки, которые его содержат. Количество аргументов может варьироваться от 1 до 255 включительно.

Способ 1: объединение данных в ячейках

Как известно, обычное объединение ячеек в Эксель приводит к потере данных. Сохраняются только данные расположенные в верхнем левом элементе. Для того, чтобы объединить содержимое двух и более ячеек в Эксель без потерь можно применить функцию СЦЕПИТЬ.

    Выделяем ячейку, в которой планируем разместить объединенные данные. Кликаем на кнопку «Вставить функцию». Она имеет вид пиктограммы и размещена слева от строки формул.

Переход в Мастер функций в Microsoft Excel

Мастер функций в Microsoft Excel

Аргументы функции СЦЕПИТЬ в программе Microsoft Excel

Результат функции СЦЕПИТЬ в Microsoft Excel

Способ 2: применение функции с пробелом

Существуют возможности исправить данный недочет, вставив пробелы между аргументами оператора.

  1. Выполняем задачу по тому же алгоритму, который описан выше.
  2. Двойным щелчком левой кнопки мыши по ячейке с формулой активируем её для редактирования.

Активация ячейки для редактирования функции СЦЕПИТЬ в Microsoft Excel

Изменения внесены в Microsoft Excel

Пробелы в функции СЦЕПИТЬ в Microsoft Excel установлены

Как видим, на месте вставки пробелов с кавычками в ячейке появились разделения между словами.

Способ 3: добавление пробела через окно аргументов

Конечно, если преобразуемых значений не много, то вышеприведенный вариант разрыва склейки прекрасно подойдет. Но его будет затруднительно быстро воплотить, если существуют множество ячеек, которые нужно объединить. Тем более, если эти ячейки не находятся в едином массиве. Значительно упростить расстановку пробела можно, воспользовавшись вариантом его вставки через окно аргументов.

  1. Выделяем двойным кликом левой кнопки мыши любую пустую ячейку на листе. С помощью клавиатуры устанавливаем внутри неё пробел. Желательно, чтобы она находилась подальше от основного массива. Очень важно, чтобы эта ячейка никогда после этого не заполнялась никакими данными.

Ячейка с пробелом в Microsoft Excel

Добавление пустого аргумента СЦЕПИТЬ в Microsoft Excel

Аргументы функции СЦЕПИТЬ в Microsoft Excel

Как видим, после этого в целевой ячейке образовалась объединенная запись, включающая содержимое всех элементов, но с пробелами между каждым словом.

Результат обработки данных функцией СЦЕПИТЬ в Microsoft Excel

Внимание! Как видим, вышеуказанный способ значительно ускоряет процедуру корректного объединения данных в ячейках. Но следует учесть, что данный вариант таит в себе и «подводные камни». Очень важно, чтобы в элементе, который содержит пробел, со временем не появились какие-то данные или он не был сдвинут.

Способ 4: объединение колонок

С помощью функции СЦЕПИТЬ можно быстро объединять данные нескольких колонок в одну.

    С ячейками первой строки объединяемых колонок проделываем на выбор те действия, которые указаны во втором и третьем способе применения аргумента. Правда, если вы решили воспользоваться способом с пустой ячейкой, то ссылку на неё нужно будет сделать абсолютной. Для этого, перед каждым знаком координат по горизонтали и вертикали этой ячейки ставим знак доллара ($). Естественно, что лучше всего это сделать в самом начале, чтобы в другие поля, где содержится этот адрес, пользователь мог копировать его, как содержащий постоянные абсолютные ссылки. В остальных полях оставляем относительные ссылки. Как всегда, после выполнения процедуры, жмем на кнопку «OK».

Абсолютные ссылки в аргументах функции СЦЕПИТЬ в Microsoft Excel

Маркер заполнения в Microsoft Excel

Столбцы объединены функцией СЦЕПИТЬ в Microsoft Excel

Способ 5: добавление дополнительных символов

Функцию СЦЕПИТЬ можно также использовать для добавления дополнительных символов и выражений, которых не было в первоначальном объединяемом диапазоне. Более того, можно с помощью данной функции внедрять и другие операторы.

    Выполняем действия по добавлению значений в окно аргументов функции любым из способов, который был приведен выше. В одно из полей (при необходимости их может быть и несколько) добавляем любой текстовый материал, который пользователь считает нужным добавить. Данный текст обязательно должен быть заключен в кавычки. Жмем на кнопку «OK».

Добавление текстового материала с помощью функции СЦЕПИТЬ в Microsoft Excel

Текстовый материал добавлен с помощью функции СЦЕПИТЬ в Microsoft Excel

Оператор СЦЕПИТЬ – единственная возможность объединения ячеек без потерь в Excel. Кроме того, с его помощью можно соединять целые столбцы, добавлять текстовые значения, проводить некоторые другие манипуляции. Знание алгоритма работы с этой функцией позволит облегчить решение многих вопросов для пользователя программы.

ЗакрытьМы рады, что смогли помочь Вам в решении проблемы.

3 способа склеить текст из нескольких ячеек

Надпись на заборе: «Катя + Миша + Семён + Юра + Дмитрий Васильевич +
товарищ Никитин + рыжий сантехник + Витенька + телемастер Жора +
сволочь Редулов + не вспомнить имени, длинноволосый такой +
ещё 19 мужиков + муж = любовь!»

Способ 1. Функции СЦЕПИТЬ, СЦЕП и ОБЪЕДИНИТЬ

В категории Текстовые есть функция СЦЕПИТЬ (CONCATENATE) , которая соединяет содержимое нескольких ячеек (до 255) в одно целое, позволяя комбинировать их с произвольным текстом. Например, вот так:

Склейка текста функцией СЦЕПИТЬ

Нюанс: не забудьте о пробелах между словами — их надо прописывать как отдельные аргументы и заключать в скобки, ибо текст.

Очевидно, что если нужно собрать много фрагментов, то использовать эту функцию уже не очень удобно, т.к. придется прописывать ссылки на каждую ячейку-фрагмент по отдельности. Поэтому, начиная с 2016 версии Excel, на замену функции СЦЕПИТЬ пришла ее более совершенная версия с похожим названием и тем же синтаксисом — функция СЦЕП (CONCAT) . Ее принципиальное отличие в том, что теперь в качестве аргументов можно задавать не одиночные ячейки, а целые диапазоны — текст из всех ячеек всех диапазонов будет объединен в одно целое:

Склейка функцией СЦЕП

Для массового объединения также удобно использовать новую функцию ОБЪЕДИНИТЬ (TEXTJOIN) , появившуюся начиная с Excel 2016. У нее следующий синтаксис:

=ОБЪЕДИНИТЬ( Разделитель ; Пропускать_ли_пустые_ячейки ; Диапазон1 ; Диапазон2 . )

  • Разделитель — символ, который будет вставлен между фрагментами
  • Второй аргумент отвечает за то, нужно ли игнорировать пустые ячейки (ИСТИНА или ЛОЖЬ)
  • Диапазон 1, 2, 3 . — диапазоны ячеек, содержимое которых хотим склеить

Склейка текста функцией ОБЪЕДИНИТЬ

Способ 2. Символ для склеивания текста (&)

Это универсальный и компактный способ сцепки, работающий абсолютно во всех версиях Excel.

Для суммирования содержимого нескольких ячеек используют знак плюс «+«, а для склеивания содержимого ячеек используют знак «&» (расположен на большинстве клавиатур на цифре «7»). При его использовании необходимо помнить, что:

  • Этот символ надо ставить в каждой точке соединения, т.е. на всех «стыках» текстовых строк также, как вы ставите несколько плюсов при сложении нескольких чисел (2+8+6+4+8)
  • Если нужно приклеить произвольный текст (даже если это всего лишь точка или пробел, не говоря уж о целом слове), то этот текст надо заключать в кавычки. В предыдущем примере с функцией СЦЕПИТЬ о кавычках заботится сам Excel — в этом же случае их надо ставить вручную.

Вот, например, как можно собрать ФИО в одну ячейку из трех с добавлением пробелов:

Сцепка текста амперсандом

Если сочетать это с функцией извлечения из текста первых букв — ЛЕВСИМВ (LEFT) , то можно получить фамилию с инициалами одной формулой:

Склейка ФИО

Способ 3. Макрос для объединения ячеек без потери текста.

Имеем текст в нескольких ячейках и желание — объединить эти ячейки в одну, слив туда же их текст. Проблема в одном — кнопка Объединить и поместить в центре (Merge and Center) в Excel объединять-то ячейки умеет, а вот с текстом сложность — в живых остается только текст из верхней левой ячейки.

Чтобы объединение ячеек происходило с объединением текста (как в таблицах Word) придется использовать макрос. Для этого откройте редактор Visual Basic на вкладке Разработчик — Visual Basic (Developer — Visual Basic) или сочетанием клавиш Alt + F11 , вставим в нашу книгу новый программный модуль (меню Insert — Module) и скопируем туда текст такого простого макроса:

Теперь, если выделить несколько ячеек и запустить этот макрос с помощью сочетания клавиш Alt + F8 или кнопкой Макросы на вкладке Разработчик (Developer — Macros) , то Excel объединит выделенные ячейки в одну, слив туда же и текст через пробелы.

Чтобы объединить значения (текстовые, цифровые) из разных ячеек в одну, используется функция СЦЕПИТЬ. Ее аналог – & (амперсанд). Знак справляется с простейшими задачами. Но для объединения множества строк не подходит.

Синтаксис функции СЦЕПИТЬ

Функция входит в группу «текстовые». Синтаксис: (текст 1; текст 2;…). Можно включить до 255 текстовых строк. Первый аргумент – «текст 1» – является обязательным. Любые аргументы можно указать в виде текста, цифр или ссылок на ячейки.

Общие правила использования функции СЦЕПИТЬ:

  1. Для разделения аргументов применяется точка с запятой. Пропуск или использование других знаков приведет к отображению в ячейке с результатом кавычек.
  2. Текстовые аргументы обязательно заключать в кавычки. В противном случае появляется ошибка – #ИМЯ? Числа и ссылки на ячейки – не нужно.
  3. Чтобы соединяемые элементы в строке результата отобразились с пробелом, пробелы нужно добавлять в формулу с функцией. С помощью двойных кавычек с пробелом внутри (“ “) или с помощью пробела после текстового аргумента (“Иванов ”;…).

Как пользоваться функцией СЦЕПИТЬ в Excel

Начнем с простейших примеров.

Данные для объединения:

Данные для объединения.

Ставим курсор в ячейку Е2 и вызываем мастер функций (кнопка fx). В категории «Текстовые» находим функцию СЦЕПИТЬ. Аргументы – ссылки на ячейки А2, В2, С2 и пробелы:

СЦЕПИТЬ.

Результат объединения значений в ячейках:

Результат.

Такой же результат получим с помощью амперсанда:

Результат 1.

Один из аргументов – текст. Формула: =СЦЕПИТЬ(«слесарь»; » «;A2;» «;B2;» «;C2). Результат:

Результат 2.

И с более сложными задачами справится функция СЦЕПИТЬ в Excel. Примеры:

  1. Соединим текст с датой. Данные находятся в отдельных ячейках. Для столбца «Дата» установлен формат «Дата». Если использовать только функцию СЦЕПИТЬ, дата отобразится в числовом формате. Поэтому добавим функцию ТЕКСТ для форматирования чисел. Формула: Второй аргумент функции ТЕКСТ – формат представления даты. Результат: Результат 3.
  2. Соединим сразу много ячеек в строке. Если писать формулу с функцией СЦЕПИТЬ, получится долго и малоэффективно. Используем маленькую хитрость. Вот наша строка со значениями в отдельных ячейках. В ячейку Н1 ставим знак «равно». Выделяем диапазон со значениями А1:F1. Вводим амперсанд & и пробел “ “. Жмем F9. В строке формул появится формула массива. Ставим курсор в строку формул после знака «равно». Пишем название функции. Фигурные скобки заменяем на круглые и жмем ВВОД. Получаем нужный результат. Результат 4.
  3. Соединим значения через косую черточку («-», «&» и т.п.). Формула будет выглядеть так: = СЦЕПИТЬ (ссылка на ячейку 1; «/»; ссылка на ячейку 2). Результат 5.
  4. Соединим несколько значений в столбце. Функция подходит для значений в строках. Описанный выше способ с формулой массива тоже не сработает.

Преобразуем вертикальный диапазон в горизонтальный с помощью функции ТРАНСП. А затем воспользуемся формулой массива для быстрого соединения значений. В ячейку В1 ставим знак «равно». Пишем ТРАНСП. Указываем диапазон А1:А6. Вводим & и пробел (« »). Жмем F9.

ТРАНСП.

Теперь преобразуем формулу массива, добавив функцию и заменив скобки.

Формула массива.

Обратная функция СЦЕПИТЬ в Excel

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

  • ЛЕВСИМВ (отображает заданную часть символов с начала строки);
  • ПРАВСИМВ (отображает заданную часть символов с конца строки);
  • ПСТР (отображает указанную часть символов, начиная с заданной позиции) и другие.
  1. Извлечем первое слово из строки, применив функцию ЛЕВСИМВ. Аргументы – «текст» (ссылка на строку с искомым значением), «количество знаков» (число символов, которые нужно извлечь). ЛЕВСИМВ.
  2. Извлечем последнее слово из строки с помощью функции ПРАВСИМВ. Синтаксис похожий (как в предыдущем примере). Только количество знаков считается с конца. ПРАВСИМВ.
  3. Извлечем из записи в строке фамилию (второе слово) с помощью функции ПСТР. Аргументы – «текст» (ссылка на строку), «начальная позиция» (номер символа, с которого программа начнет считать число знаков); «количество знаков». В примере: Е2 – «текст», с 9 знака функция вернет 8 символов.

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

Пример формулы массива в Excel
Пример формулы массива
  • Что такое формула массива в Excel
  • Массивы в Excel
    • Отличие массивов от диапазонов в Excel
    • Размерность массивов
    • Виды массивов
  • Методы создания массивов
    • Массив констант, созданный вручную
    • Именованный массив констант
    • С помощью функций
    • С помощью математических операторов
    • С помощью операторов сравнения
    • С помощью других массивов
    • С помощью комбинаций указанных методов
  • Вывод массива на лист
  • Взаимодействие функций Excel с массивами
  • Формулы массива – примеры формул

Формулы массива – загадочная и, казалось бы, сложнейшая сущность в Excel. Но на практике все очень просто, нужно только понять принцип их работы и рассмотреть несколько примеров.

Не знаю, новичок вы в Excel или уже опытный пользователь, но коль судьба привела вас на эту страницу, в ходе прочтения вы:

  • узнаете все о формулах массива;
  • увидите множество примеров таких формул;
  • сможете начать активно их применять на практике.

Поехали!

Формула массива (array formula) – это такая формула, в процессе вычисления которой создается один или несколько массивов. При этом не обязательно как результат вычисления, но и как промежуточный этап.

Будьте на 100% уверены: если формула

  • принимает массив на вход,
  • создает его как промежуточную сущность
  • или выводит как результат вычислений

– это формула массива.

Слишком очевидно и все еще непонятно? Не беда – читаем далее.

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

Массивы в Excel

Массив (array) – это фиксированный набор элементов с фиксированным порядком. Иными словами, все элементы массива, включая их положение в нем, являются его неотъемлемой частью, их порядок и количество нельзя изменить.

Отличие массивов от диапазонов в Excel

В отличие от массива, диапазон (range) – это просто метод адресации к ячейкам в Excel, никак не связанный с самим их содержимым.

Между ячейками диапазона можно вставить дополнительные столбцы и строки, сделав его длиннее и шире, а ссылка на такой диапазон изменится автоматически.

Содержимое диапазона также можно свободно сортировать, если в нем нет объединенных ячеек.

Если же на лист Excel выведен массив, ни сортировка строк, ни вставка строк и столбцов в середину диапазона, в который он выведен, не возможна – это нарушило бы само его определение.

При попытке изменения порядка элементов массива Excel выдаст ошибку. К сожалению, она не очень информативна и не сообщает, какой массив или массивы имеются в виду. Текст ошибки:

Нельзя изменить часть массива.

Ошибка "Нельзя изменить часть массива" в Excel

Ошибка Excel при попытке нарушить целостность массива

Размерность массивов

Как массивы, так и диапазоны в Excel могут быть одномерными (вектор), двумерными (таблица) и трехмерными (многослойная таблица).

Одномерные массивы (векторы) в свою очередь могут быть вертикальными и горизонтальными.

два одномерных и один двумерный массив

Одномерные и двумерные массивы в Excel

Трехмерные массивы – довольно редко используемая на практике сущность.

Виды массивов

По типам элементов в них:
По типу данных –

  • числовой массив (массив чисел)
  • строковый массив (текстовые значения)
  • булевый массив (значения ИСТИНА-ЛОЖЬ)
  • смешанного типа

По изменяемости элементов –

  • массив констант,
  • вычисляемый массив

Методы создания массивов

Создать массив в Excel можно множеством способов. Ниже – подробнее с примерами. Все перечисленные выражения в них являются формулами массива, даже если не содержат в себе функций.

Массив констант, созданный вручную

Одномерные и двумерные массивы констант можно создавать вручную и сразу выводить на лист безо всяких дополнительных операций над ними.

При этом разделителем между элементами слева направо является точка с запятой, а разделителем строк – двоеточие.

Двумерные массивы вводятся построчно, т.е. сначала первая строка через точку с запятой, далее двоеточие, вторая строка через точку с запятой, и так далее.

Именованный массив констант

Если приходится один и тот же набор сущностей использовать часто в формулах, его можно сохранить в книге как именованный массив.

Массив цифр как в примере ниже, поможет быстро найти цифры в текстовых ячейках.

создание именованного массива констант на примере цифр
Создаем именованный массив в Excel

Это позволит больше не вводить его вручную, а обращаться к нему по его имени. Более того, Microsoft Excel помогает при их вводе всплывающими подсказками.

вывод именованного массива на лист

Используем именованный массив

С помощью функций

Указанные выше методы создания массивов довольно редки на практике. Чаще всего массивы создаются автоматически при обращении различных функций к диапазонам в Excel.

Единственное условие для создания массива с помощью функции – функция не должна обладать агрегирующим свойством. Например, СУММ, СРЗНАЧ не создадут массив при обращении к диапазону.

На этом сайте есть статья – как дописать символ, слово или текст к нескольким ячейкам. Там рассматриваются несколько способов, в том числе без создания дополнительного столбца. Но вот еще один – с помощью функции СЦЕПИТЬ и формулы массива:

Добавляем текст в ячейки формулой массива с функцией СЦЕПИТЬ

Формула массива с функциями СЦЕПИТЬ и СИМВОЛ

Кавычки-ёлочки в этой формуле нам помогает создать функция СИМВОЛ.

С помощью математических операторов

Достаточно применить любую из математических операций к диапазону – и будет создан массив, аналогичный по размерам.

Массивы в Excel, полученные с помощью математических операторов

С помощью операторов сравнения

Аналогично математическим операторам, массивы создаются при сравнении диапазонов с константой или значением ячейки. Результатом операции сравнения являются значения ИСТИНА или ЛОЖЬ.

Массивы в Excel, полученные с помощью операторов сравнения

С помощью других массивов

В двух предыдущих примерах массивы создавались на основе взаимодействия диапазона ячеек и некой константы.

Но можно создать массив и по принципу наоборот – на основе одной ячейки, произведя ее взаимодействие (операторами или функциями) с массивом констант.

Размер результирующего массива в таком случае будет аналогичен размеру массива констант.

Еще раз обратите внимание на разделители строк и столбцов в массивах. Столбцы разделяются точкой с запятой, строки – двоеточием.

С помощью комбинаций указанных методов

Как вы уже догадались, возможности фантазии безграничны – можно строить какие угодно комбинации перечисленных выше методов, производя операции над массивами и диапазонами.

Вывод массива на лист

Для корректного вывода массива на лист нужно выделить диапазон ячеек эквивалентной размерности и размера, использовать метод создания массива (вручную или формулой), и нажать

Ctrl+Shift+Enter

Если выделить недостаточное количество ячеек – будут выведены не все элементы массива, а только те, что соответствуют по порядку.
Если выделить избыточное количество – лишние ячейки выдадут ошибку #Н/Д.

На примере результирующий массив должен быть размером 5*5, но перед вводом формулы массива был выделен диапазон 6*6.

Ошибка НД при несоответствии размера диапазона и массива

Взаимодействие функций Excel с массивами

Как мы уже выяснили чуть ранее, некоторые функции могут создавать массивы, если их применить к диапазону ячеек. Они обычно обращаются к одной ячейке, и таких функций в Excel большинство.

Однако, есть ряд функций, называемых агрегирующими. Если им на вход подается диапазон или массив, они возвращают единственное результирующее значение. Самая популярная – функция СУММ. Но есть и множество других.

Из раздела математических функций к таковым также относятся ПРОИЗВЕД, СУММПРОИЗВ, СУММЕСЛИ, СУММЕСЛИМН.

Практически все статистические функции по природе берут на вход диапазон или массив и возвращают одно число. Наиболее популярные из них – СРЗНАЧ, МИН, МАКС, СЧЁТ, СЧЁТЗ, СЧЁТЕСЛИ.

Среди логических функций агрегирующим свойством обладают функция И и функция ИЛИ.

Ну и особняком можно выделить функции поиска. Их нельзя в полной мере назвать агрегирующими, но их взаимодействие с массивами весьма похоже. Ведь они тоже:

  • учитывают весь массив
  • выводят одно значение

ВЫБОР, ВПР, ГПР, ИНДЕКС, ПОИСКПОЗ – эти функции поиска используются наиболее часто.

Формулы массива – примеры формул

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

Приступаем к практическим шагам:

Учимся формулам массива 1/4:

Как создать алфавит в Excel

Понравилась статья? Поделить с друзьями:
  • Excel масштабировать для печати
  • Excel массив целых чисел
  • Excel масштабирование при печати
  • Excel массив фигурные скобки
  • Excel масштаб оси диаграммы