0

グループ化された値のインデックスからリストを作成しようとしています。
これはこれと非常によく似ていますが、私のグループにも「タグ」があり、リストが複雑になっています。

これが私の INDEX タブの例です:

  | A  | B  | C  |  D  |
-------------------------
1 | 1  | 1  | 1  | CV  | 
2 | 1  | 2  | 2  | IS  |
3 | 1  | 3  | 3  | IS  |
4 | 2  | 4  | 5  | GN  |
5 | 2  | 6  | 7  | PS  |
6 | 4  | 8  | 11 | SQ  |
7 | 2  | 12 | 13 | SS  |
8 | 1  | 14 | 14 | AT  |
9 | 15 | 15 | 29 | AT  |
10| 4  | 30 | 33 | TYP |

A はページ数、B は最初のページ、C は最後のページ、D はタグです。また、タグの集計を継続できるように列を追加したいと思います。

  | A  | B  | C  |  D  |  E   |  F   |
---------------------------------------
1 | 1  | 1  | 1  | CV  | CV1  | CV1  |  
2 | 1  | 2  | 2  | IS  | IS1  | IS1  |
3 | 1  | 3  | 3  | IS  | IS2  | IS2  |
4 | 2  | 4  | 5  | GN  | GN1  | GN2  |
5 | 2  | 6  | 7  | PS  | PS1  | PS2  |
6 | 4  | 8  | 11 | SQ  | SQ1  | SQ4  |
7 | 2  | 12 | 13 | SS  | SS1  | SS2  |
8 | 1  | 14 | 14 | AT  | AT1  | AT1  |
9 | 15 | 15 | 29 | AT  | AT2  | AT16 |
10| 4  | 30 | 33 | TYP | TYP1 | TYP4 |

タグは複数回発生する可能性があり、連続した行にない場合があることに注意してください。

LIST タブでこれをどのように表示したいかを次に示します。

  | A   |
---------
1 | CV1 |
2 | IS1 |
3 | IS2 |
4 | GN1 |
5 | GN2 |
6 | PS1 |
7 | PS2 |
8 | SQ1 |
9 | SQ2 |
10| SQ3 |
11| SQ4 |
and so on...

数式を使用して INDEX タブに追加の列を追加するにはどうすればよいですか?
数式を使用して LIST を作成するにはどうすればよいですか? (...これは可能ですか?)

4

2 に答える 2

1

数式は非常に簡単に記述できるはずです。何を達成しようとしているのかを考えてみてください。

最初の数式 (列 E) は、タグの実行中の数 (列 D) を取得しているだけです。したがって、最初のタグから、タグ名が同じである対応するタグまでのすべてのセルをカウントする必要があります。そのカウントは、タグ名に追加されます。

=$D1 & COUNTIF($D$1:$D1, $D1)

2 番目の式 (F 列) は、ページ数 (A 列) の累計をとっているだけです。したがって、最初のタグから、タグ名が同じである対応するタグまで、対応するすべてのページ数の合計を取得する必要があります。合計はタグ名に追加されます。

=$D1 & SUMIF($D$1:$D1, $D1, $A$1:$A1)

列は変更されず、範囲の開始行も変更されないことに注意してください (したがって、絶対範囲を使用する必要があります)。変更されるのは、タグの行と終了範囲の行だけです。


単純な数式でそのリストを生成することはできないと思います。私の知る限り、数式は別の範囲と 1 対 1 で対応している必要があります。単一の範囲から複数の値が得られる可能性があるため、数式ではうまくいきません。それを生成するには、VBA スクリプトを作成する必要があります。

Sub GenerateList()

    Dim usedRange As Range
    Dim count As Dictionary

    Set usedRange = Worksheets("Index").usedRange
    Set count = CountValues(usedRange)

    Dim output As Range
    Dim row As Integer
    Dim key As Variant

    Set output = Worksheets("List").Columns("A").Rows
    output.ClearContents
    row = 1
    For Each key In count.Keys()
        Dim i As Integer

        For i = 1 To count(key)
            output(row) = key & i
            row = row + 1
        Next i
    Next key

End Sub
Function CountValues( _
        usedRange As Range, _
        Optional tagsColumn As String = "D", _
        Optional valuesColumn As String = "A") As Dictionary

    Dim tags As Range
    Dim values As Range

    Set tags = usedRange.Columns(tagsColumn).Rows
    Set values = usedRange.Columns(valuesColumn).Rows

    Dim map As New Dictionary
    Dim tag As Range
    For Each tag In tags
        map(tag.Value) = map(tag.Value) + values(tag.row)
    Next tag

    Set CountValues = map

End Function

これは を使用するDictionaryため、スクリプト ランタイムを参照する必要があります。

于 2013-04-21T10:46:30.727 に答える