[[20130802140256]] 『メモ帳データをエクセルで処理したい』(米) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『メモ帳データをエクセルで処理したい』(米)

 今回限りの処理なのですが、
 膨大な量があるため手作業だと出来ません。。
 エクセルでメモ帳のデータを集計したいのですが、
 それは可能でしょうか?

 メモ帳に、
 = ZZZZZ     =aaabbbccc;dddeeefff;ggghhhiii;jjjkkklll
 = YYYYY     =aaabbbccc;mmmnnnooo;pppqqqrrr;jjjkkklll
 以下数百行程続く。。

 上記のようなメモがかかれています。
 ※ = aaabbbccc;dddeeefff;ggghhhiii;jjjkkklll
   というのは";"で区切っているという意味です。

 このメモ帳をエクセルで集計したいと思っております。
 ZZZZZ や = YYYYY ←この部分と、";"で区切られている
 = aaabbbccc;dddeeefff;ggghhhiii;jjjkkklll ←の部分でマトリックスを作りたいです。

 【希望の形】
    A          B          C          D           E         F         G
 1         aaabbbccc  dddeeefff  ggghhhiii  jjjkkklll  mmmnnnooo  pppqqqrrr
 2 ZZZZZ       ○         ○         ○         ○
 3 YYYYY       ○                               ○         ○        ○
 以下続く

 aaabbbccc達はメモ帳データでは被っている所もあるので、
 そこを統合したい。
 ZZZZZやYYYYYはみんなバラバラです。

 マトリックスにして、A列のものがB1他列1のものとで、
 使用されていたら"○"を入れたいです。

 これはエクセルで可能でしょうか?
 マクロか何かを作らなければできないでしょうか?
 aaabbbcccのところが膨大な量すぎて被っているのは1つにし上記のように表示させるのも難しいです。。

 どなたかご教授ください、宜しくお願いします。。

 【訂正】
 メモ帳データを少し変えてエクセルにコピペしたところ、
 ZZZZZたちのところはA列に、その他=aaabbbccc;〜のところはB列になりました。
 ";"ごとにくぎってかぶっているところはまとめて1つで表示・・
 をエクセルの機能でできるでしょうか?

 (米)

 メモ帳というか、テキストファイルでしょうか。
 提示例の形式のファイルを処理するサンプルです。

 Sub Sample()
    Cells.Clear
    '★ VBE の 参照設定で Microsoft Scripting Runtime にチェック
    Dim fso As New Scripting.FileSystemObject
    Dim dic As New Scripting.Dictionary

    Dim dLines
    dLines = Split(fso.OpenTextFile("D:\data.txt").ReadAll(), vbNewLine)  '★ 実際のファイルパスに変更
    Dim dts, ky, c, r As Long, dLine
    r = 1
    For Each dLine In dLines
        r = r + 1
        If Len(dLine) - Len(Replace(dLine, "=", "")) <> 2 Then
            MsgBox r & "行目のデータ形式が想定と異なっています。:[" & dLine & "]"
        Else
            dts = Split(Replace(dLine, "=", ";"), ";")
            Cells(r, "A").Value = Trim(dts(1))
            For c = 2 To UBound(dts)
                ky = Trim(dts(c))
                If ky <> "" Then
                    If Not dic.Exists(ky) Then
                        Cells(1, dic.Count + 2).Value = ky
                        dic(ky) = dic.Count + 2
                    End If
                    Cells(r, dic(ky)).Value = "○"
                End If
            Next
        End If
    Next
 End Sub
 (Mook) ・・・署名忘れてました。


 とりあえず
 > ";"ごとにくぎってかぶっているところはまとめて1つで表示・・
 の所は、「区切り位置」で区切り文字として指定すると分けられると思います。

 エクセルのバージョンは何ですか?

 (HANA)

 最初のレスの方、HANAさん、
 お早いレスありがとうござます、嬉しいです。
 ファイル名を実際のものに変えて実行してみましたが
 「コンパイルエラー ユーザー定義型は定義されていません」
 と表示になってしまいました。

 HANAさん、
 バージョンは2003を使用しております。

 とりあえずエクセルにコピペしたものをいじってみたところ、
     A          B          C          D           E      
 1       
 2 ZZZZZ    aaabbbccc  dddeeefff  ggghhhiii  jjjkkklll  
 3 YYYYY    aaabbbccc  jjjkkklll  mmmnnnooo  pppqqqrrr 
 以下続く

 ";"でわけたものは1つ1つのセルにすることができました。
 なんとかこのあと希望通りのものにしたいのですがこのあとどうすれば良いか分からないです。。。

 (米)

 「VBE の 参照設定で Microsoft Scripting Runtime にチェック」
 をしていないのではないでしょうか。
 こちらでは動作確認しています。

 あと、エラー時はエラーが出た行を記載下さい。
 (Mook)

 > 今回限りの処理なのですが、
 って事なんで、テキトーなコードですが。。。

 '------
