Как пометить / пометить элементы в электронной таблице

14

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

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

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

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

Благодарность!

Nusantara
источник
Я никогда не видел решения для тегов в Excel, но это не значит, что его нет. Возможно проверьте evernote
Raystafarian

Ответы:

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),...).

Excellll
источник
Вау, это работает отлично! Я предпочитаю это в Google Spreadsheet, хотя. Но он использует JavaScript. Я постараюсь сделать что-то подобное там, хотя я полный и полный новичок с языком. Еще два вопроса: что значит «обобщать» данные? Что делает ваш код на шаге 1? Я задаю этот вопрос, в частности, потому что думаю, что, возможно, мне придется сделать то же самое с JavaScript в Google Spreadsheet. Большое спасибо за ваше решение!
Нусантара
Отлично, я рад, что это полезно. Под «суммированием» я имею в виду создание списка совпадающих названий через запятую. VBA требуется для этой цели. Со встроенными функциями Excel довольно просто создать формулу массива, которая может выбирать совпадающие теги. Однако невозможно вернуть эти результаты в одной ячейке без VBA, потому что CONCATENATEфункция в Excel не может принимать массив в качестве аргумента (она только читает первый элемент из массива, если вы попробуете его). Функция VBA предназначена для создания разделенных запятыми списков из массива значений.
Excellll
После написания вышеуказанного ответа я понял, что есть способ сделать что-то подобное без VBA. Вместо возврата списка совпадающих заголовков в одной ячейке может быть возвращен столбец совпадающих заголовков. Я могу отредактировать свой пост, чтобы включить этот метод, если вам интересно.
Excellll
Это возможно без VBA? Это было бы лучше, я думаю. Если это не слишком неудобно, да, было бы здорово, если бы вы могли включить метод, который вы упомянули. Это было бы очень полезно для всех, кто ищет эту тему! Спасибо за объяснение "обобщения". Я тоже попробовал конкатенацию, но, да, я не мог использовать ее так, как хотел. Теперь я знаю, что это не может вести себя как аргумент.
Нусантара
Да, это возможно. Я постараюсь опубликовать решение здесь через несколько минут. Извините за задержку!
Excellll
2

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

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

Джеймс Стивен Браун
источник
1

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

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

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

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

матовый
источник
1

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

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

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

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

user2024015
источник
0

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

Майкл Шепер
источник