Excelのマクロ


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

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2009/10/20 17:30:02
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答3件)

id:SALINGER No.1

回答回数3454ベストアンサー獲得回数969

ポイント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

回答回数67ベストアンサー獲得回数5

ポイント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 1314 1219 393 2009-10-19 07:51:34

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

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

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

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

回答リクエストを送信したユーザーはいません