Як позначити / позначати теги в електронній таблиці


14

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

Чи можна використовувати теги в таблиці Excel / Google? Я створюю електронну таблицю, щоб вносити всі статті та книги, які я читаю. Скажіть, я читаю "Я, Клавдій". Я хочу дати йому ці теги: історія, художня література, біографія, інвалідність, політика, драматургія. Тоді, якщо я хочу відобразити всі статті / книги з тегом "політика", я, можливо, можу шукати / відображати / перетворювати цей тег.

Можливо, бажано, щоб усі теги були в одній комірці, кожне слово було розділене комою. Якби кожне слово було у комірці власноруч, це зробило б стіл справді безладним, я думаю.

Я також відкритий для інших рішень для маркування.

Дякую!


Я ніколи не бачив рішення тегів у 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.

введіть тут опис зображення

EDIT:
Якщо ви не заперечуєте за тим, щоб ваші збіги були вказані у стовпчику, а не у списку в одній комірці, ви можете повернути збіги для тегів, використовуючи лише функції робочого аркуша.

Де ваші назви в 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),...).


Ого, це прекрасно працює! Я вважаю за краще це в електронній таблиці Google. Але він використовує JavaScript. Я спробую там зробити щось подібне, хоч я і є повна початкова мова з мови. Ще два питання: Що означає "узагальнити" дані? Що робить ваш код на кроці 1? Я задаю це запитання, зокрема, тому що я думаю, що мені, можливо, доведеться робити те саме з JavaScript у Google Spreadsheet. Дуже дякую за ваше рішення!
нусантара

Чудово, я радий, що це корисно. Під «підбиття підсумків» я маю на увазі створення списку відповідних заголовків, розділених комами. Для цього потрібна VBA. З вбудованими функціями Excel досить просто створити формулу масиву, яка може вибирати відповідні теги. Однак повернути ці результати в одну клітинку без VBA неможливо, оскільки CONCATENATEфункція в Excel не може приймати масив як аргумент (він читає перший елемент з масиву лише якщо ви спробуєте його). Функція VBA створена для створення списків, розділених комами, з масиву значень.
Excellll

Написавши вищевказану відповідь, я зрозумів, що є спосіб зробити щось подібне без VBA. Замість повернення списку відповідних заголовків в одній комірці можна повернути стовпець відповідних заголовків. Я можу відредагувати свою публікацію, щоб включити цей метод, якщо вам це цікаво.
Excellll

Це можливо без VBA? Це було б краще, я думаю. Якщо це не надто незручно, так, було б дивним, якщо ви могли б включити згаданий вами метод. Було б дуже корисно тим, хто шукає цю тему! Дякуємо за пояснення "узагальнення". Я теж спробував конкатенацію, але так, не зміг використати його так, як хотів. Тепер я знаю, що він не може вести себе як аргумент.
нусантара

Так, це можливо. Я спробую опублікувати рішення тут через кілька хвилин. Вибачте за затримку!
Excellll

2

Хоча це програмно працює добре, в деяких випадках я виявив, що ручний підхід працював для мене. Використовуючи стовпці для тегів, ви можете легко позначати елемент рядка, вводячи 0 у стовпчик. Потім у вас є один рядок і вводите 1s у кожен стовпчик тегів для цього рядка (ви можете пофарбувати цей рядок). Тоді, коли ви сортуєте за одним із тегів, рядок 1s (синій) виконує роль роздільника. Між вашими відфільтрованими результатами (0s) та всім іншим (_).

Це має кілька переваг. 1. Вам не потрібно вводити тег кожен раз. 2. Ви можете легко перехрестити посилання, щоб перевірити, чи є у вас дублікати або подібні елементи, які можна зменшити до одного.


1

Ще одна ідея:

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

Рядок із списком тегів: комедія, жах, роман

відображатиметься під час пошуку будь-якого з цих трьох тегів.


1

Мій підхід, який не VBA, полягає в тому, щоб перерахувати теги в одному стовпчику (скажімо, стовпець Н), відокремлюючи елементи комами. Звідти я використовую комбінацію "Текст до стовпців" та "Видалити дублікати", щоб отримати мій список тегів. Я копіюю це через попередній заголовок мого основного аркуша (у цьому випадку, починаючи з стовпця L. Потім, у кожну клітинку під окремими заголовками тегів введіть наступне:

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

Це дає найкраще з обох світів - стовпчик тегів (H) людям легко читати; окремі стовпчики тегів (з їх 0 і 1s) для комп'ютера легко читати. Це динамічно, якщо ви залишаєтесь у заданому наборі тегів; якщо ні, вам потрібно додати новий тег до рядка заголовка, а потім скопіювати формули.

Звідти зведені таблиці - ваш друг.


0

Мені не ясно, як саме ви хочете використовувати теги. Але в Google Таблицях ви можете використовувати функцію SPLIT (), щоб розділити рядок тегів (розділених пробілами, комами чи будь-яким іншим) на кілька інших комірок, і я впевнений, що навіть у Excel є функція, яка може шукати комірка для тегу.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.