スプレッドシートに 2 つの列があり、それぞれの組み合わせが何回表示されるかを判断する数式を記述する必要があります。例:
A 1
A 1
A 2
A 2
A 2
B 1
B 1
B 2
結果は次のようになります:
A 1 2
A 2 3
B 1 2
B 2 1
昨日は SQL テーブルにインポートして簡単に実行できましたが、スプレッドシートに 2 つの列を配置するだけで、誰でも実行できるようにする必要があります。そうすると、2 番目のシートに数量テーブルが入力されます。
答え1
編集: シンプルな解決策(SaintWacko による)
2 つの列を連結します。
=$A2&$B2
連結された列を「行ラベル」と「値」として使用して、ピボット テーブルを作成します。次に、「値」がカウントを計算していることを確認します (デフォルトである必要があります)。
複雑な解決策
列 C の 2 つの列を連結できます。
=$A2&$B2
列 D では、項目が別の項目の重複であるかどうかを判別して、各項目の 1 つに対してのみ値が true になるようにする関数が必要になります (これは、項目がデータ列で並べ替えられている場合にのみ機能しますが、マクロは後でそれを行います)。
=$C1<>$C2
次に、列 E で一致する場合の数を計算します。
=COUNTIF($C:$C,$C2)
マクロはすべての組み合わせを検索し、シート 2 に配置してカウントをコピーします。以下のコードにはいくつかの仮定が入っていますが、必要に応じて変更できる可能性があります。
Option Explicit
Sub GetCombinations()
Dim sheet1, sheet2 As Worksheet
Set sheet1 = Worksheets(1)
Set sheet2 = Worksheets(2)
Dim sStartColumn As String
Dim iTopRow As Long
Dim sEndColumn As String
Dim iBottomRow As Long
sStartColumn = "A"
iTopRow = 1
sEndColumn = "E"
iBottomRow = sheet1.UsedRange.Rows.Count
Dim Rng As Range
Dim sRange1 As String
sRange1 = sStartColumn & CStr(iTopRow) & ":" & sEndColumn & CStr(iBottomRow)
Set Rng = sheet1.Range(sRange1)
Rng.Sort Key1:=Range("A2"), Order1:=xlAscending, _
Key2:=Range("B2"), Order2:=xlAscending, _
Orientation:=xlSortColumns, Header:=xlYes
Dim i, j As Integer
j = 2
For i = 2 To iBottomRow
If sheet1.Cells(i, 4) Then
sheet2.Cells(j, 1) = sheet1.Cells(i, 1)
sheet2.Cells(j, 2) = sheet1.Cells(i, 2)
sheet2.Cells(j, 3) = sheet1.Cells(i, 5)
j = j + 1
End If
Next i
End Sub
それで大丈夫でしょう。