2017-02-03 16 views
0

私はExcelのスプレッドシートにさまざまなものを含むたくさんの行を持っています。基本的には次のようになります。異なるセルのタグを集計して合計します

Element 1 | Element 2 | Tags 
------------------------------------------------ 
    Example 1.1 | Example 1.2 | tag1,tag2,tag5 
    Example 2.1 | Example 2.2 | tag2,tag4,tag6 
    Example 3.1 | Example 3.2 | tag1,tag3,tag6 
    Example 4.1 | Example 4.2 | tag1,tag3,tag5 
    Example 5.1 | Example 5.2 | tag1,tag4,tag5 

だから、これは重要ではありません、私が求めているもののために、最初の2列にものを無視します。

tag1: 4 
tag5: 3 
tag2: 2 
tag3: 2 
tag4: 2 
tag6: 2 

:しかし、私がしたい事は、タグを持つすべての行/セルをカウントして、それをまとめるので、私は(この場合)を取得、次の最後の列(タグ)でありますだから原則として、選択されたすべてのセルに含まれる各タグの数を調べ、それを合計して各タグの数を吐き出すだけです。これはExcelで行うことができますか?

=SUM(IF(ISNUMBER(SEARCH("tag1", C:C)),1,0)) 

にCtrl +シフトを押す+式配列数式を作成するために入力する必要がある式に入れた後:事前

答えて

1

に私はこのような操作を行うために配列数式を使用することになり

感謝。 Excelは自動的に中括弧 '{...}'を追加して配列式を示します。

これは、タグが「cタグ」であることを前提としています。

A10は、(これは、選択範囲をループし、タグ、あなたがかもしれないというワークシートに結果を書き込み、次のVBAは、トリックを行う必要がありますタグのリストを取得するためには、あなたのタグ値

を持って

=SUM(IF(ISNUMBER(SEARCH(A10, C:C)),1,0)) 

)このワークシートを作成する必要があります。

Sub GetTags() 
    Dim dict As Scripting.Dictionary 
    Set dict = New Scripting.Dictionary 
    ' 
    Dim cellTags() As String 
    Dim tag As Variant 
    Dim cell As Range 
    Dim selectedRange As Range 
    Set selectedRange = Application.Selection 

    For Each cell In selectedRange.Cells 
     cellTags = Split(cell.Value, ",") 
     For Each tag In cellTags 
      If Not dict.Exists(Trim(tag)) Then 
       dict.Add Trim(tag), Trim(tag) 
      End If 

     Next tag 
    Next cell 

    Dim StartRow, i As Long 
    StartRow = 1 
    For i = 0 To (dict.Count - 1) 
     ActiveWorkbook.Sheets("Tags").Range("A" & i + StartRow).Value = dict.Items(i) 
    Next 
End Sub 
+0

しかし、これではないだろうRをすべてのタグを知ってもらえますか?私は現在、異なるタグを持つ10.000の細胞を持っています。そして、私は現在、すべてのタグのリストを持っていません。 –

+0

FWIW配列式は、式ごとに100万回以上繰り返すため、完全な列参照を避ける必要があります。これは、計算時間に抗力になる可能性があります。 –

+0

@DenverDang各セルを反復処理して一意のタグを収集するには、辞書またはコレクションでvbaが必要です。 –

2

あなたはCOUNTIF()を使用することができます:

=COUNTIF(C:C,"*" & "tag1" & "*")