13

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

Можно ли использовать теги в Excel/Google Spreadsheet? Я создаю электронную таблицу для регистрации всех статей и книг, которые читаю. Скажи, что я читаю "Я, Клавдий". Я хочу дать ему эти теги: история, художественная литература, биография, инвалидность, политика, драма. Затем, если я хочу отобразить все статьи / книги, отмеченные тегом "policy", я могу, возможно, выполнить поиск / отображение / поворот с этим тегом.

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

Я открыт и для других решений по маркировке.

Спасибо!

5 ответов5

13

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

Шаг 1: Нажмите Alt+F11, чтобы открыть панель редактора VBA в Excel. Вставьте новый модуль и вставьте в этот код для пользовательской функции.

Public Function CCARRAY(rr As Variant, sep As String)
'rr is the range or array of values you want to concatenate.  sep is the delimiter.
Dim rra() As Variant
Dim out As String
Dim i As Integer

On Error GoTo EH
rra = rr
out = ""
i = 1

Do While i <= UBound(rra, 1)
    If rra(i, 1) <> False Then
        out = out & rra(i, 1) & sep
    End If
    i = i + 1
Loop
out = Left(out, Len(out) - Len(sep))
CCARRAY = out
Exit Function

EH:
rra = rr.Value
Resume Next

End Function

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

Шаг 2: В листе введите в ячейку (H2 в примере ниже) тег, который вы хотите найти. В ячейку справа введите следующую формулу, нажав Ctrl+Shift+Enter.

=IFERROR(CCARRAY(IF(NOT(ISERROR(FIND(H2,$B$2:$B$6))),$A$2:$A$6),", "),"No matches found.")

Нажав Ctrl+Shift+Enter, вы вводите формулу в виде формулы массива. Он будет отображаться в виде {...} в строке формул. Обратите внимание, что в формуле $B$2:$B$6 - это диапазон, содержащий все теги для элементов, перечисленных в $A$2:$A$6 .

РЕДАКТИРОВАТЬ:
Если вы не возражаете против того, чтобы ваши совпадения были перечислены в столбце, а не в списке в одной ячейке, вы можете вернуть совпадения для тегов, используя только функции листа.

Если ваши заголовки находятся в Column A , теги - в Column B , а тег, который вы ищете, - в H2 , вы можете использовать следующую формулу массива в I2 и заполнять ее по мере необходимости:

=IFERROR(INDEX($A$1:$A$6,SMALL(IF(NOT(ISERROR(FIND($H$2,$B$1:$B$6))),ROW($B$1:$B$6),2000000),ROW()-1)),"")

Формула работает, сначала формируя массив чисел на основе того, содержит ли теги в каждой строке искомый термин. Если совпадение найдено, номер строки сохраняется в массиве. Если он не найден, 2000000 сохраняется в массиве. Затем, часть SMALL(<array>,ROW()-1) формулы возвращает ROW()-1 е наименьшее значение из массива. Затем это значение передается в качестве аргумента индекса в функцию INDEX() , где возвращается значение по этому индексу в массиве заголовков. Если число, превышающее количество строк в массиве заголовков, передается в INDEX() в качестве аргумента, возвращается ошибка. Так как 2000000 передается в качестве аргумента, когда совпадений не найдено, возвращается ошибка. Функция IFERROR() затем возвращает "" в этом случае.

Важно понять, как ROW() используется в этой формуле. Если вы хотите отобразить список результатов, начиная с другой строки, вам нужно настроить второй аргумент функции SMALL() так, чтобы он возвращал первое наименьшее значение из массива. Например, если ваш список результатов начинается со строки 1 вместо строки 2, вы должны использовать SMALL(...,ROW()) вместо SMALL(...,ROW()-1) .

Кроме того, если ваш список заголовков и тегов не начинается в строке 1, вам также необходимо изменить формулу. Второй аргумент функции IF() должен быть скорректирован так, чтобы совпадение в первой строке ваших данных возвращало 1. Например, если ваш список заголовков начинается со строки 2 вместо строки 1, вам потребуется формула для включения IF(...,ROW($A$2:$A$7)-1,...) вместо IF(...,ROW($A$1:$A$6),...) .

2

Хотя в некоторых случаях это программно работает хорошо, я обнаружил, что ручной подход работает для меня. Используя столбцы для тегов, вы можете легко пометить элемент строки, введя 0 в столбце. Затем у вас есть одна строка и введите 1 в каждом столбце тега для этой строки (вы можете покрасить эту строку). Затем, когда вы сортируете по одному из тегов, строка 1s (синяя) действует как разделитель. Между вашими отфильтрованными результатами (0 с) и всем остальным (_).

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

1

Еще одна идея:

Используйте встроенные функции фильтра. Фильтруйте по столбцу Теги, затем вы можете искать строки, содержащие данный тег.

Строка со списком тегов: комедия, ужасы, мелодрама

будет отображаться при поиске любого из этих трех тегов.

1

Мой не VBA подход состоит в том, чтобы перечислять теги в одном столбце (скажем, в столбце H), разделяя элементы запятыми. Оттуда я использую комбинацию "Текст в столбцы" и "Удалить дубликаты", чтобы получить мой список тегов. Я копирую это в строку заголовка моего основного листа (в данном случае, начиная со столбца L. Затем в каждой ячейке под заголовками отдельных тегов введите следующее:

=IF((ISNUMBER(SEARCH(L$1,$H2)))=TRUE,1,0)

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

Оттуда сводные таблицы ваш друг.

0

Мне не совсем понятно, как вы хотите использовать теги. Но в Google Sheets вы можете использовать функцию SPLIT(), чтобы разбить строку тегов (разделенных пробелами, запятыми или чем угодно) на несколько других ячеек, и я уверен, что даже в Excel есть функция, которая может искать ячейка для тега.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .