2010-06-22 5 views
1

J'ai un sondage de 100 utilisateurs et j'essaie de calculer quelques statistiques. Les domaines pertinents dans mon enquête ressemblent à ceci:Excel Formula: Calculer des statistiques de sondage

Gender   Interests 
B1: Male   D1: Running, Snowboarding, Mountain Bikes 
B2: Male   D2: Programming, Running, Paintball 
B3: Female  D3: Bowling, Gymnastics 
B4: Male   D4: Rock Climbing, Running, 

J'ai besoin de calculer le% des hommes qui sont intéressés par « Running ». Le texte apparaîtra toujours dans la chaîne exactement comme "Running" mais il peut apparaître dans un ordre différent.

Voici ce que j'ai jusqu'à présent:

=SUM(
    COUNTIF(
      D1:D100,ISNUMBER(
           SEARCH(D1:D100,"Running") 
      ) 
    ) 
) 

Avis Je ne l'ai pas pris en compte dans les hommes/femmes critères encore. Cette expression renvoie actuellement un 0.

Toute aide serait grandement appréciée.

Répondre

2

Un moyen facile de l'approcher serait de briser un peu vos calculs.

Dans une autre colonne utiliser une formule comme ceci:

=IF(AND(B1="Male",ISNUMBER(SEARCH("Running",D1))),1,0) 

Cela vous donnera un 1 pour tout le monde qui est masculin et a « Running » répertorié comme un intérêt et un 0 pour tous les autres. Copie que tout le long de votre feuille, puis il est facile de calco le pourcentage, par exemple, si la colonne était E:

=SUM(E1:E100)/100 
+0

Cela va fonctionner, merci! – pws5068

0

Vous pouvez faire beaucoup avec Excel et ADO.

Dim cn As Object 
Dim rs As Object 
Dim sFile As String 
Dim sCn As String 
Dim sSQL As String 
Dim s As String, f As String 
Dim sa As Variant 
Dim i As Integer, c As Integer 
Dim r As Range 

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

sFile = ActiveWorkbook.FullName 

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

Set cn = CreateObject("ADODB.Connection") 
Set rs = CreateObject("ADODB.Recordset") 

cn.Open sCn 

sSQL = "SELECT interests " _ 
     & "FROM [Sheet1$] " 

rs.Open sSQL, cn, 3, 3 

With Worksheets("Sheet2") 
    s = rs.GetString(, , , ",") 
    sa = Split(s, ",") 

    c = 1 
    For i = 0 To UBound(sa) 
     Set r = .Range("a1:a" & c) 
     f = Trim(sa(i)) 
     If r.Find(f) Is Nothing Then 
      c = c + 1 
      .Cells(c, 1) = f 
     End If 
    Next 

    .Cells(1, 1) = "Interests" 
    .Cells(1, 2) = "Male" 
    .Cells(1, 3) = "Female" 

    For i = 2 To c 
     rs.Close 

     sSQL = "SELECT Gender, Count(Gender) As GNo " _ 
      & "FROM [Sheet1$] " _ 
      & "WHERE Interests Like '%" & .Cells(i, 1) & "%' " _ 
      & "GROUP BY Gender" 

     rs.Open sSQL, cn 

     Do While Not rs.EOF 
      If rs.Fields("Gender") = "Male" Then 
       .Cells(i, 2) = rs.Fields("GNo") 
      ElseIf rs.Fields("Gender") = "Female" Then 
       .Cells(i, 3) = rs.Fields("GNo") 
      End If 
      rs.MoveNext 
     Loop 

     Next 

End With 

''Tidy up 
rs.Close 
Set rs = Nothing 
cn.Close 
Set cn = Nothing 
End Sub 
+0

cela semble être légèrement plus compliqué que la réponse acceptée :) –

+0

Il ne s'appuie pas sur des colonnes supplémentaires et calcule le résultat pour les hommes et les femmes pour chaque intérêt saisi, sans que l'utilisateur ait à en sélectionner un. C'est plus compliqué parce que ça va au-delà de la question d'un pas. – Fionnuala

+0

Les deux réponses sont utiles, mais dans ce cas particulier, cela ne me dérange pas d'avoir des colonnes supplémentaires donc je suis allé avec el chef par souci de simplicité. Merci les gars! – pws5068

1

Vous devriez également tester si cette proportion (% d'hommes qui aiment courir) est par hasard ou non.

Vous pouvez faire un test de Chi-deux (ratio de Pearson ou ratio de vraisemblance) pour voir si les proportions sont différentes de celles attendues.

Vous pouvez également faire le test exact de Fisher pour voir, par exemple, si la proportion est différente entre les sexes.