Нужна помощь с макросом Excel для организации перепутанного опроса - PullRequest
0 голосов
/ 11 января 2011

Я пытался написать макрос (пошагово), чтобы организовать результаты очень плохо спланированного опроса, но мне очень не повезло.

Вот пример того, что у меня есть:

alt text

Вот пример того, что мне нужно:

alt text

Я сталкиваюсь с несколькими проблемами, одна из которых заключается в том, чтоне на все 15 вопросов опроса пришлось отвечать, что затрудняет циклическое прохождение результатов.

Еще большая проблема (связанная с предыдущим выпуском) состоит в том, что 3 из 15 вопросов наВ опросе использовались вопросы типа «Выбрать все, что применимо», и каждый выбор записывался в виде отдельного ответа, но с тем же номером.Например, у вопроса 10 было 11 возможных вариантов, которые пользователь мог выбрать столько, сколько ему хотелось.Если они выберут 1-й и 3-й варианты вопроса 10, результат будет выглядеть как строки 3 и 4 моего What I have образца.

Мой What I need образец показывает, что мне нужны все вопросы в столбцах и всеномера респондентов в их собственной строке с длинными ответами респондента под их соответствующим номером.

Столбец ID из образца What I have не нужен в конечном продукте, но я оставил его врезультаты на данный момент думают, что это может как-то помочь разобраться в этом беспорядке.

Мне интересно, должен ли я просто вернуться к человеку, который дал мне это, и сказать им, что я извиняюсь, но я не могусделать что-нибудь с этим, так как это так запутано.Если вы считаете, что можно исправить эти результаты опроса, пожалуйста, дайте мне несколько советов (будьте внимательны, у меня нет большого опыта работы с VB Script).

Любые другие комментарии, мысли или предложениятакже добро пожаловать.

Ответы [ 3 ]

1 голос
/ 11 января 2011

У меня многолетний опыт работы с VBA в Excel и Access 2003 и 2010, и я могу вам сказать, что это было бы неинтересно обрабатывать в Excel;Исходя из структуры результатов опроса, я бы настоятельно рекомендовал импортировать их в Access (если у вас есть) и запускать запросы SQL для разрезания и нарезки данных.Он действительно в формате таблицы базы данных, у него даже есть первичный ключ (ID).

0 голосов
/ 12 января 2011

Вот начало в Excel VBA, в 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

Это основано на наличии таблицы на листе 2, например:

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 голосов
/ 11 января 2011

Я бы импортировал это в базу данных, а затем использовал простой или два запроса для генерации того, что вы хотите.

...