質問が長くなりましたので http://d.hatena.ne.jp/esecua/20091013 をご覧下さい。
こんな感じでどうでしょうか。
標準モジュールにコピペして、コードの最初の方のパスを変更して実行してみてください。
シートに質問文と設問、その下に集計がでます。
設問と集計からそのままグラフを作ることもできます。
Sub Macro() '実際のパスに変更してください。 Const qPass As String = "C:\Documents and Settings\hogehoge\デスクトップ\question.csv" Const rPass As String = "C:\Documents and Settings\hogehoge\デスクトップ\results.csv" Dim FSO As Object Dim TS As Object Dim h1 As Variant Dim h2 As Variant Dim h3 As Variant Dim h4 As Variant Dim r As Long Dim i As Integer Dim j As Integer Cells.Clear Set FSO = CreateObject("Scripting.FileSystemObject") '質問文の読み込み Set TS = FSO.OpenTextFile(qPass, 1) TS.ReadLine r = 1 Do Until TS.AtEndOfStream h1 = Split(TS.ReadLine, ",") Cells(r, 1).Value = h1(0) & " " & h1(2) h2 = Split(h1(3), "\n") For i = 0 To UBound(h2) Cells(r, i + 2).Value = h2(i) Next i r = r + 2 Loop TS.Close Set TS = Nothing 'データの読み込み Set TS = FSO.OpenTextFile(rPass, 1) TS.ReadLine r = 1 Do Until TS.AtEndOfStream h3 = Split(TS.ReadLine, ",") For i = 2 To 5 h4 = Split(h3(i), "|") For j = 0 To UBound(h4) Cells(i * 2 - 2, h4(j) + 1).Value = Cells(i * 2 - 2, h4(j) + 1).Value + 1 Next j Next i Loop TS.Close Set TS = Nothing Set FSO = Nothing End Sub
CSVファイルの1行目は「date,name,q1,q2,q3,q4,q5」とかが入っいるとして作りましたが
1行目からデータが始まる場合は、コード中2行ある
TS.ReadLine
を削除してください。
Visual Basic Editorを開いて、標準モジュールを追加し、以下のコードを貼り付けます。
'---- ここから ----
Function SplitFunc(str As String, sep As String, i As Integer)
SplitFunc = SPLIT(str, sep)(i)
End Function
'---- ここまで ----
ワークシートのほうには、以下のように式をいれます。
=SplitFunc(A2,B2,0)
ここで、A2のセルにはアンケートの回答のセルを(例:a|b|c)、B2のセルには区切り文字を(例:|)入れます。
3番目の引数は区切られた回答の何番目の値を取り出すかを数字で指定します。
C列には"=SplitFunc(A2,B2,0)"を、D列には"=SplitFunc(A2,B2,1)"を、E列には"=SplitFunc(A2,B2,2)"を入れると、
C列、D列、E列を集計すればお望みの処理ができると思われます。
区切り文字はセルで指定しなくとも、"=SplitFunc(A2,"|",0)"でも可です。
有り難うございます。
回答者 | 回答 | 受取 | ベストアンサー | 回答時間 | |
---|---|---|---|---|---|
1 | Mook | 1314回 | 1219回 | 393回 | 2009-10-19 07:51:34 |
有り難うございます。
コード、本当に助かります。