Excelのマクロ


質問が長くなりましたので http://d.hatena.ne.jp/esecua/20091013 をご覧下さい。

回答の条件
  • 1人5回まで
  • 登録:2009/10/13 17:29:32
  • 終了:2009/10/20 17:30:02

回答(3件)

id:SALINGER No.1

SALINGER回答回数3454ベストアンサー獲得回数9692009/10/13 18:42:06

ポイント35pt

こんな感じでどうでしょうか。

標準モジュールにコピペして、コードの最初の方のパスを変更して実行してみてください。

シートに質問文と設問、その下に集計がでます。

設問と集計からそのままグラフを作ることもできます。


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

を削除してください。

id:esecua

有り難うございます。

コード、本当に助かります。

2009/10/13 21:07:21
id:mitou73 No.2

mitou73回答回数67ベストアンサー獲得回数52009/10/13 20:33:34

ポイント35pt

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)"でも可です。

id:esecua

有り難うございます。

2009/10/13 21:07:30

質問者が未読の回答一覧

 回答者回答受取ベストアンサー回答時間
1 Mook 1312 1217 391 2009-10-19 07:51:34

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません