Excelデータベースがあり、重複したデータを手動で結合しないようにしています。タグ列を除いて、基本的に同じリストがたくさんあります。私がしたいのは、これらの5つのリストを1つのリストに結合して、カテゴリーを単一のセル内のコンマ区切りリストにすることです。
これを回して
これに
これを達成する方法はありますか?私のドキュメントには数千のリストがあるため、手動での編集ルートを避けようとしているのは明らかです。私はExcelの初心者です。手持ちやチュートリアルで教えていただければ幸いです。
これは、数式を使用して行うこともできます。この例を機能させるには、データを最初の列でソートする必要があり、ヘッダー行が必要になります。
さらに2つの列(CおよびD)が必要になります。最初に、列Aのデータがその上の行と同じである場合は基本的に列Bのデータを連結することを示す数式を追加します。それ以外の場合は連結をリセットします。次の列には、後でソートできるように最終的な連結を識別するための式が含まれます。
これは、列AとBのリストとカテゴリを使用して行う方法です(ここでも、データは列Aでソートする必要があり、ヘッダー行が必要です)。
結果は次のとおりです。次に、範囲全体をコピーして、値を別のシートに貼り付けます。列Dのゼロの行は、使用したいものです。列Dで並べ替えると、上に移動します。
これにより、ソースシートから新しいシートが生成され、複製が連結されます。
次のコードを使用するには、VBAエディターの新しいモジュールに追加する必要があります
VBAエディターを開くショートカットはAlt+F11
(Windowsの場合)およびAlt+Fn+F11
(Mac用)
エディターが開いたら、メインメニューバーの[挿入]メニューから選択して、新しいモジュールを追加します。コードを受け入れる準備ができているモジュールが自動的に開きます。そうでない場合は、プロジェクトエクスプローラーから選択する必要があります(「ModuleN」という名前になります。Nは次に使用可能な番号です)。
"Scripting.Dictionary"がosxで利用できるかどうかはわかりませんが、試してみるのに支障はありません。
Option Explicit
Sub Main()
Dim Source As Worksheet: Set Source = ThisWorkbook.Worksheets("Sheet1")
Dim Destination As Worksheet: Set Destination = ThisWorkbook.Worksheets("Sheet2")
Dim Records As Object: Set Records = CreateObject("Scripting.Dictionary")
Dim Data As Variant
Dim Index As Long
Dim Row As Integer: Row = 1
Data = Source.Range("A1", "B" & Source.Rows(Source.UsedRange.Rows.Count).Row).Value2
For Index = LBound(Data, 1) To UBound(Data, 1)
If Records.Exists(Data(Index, 1)) Then
Destination.Cells(Records(Data(Index, 1)), 2).Value2 = Destination.Cells(Records(Data(Index, 1)), 2).Value2 & ", " & Data(Index, 2)
Else
Records.Add Data(Index, 1), Row
Destination.Cells(Row, 1).Value2 = Data(Index, 1)
Destination.Cells(Row, 2).Value2 = Data(Index, 2)
Row = Row + 1
End If
Next Index
Set Records = Nothing
End Sub