0

非常に貧弱な設計の調査の結果を整理するために、マクロを(段階的に)作成しようとしていますが、運がほとんどありません。

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

代替テキスト

これが私が必要とするもののサンプルです:

代替テキスト

私はいくつかの問題に直面しています。そのうちの1つは、調査の15の質問すべてに回答する必要がなかったため、結果をスムーズにループすることが困難なことです。

さらに大きな問題(前号に関連)は、調査の15の質問のうち3つが「該当するものをすべて選択」タイプの質問であり、すべての選択が別々の回答として同じ番号で記録されたことです。たとえば、質問10には、ユーザーが必要な数だけ選択できる11の可能な選択肢がありました。質問10の1番目と3番目のオプションを選択した場合、結果は私のWhat I haveサンプルの3行目と4行目のようになります。

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

サンプルのIDWhat I haveは最終製品には必要ありませんが、この混乱を解決するのに役立つかもしれないと今のところ結果に残しています。

これをくれた人のところに戻ってごめんなさいと言ったらいいのかしらと思いますが、めちゃくちゃなので何もできません。これらの調査結果を修正することが可能であると思われる場合は、いくつかの指針を教えてください(詳細については、VBスクリプトの経験はあまりありません)。

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

4

3 に答える 3

1

私はExcelとAccess2003および2010でVBAを長年使用してきましたが、Excelで処理するのは面白くないと言えます。調査結果の構造に基づいて、これをAccessにインポートし(ある場合)、SQLクエリを実行してデータをスライスおよびダイスすることを強くお勧めします。実際にはデータベーステーブルの形式であり、主キー(ID)もあります。

于 2011-01-11T20:25:59.480 に答える
0

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

于 2011-01-11T20:24:08.730 に答える
0

これがExcelVBAの始まりです。Accessでは、これは非常に単純なクエリです。

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
<...>
于 2011-01-11T22:07:16.263 に答える