私はスプレッドシートの初心者なので、非常に明白な質問をした場合は、許していただければ幸いです。
Excel/Googleスプレッドシートでタグを使用することはできますか?私が読んでいるすべての記事と本を記録するスプレッドシートを作成しています。 「私、クラウディウス」を読んでいるとしましょう。歴史、フィクション、伝記、障害、政治、ドラマなどのタグを付けたいと思います。次に、「politics」でタグ付けされたすべての記事/本を表示したい場合は、そのタグで検索/表示/ピボットできます。
おそらく、タグはすべて1つのセルに入れ、各単語をコンマで区切る必要があります。各Wordが独自のセルにあると、テーブルが本当に乱雑になると思います。
他のラベリングソリューションも利用できます。
ありがとう!
私の知る限り、Excelでコンマ区切りのタグを解析および要約できる組み込み機能はありません。もちろん、ワークシート関数と小さなVBAを使用して独自のソリューションを作成できます。これを行うための簡単なソリューションを次に示します。
ステップ1:押す Alt+F11 ExcelでVBAエディターペインを開きます。新しいモジュールを挿入し、カスタム関数のこのコードに貼り付けます。
_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
_にリストされている項目のすべてのタグを保持する範囲であることに注意してください。
編集:
一致が1つのセルのリストではなく列に表示されても構わない場合は、ワークシート関数のみを使用してタグの一致を返すことができます。
タイトルが_Column A
_にあり、タグが_Column B
_にあり、検索するタグが_H2
_にある場合、次のarray formula _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
th最小の値を返します。次に、この値はインデックス引数としてINDEX()
関数に渡され、タイトルの配列内のそのインデックスの値が返されます。タイトル配列の行数より大きい数値がINDEX()
に引数として渡されると、エラーが返されます。一致するものが見つからない場合は2000000が引数として渡されるため、エラーが返されます。この場合、IFERROR()
関数は_""
_を返します。
この式でROW()
がどのように使用されているかを理解することが重要です。別の行から始まる結果のリストを表示する場合は、SMALL()
関数の2番目の引数を調整して、配列から最初の最小値を返すようにする必要があります。たとえば、結果のリストが行2ではなく行1で始まる場合は、SMALL(...,ROW())
ではなくSMALL(...,ROW()-1)
を使用します。
また、タイトルとタグのリストが1行目から始まっていない場合は、数式も調整する必要があります。 IF()
関数の2番目の引数は、データの最初の行の一致が1を返すように調整する必要があります。たとえば、タイトルのリストが行1ではなく行2で始まる場合は、 IF(...,ROW($A$2:$A$7)-1,...)
の代わりにIF(...,ROW($A$1:$A$6),...)
を含める式。
別のアイデア:
組み込みのフィルター機能を使用します。 [タグ]列でフィルタリングすると、特定のタグを含む行を検索できます。
タグリストのある行:コメディ、ホラー、ロマンス
これら3つのタグのいずれかを検索すると表示されます。
これをプログラムで行うとうまくいく場合もありますが、手動の方法でうまくいくことがわかりました。タグに列を使用すると、列に0を入力することで行アイテムに簡単にタグを付けることができます。次に、1つの行があり、その行の各タグ列に1を入力します(この行に色を付けることができます)。次に、いずれかのタグでソートすると、1(青)の行がセパレーターとして機能します。フィルタリングした結果(0s)とその他すべて(_)の間。
これにはいくつかの利点があります。 1.毎回タグを入力する必要はありません。 2.簡単に相互参照して、1つに削減できる重複または類似のアイテムがあるかどうかを確認できます。
私の非VBAアプローチは、タグを1つの列(列Hとしましょう)にリストし、項目をコンマで区切ることです。そこから、「テキストから列へ」と「重複の削除」の組み合わせを使用して、タグのリストを取得します。これを過ぎてメインシートのヘッダー行にコピーします(この場合、列Lから開始します)。次に、個々のタグヘッダーの下の各セルに、次のように入力します。
=IF((ISNUMBER(SEARCH(L$1,$H2)))=TRUE,1,0)
これにより、両方の長所が得られます。タグ列(H)は読みやすくなっています。個々のタグ列(0と1を含む)は、コンピューターで簡単に読み取ることができます。特定のタグのセット内に留まる場合は動的です。そうでない場合は、新しいタグをヘッダー行に追加してから、数式をコピーする必要があります。
そこから、ピボットテーブルはあなたの友達です。
タグをどのように使用するかは正確にはわかりません。しかし、Googleスプレッドシートでは、 SPLIT() 関数を使用して、タグの文字列(スペース、カンマ、または必要なもので区切られている)を他のいくつかのセルに分割できます。タグのセルを検索できる機能があります。