- ベストアンサー
エクセルである範囲のセルから文字列を抜き出して集計
エクセルである範囲のセルの中から文字列を抜き出して出現回数を求めたいと思っております。 A1:あああ,いいい,ううう A2:いいい,えええ b1:かかか,えええ,ううう B2:ううう,いいい,おおお 解答 あ:1 い:3 う:3 え:2 お:1 よろしくお願いいたします。
- みんなの回答 (7)
- 専門家の回答
エクセルである範囲のセルの中から文字列を抜き出して出現回数を求めたいと思っております。 A1:あああ,いいい,ううう A2:いいい,えええ b1:かかか,えええ,ううう B2:ううう,いいい,おおお 解答 あ:1 い:3 う:3 え:2 お:1 よろしくお願いいたします。
お礼
謝るのはこちらの方です。。。 >For i = 1 To ws1.Cells(Rows.Count, 1).End(xlUp).Row に変更いたしましたが、同じ結果となりました。 しかし、出現回数上位のキーワードが大分採れましたので 非常に助かりました。 感謝の言葉もございません。 私に知識がないばかりにデバックの原因を探る事ができずに申し訳ありません。 tom04様をベストアンサーに選ばせていたいただくことは変わりません。 もし、他にも考えられることがございましたらもう少しお付き合い頂けたらと思いますのでよろしくお願い致します。 現在のモジュールの記述は以下となっております。 Sub test() 'この行から Dim i As Long Dim j As Long Dim k As Long Dim n As Long Dim cnt As Long Dim myArray As Variant Dim tmp As Variant Dim ws1 As Worksheet, ws2 As Worksheet Set ws1 = Worksheets("Sheet1") Set ws2 = Worksheets("Sheet2") ws2.Range("A:B").ClearContents For i = 1 To ws1.Cells(Rows.Count, 1).End(xlUp).Row For j = 1 To 2 If InStr(ws1.Cells(i, j), ",") Then myArray = Split(ws1.Cells(i, j), ",") For k = 0 To UBound(myArray) tmp = myArray(k) If WorksheetFunction.CountIf(ws2.Columns(1), tmp) = 0 Then cnt = cnt + 1 With ws2.Cells(cnt, 1) .Value = tmp .Offset(, 1) = 1 End With Else n = WorksheetFunction.Match(tmp, ws2.Columns(1), False) ws2.Cells(n, 2) = ws2.Cells(n, 2) + 1 End If Next k End If Next j Next i End Sub 'この行まで