2011-01-11 11 views
0

非常にうまく設計されていない調査結果を整理するためにマクロを作成しようとしていますが、運がほとんどありません。ここでExcelのマクロで助けが必要な場合

は、私が持っているもののサンプルです:ここで

alt text

は私が必要なもののサンプルです:

alt text

私はいくつかの問題、のいずれかに実行しています調査の15の質問のすべてに回答しなければならないというわけではありません。その結果、円滑な方法で結果をループすることは困難です。

アンさらに大きな問題は、(前号に結ば)調査上の15個の質問の3種類の質問に、「該当するものをすべて選択」し、すべての選択は別の答えとして、同じ番号で記録したということです。例えば、質問10には11の可能な選択肢があり、ユーザはそれらを必要なだけ多くまたは少なく選ぶことができました。質問10の1番目と3番目のオプションを選択した場合、結果はWhat I haveサンプルの行3と4のようになります。

サンプルWhat I needサンプルでは、​​列内のすべての質問とそれぞれの行のすべての回答者番号と、回答者からの長い回答がそれぞれの番号で必要であることがわかります。

What I haveサンプルからのIDのサンプルは、最終製品では必要ありませんが、結果的に残っています。

私はこれを私にくれた人に戻って、申し訳ありませんが、私はそれがとてもうんざりなので、これで何もすることはできません。これらの調査結果を修正することが可能だと思う場合は、私にいくつかの指摘をしてください(詳細、私はVB Scriptで多くの経験がありません)。

他のコメント、考え、提案も歓迎します。

+0

はこれを台無しにされていない、それは調査にかなり標準的なアプローチです。データベースでの分析は非常に簡単で、ExcelでのSQLの使用も可能です。どんなアプローチが好きですか? – Fionnuala

+0

@Remou私はVB Script(MySQL)よりもSQLの経験が豊富です。可能であれば、Excelに残しておきたいと思っていますが、それをデータベースに入れるのは簡単ですが、私はそのルートに行きます。 – ubiquibacon

+0

他の誰かが私にそれを打つことができない場合、大丈夫、私はあなたに戻ってきます:) – Fionnuala

答えて

1

ExcelとAccess 2003と2010でVBAの長年の経験がありますが、これはExcelで処理するのが楽しいとは言えません。調査結果の構造に基づいて、これをAccessにインポートしてSQLクエリを実行して、データをスライスしてダイスすることを強くお勧めします。これは実際にはデータベーステーブルの形式で、プライマリキー(ID)を持っています。

+0

それほど悪くないでしょう。 Jet接続、ADO、SQLをExcelで使いすぎることなく使用できます。 – Fionnuala

+0

それはそれほど悪くはありませんが、私はAccessでいくつかの簡単なSQLクエリを書いたり、調査で素晴らしいレポートを作成することができます。 –

+0

これをAccessデータベースにインポートしました。私ができることがわかります。 – ubiquibacon

0

私はそれをデータベースにインポートし、単純なクエリまたは2つを使用して、必要なものを生成します。

0

ここではExcel VBAの開始ですが、これは非常に単純なクエリです。そのよう

Dim cn As Object 
Dim rs As Object 
Dim strFile As String 
Dim strCon As String 
Dim strSQL As String 
Dim s As String 
Dim i As Integer, j As Integer 

''This is not the best way to refer to the workbook 
''you want, but it is very convenient for notes 
''It is probably best to use the name of the workbook. 

strFile = ActiveWorkbook.FullName 

''Note that if HDR=No, F1,F2 etc are used for column names, 
''if HDR=Yes, the names in the first row of the range 
''can be used. 
''This is the Jet 4 connection string, you can get more 
''here : http://www.connectionstrings.com/excel 

strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strFile _ 
    & ";Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1"";" 

''Late binding, so no reference is needed 
Set cn = CreateObject("ADODB.Connection") 
Set rs = CreateObject("ADODB.Recordset") 


cn.Open strCon 

''Note that strings are case-sensitive 
strSQL = "Transform First(a.Answer) As Ans " _ 
     & "SELECT a.Respondent " _ 
     & "FROM [Sheet2$] As b " _ 
     & "LEFT JOIN " _ 
     & "(SELECT ID,Val(Question & '.' & " _ 
     & "IIf(Mid(Answer,5,8)='Checkbox', Mid(Answer,1,1),1)) As Qstn, " _ 
     & "Respondent,Answer " _ 
     & "FROM [Sheet1$]) As a " _ 
     & "ON a.[Qstn]=b.[Question] " _ 
     & "GROUP BY a.Respondent " _ 
     & "PIVOT b.question" 


rs.Open strSQL, cn, 3, 3 

''Pick a suitable empty worksheet for the results 
For i = 0 To rs.fields.Count - 1 
    Worksheets("Sheet3").Cells(1, i + 1) = rs.fields(i).Name 
Next 

Worksheets("Sheet3").Cells(2, 1).CopyFromRecordset rs 

''Tidy up 
rs.Close 
Set rs = Nothing 
cn.Close 
Set cn = Nothing 

これは、Sheet2の上のテーブルを有することに基づいており、:

Question 
1.1 
2.1 
3.1 
4.1 
5.1 
6.1 
7.1 
8.1 
9.1 
9.2 
9.3 
9.4 
10.1 
10.2 
10.3 
10.4 
11.1 
11.1 
11.1 
11.1 
11.1 
<...> 
+0

あなたがこれに取り組んでいるすべての努力を感謝しますが、アンケート結果をAccessにインポートした後、いくつかのクエリですべてが整理されると思います。私は主にMySQLを扱っていますので、Accessで使用されているSQL Serverの構文には少し慣れていませんが、私はそれに取り組んでいます。 – ubiquibacon

+0

私が言ったように、それは標準的なデータベースフォーマットです。上記のSQLステートメントをつかむことができます。これはAccessでわずかな変更で実行されます。上に示したような質問テーブルを追加して、シート名の代わりにテーブル名を使用してください。 – Fionnuala