人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

Excelのマクロ

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


●質問者: esecua
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:Excel マクロ
○ 状態 :終了
└ 回答数 : 2/3件

▽最新の回答へ

1 ● SALINGER
●35ポイント

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

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

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

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


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

を削除してください。

◎質問者からの返答

有り難うございます。

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


2 ● mitou73
●35ポイント

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

◎質問者からの返答

有り難うございます。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