私はスプレッドシートの初心者なので、超わかりやすい質問をしていることをお許しください
エクセル/Googleスプレッドシートでタグを使うことは可能ですか?私は私が読んでいるすべての記事や本を記録するためにスプレッドシートを作成しています。私は “私は、クラウディウス “を読んでいるとします。歴史、小説、伝記、障害、政治、ドラマなどのタグを付けたいと思います。そして、”politics “というタグが付けられた記事や本をすべて表示したい場合は、そのタグで検索・表示・ピボットすることができるかもしれない
できれば、タグはすべて1つのセルに入っていて、それぞれの単語はコンマで区切られていることが望ましいでしょう。もしそれぞれの単語が独立したセルに入っていたら、表は本当にごちゃごちゃしたものになると思います
私は他のラベリングのソリューションもオープンにしています
Thanks!
16 nusantara 2012-03-27
私が知っている限りでは、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
にリストされている項目のすべてのタグを保持する範囲であることに注意してください
EDIT: マッチが1つのセル内のリストではなく列に表示されることを気にしない場合は、ワークシート関数のみを使用してタグのマッチを返すことができます
タイトルが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()
関数の第2引数を調整して、配列の中から最初に小さい値を返すようにする必要があります。例えば、結果のリストが2行目ではなく1行目から始まる場合、SMALL(...,ROW()-1)
の代わりにSMALL(...,ROW())
を使用します
また、タイトルとタグのリストが1行目で始まらない場合は、同様に式を調整する必要があります。IF()
関数の第2引数は、データの最初の行で一致した場合に1を返すように調整する必要があります。例えば、タイトルのリストが1行目ではなく2行目で始まる場合、IF(...,ROW($A$1:$A$6),...)
ではなくIF(...,ROW($A$2:$A$7)-1,...)
を含むように数式を調整する必要があります
13 Excellll 2012-03-27
Another idea:
内蔵のフィルタ機能を使用してください。タグ列でフィルタをかけると、指定したタグを含む行を検索することができます
タグ一覧の行:コメディ、ホラー、ロマンス
は、この3つのタグのいずれかを検索したときに表示されます
2 matt 2015-02-05
これをプログラムで行うことでうまくいく場合もありますが、私は手動でのアプローチがうまくいくことを発見しました。タグに列を使うと、列に0を入力することで簡単に行アイテムにタグを付けることができます。次に、1つの行を持ち、その行のタグカラムにそれぞれ1を入力します(この行に色をつけることができます)。そして、タグでソートするときには、1(青)の行がセパレータとして機能します。フィルタリングされた結果(0)とそれ以外のすべての結果(_)の間に配置されます
これにはいくつかの利点があります。1.毎回タグを入力する必要がありません。2.重複しているものや似たようなものがないか、1つに減らせるものがないか、簡単にクロスリファレンスで確認することができます
2 James Stephen Brown 2016-03-20
私の非VBAのアプローチは、1つの列(H列としましょう)にタグをリストアップし、カンマで項目を区切っています。そこから、「Text to Columns」と「Remove Duplicates」を組み合わせてタグのリストを取得します。これをコピーして、メインシートのヘッダー行に貼り付けます(この場合は、L列から始まります)
=IF((ISNUMBER(SEARCH(L$1,$H2)))=TRUE,1,0)
タグ列(H)は人々が読みやすく、個々のタグ列(0と1を含む)はコンピュータが読みやすくなります。与えられたタグのセット内にとどまっている場合は動的です。そうでない場合は、新しいタグをヘッダーの行に追加してから、数式をコピーする必要があります
そこからは、ピボットテーブルがあなたの味方です
1 user2024015 2018-03-27
タグをどのように使いたいのか、正確にはわかりません。ただ、Google Sheetsでは、SPLIT()関数を使って、タグの文字列(スペースやカンマなどで区切られたもの)を他のいくつかのセルに分割することができますし、Excelにもセル内でタグを検索できる関数があると思います
0 Michael Scheper 2014-10-29