Sub 米()
Dim dic As Object, tbl As Variant, x As Variant
Dim i As Long, ii As Long
    Set dic = CreateObject("Scripting.Dictionary")
        With Sheets("Sheet1") '★データがあるシート
            tbl = .Range("A1:E" & .Range("A" & Rows.Count).End(xlUp).Row).Value
        End With

        For i = 2 To UBound(tbl, 1)
            For ii = 2 To UBound(tbl, 2)
                If tbl(i, ii) <> "" Then
                    If Not dic.Exists(tbl(i, ii)) Then
                        dic(tbl(i, ii)) = dic.Count + 1
                    End If
                End If
            Next
        Next

        ReDim x(1 To UBound(tbl, 1) + 1, 1 To dic.Count + 2)
        For i = 2 To UBound(tbl, 1)
            x(i, 1) = tbl(i, 1)
            For ii = 2 To UBound(tbl, 2)
                If tbl(i, ii) <> "" Then
                    x(1, dic(tbl(i, ii)) + 1) = tbl(i, ii)
                    x(i, dic(tbl(i, ii)) + 1) = "○"
                End If
            Next
        Next

        With Sheets("Sheet2") '★結果を書き出すシート
            .Cells.ClearContents
            .Range("A1").Resize(UBound(x, 1), UBound(x, 2)).Value = x
        End With
    Set dic = Nothing
End Sub
 '------

 シート名を合わせて実行してみて下さい。

 手作業で面倒かもしれませんが、「今回限り」と言う事ですし
 C,D,E列のデータを B列の下に移動。
 それに合わせてA列のデータもコピーして、表を完成させたら
 ピボットテーブルで集計 しても良いかもしれません。

 集計すると、個数が表示されますので 表示形式で「○」を表示するか
 一旦別の所へ値貼付してから「○」に置換。

 (HANA)なんだ、署名忘れはMookさんでしたか。

 Mookさん、
 エラーが出た行は
    Dim fso As New Scripting.FileSystemObject
 こちらになります。

 HANAさん、
 シート名を変え実行してみました。
 途中までは集計し"○"が入っているのですが、
 F列からあとは集計せずの状態です。。

 現在進行形ですみません、
 自力でやってみたところ重複しているaaabbbcccのとこを1つずつにまとめることにできました。

 ▼現在の状態
     A          B          C          D           E         F         G
  1         aaabbbccc  dddeeefff  ggghhhiii  jjjkkklll  mmmnnnooo  pppqqqrrr
  2 ZZZZZ   
  3 YYYYY 
  以下続く

 "○"はまだ入力していませんが、
 関数を入力していけば○をつけれるかも?という状態です。

 お二方、マクロを書いて頂いて本当にありがとうございます。。
 もしかしたら残りは関数で完成するかもです。

 (米)

 >F列からあとは集計せずの状態です。。
 サンプルデータがE列までしかなかったので
 >>tbl = .Range("A1:E" & .Range("A" & Rows.Count).End(xlUp).Row).Value
 ここで、E列までの範囲を処理してます。

 >▼現在の状態
 までできたのでしたらもしかしたらこんな感じで。。。?
[[20120303140243]] 『複数のデータの中からデータを抽出してカウントす』(ゆき)

 あ、A列重複なしなら 普通にCOUNTIF関数でいけそうですね。

 (HANA)


 HANAさん、
 =IF(ISERROR(HLOOKUP(B$1,元データ!2:2,1,0)),"","○")
 このような関数を入れて上手く○を入れることが出来ました(*^o^*)

 大変お騒がせしてしまい申し訳ないです。
 もっとExcelの機能を使いこなせるようにします。

 マクロまで作っていただいてしまい、申し訳ないです。
 そちらの方も作れるようになれたらと思います。

 本当にありがとうございました!

 (米)

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.