請教各位先進前輩
我經常需統計下表類似的問訪,
不一定是10筆可能上百筆資料(每次不一定),訪問題數題目不一定一樣,回答有非常滿意滿意尚可不滿意非常不滿意,但該員不論回答幾題皆以最差的滿意度為結果,

我比較笨excel程式想不出如何編輯,以往都是人工筆觀察填入右手邊的結果,太多的話會不小心填錯,煩請前輩們指點我一下,謝謝


如下表
[Excel]把問卷的結果顯示出來
先在J欄與K欄建一張對照表。



D2:
=TEXT(IF(A2<>"",A2,MAX($A$1:A1)),"000")&VLOOKUP(C2,$J$2:$K$6,2,0)
將公式向下複製到D3:D33。


首先我們判斷同一列A欄儲存格內容是否為空白,若不是則傳回同一列A欄儲存格內容,若是則傳回從A1儲存格到目前同一列A欄儲存格中的最大值(即目前的路人編號)(IF(A2<>"",A2,MAX($A$1:A1))。
然後將傳回的值變成3位數文字,不足位數補0,則是容許路人編號可以擁有999個(TEXT(IF(A2<>"",A2,MAX($A$1:A1)))方便比對路人編號。再與目前的滿意度編號結合(VLOOKUP(C2, $J$2:$K$6,2,0))方便判斷最差的滿意度為何。

G2:
=INDEX($J$2:$J$6,SUMPRODUCT(MAX((LEFT($D$2:$D$33,3)=TEXT(F2,"000"))*RIGHT($D$2:$D$33,1))))
將公式向下複製到G3:G33。




先將D2:D33儲存格內容的左邊三個字與F欄儲存格內容以TEXT函數將其格式為3位數文字,不足位數補0來比對(LEFT($D$2:$D$33,3)=TEXT(F2, "000")),再傳回其右邊1個字元(RIGHT($D$2:$D$33,1))。
將每個路人傳回的數值字元抓取其中最大值(MAX((LEFT($D$2:$D$33,3)=TEXT(F2,"000"))*RIGHT ($D$2:$D$33,1)))。
依照每個路人的最大值,抓取J2到J6儲存格中第幾列儲存格的內容(INDEX($J$2:$J$6,SUMPRODUCT(MAX ((LEFT($D$2:$D$33,3)=TEXT(F2,"000"))*RIGHT($D$2:$D$33,1)))))。
錦色如月,子耀光芒。
clonliu
謝謝你,雖然我有看沒有懂,但是我會好好研究一下,謝謝
clonliu wrote:
請教各位先進前輩
我...(恕刪)

提供VBA方式 把問卷的結果顯示出來.xlsm



Sub Statistics()
Dim wrk As Worksheet '活頁簿變數
Dim i As Integer '迴圈變數
Dim P_Name As String '路人名
Dim P_Count As Integer '路人數量
Dim Satisfaction_num As Integer '滿意度分數
Dim Satisfaction_temp As Integer '暫存滿意度分數,用來比較
Set wrk = ThisWorkbook.Worksheets(1) '設定wrk為第一個活頁簿
P_Name = "" '設定初始路人名空白
P_Count = 0 '設定初始路人數為0
For i = 2 To wrk.Cells(1048576, 3).End(xlUp).Row '迴圈,第二列至有資料的最尾列
If Not IsEmpty(wrk.Cells(i, 1).Value) Then '判斷路人名是否不為空
If P_Name <> CStr(wrk.Cells(i, 1).Value) Then '判斷讀取到的路人名是否與當前迴圈不相同
P_Count = P_Count + 1 '路人數+1
P_Name = CStr(wrk.Cells(i, 1).Value) '設定路人數為當前讀取到的路人名
wrk.Cells(P_Count + 1, 5).Value = P_Name '將路人名寫入統計路人欄位
Satisfaction_num = 0 '滿意度分數歸零
End If
End If
Dim s As String '宣告字串變數
s = CStr(wrk.Cells(i, 3).Value) '設定s字串變數為當前回全讀取到的滿意度
Select Case s '將滿意度改為分數1~5
Case "非常滿意"
Satisfaction_temp = 5
Case "滿意"
Satisfaction_temp = 4
Case "尚可"
Satisfaction_temp = 3
Case "不滿意"
Satisfaction_temp = 2
Case "非常不滿意"
Satisfaction_temp = 1
Case Else
MsgBox "Error" '非以上滿意度顯示Error
End Select
If Satisfaction_num = 0 Then '判斷滿意度分數是否為初始值
Satisfaction_num = Satisfaction_temp '滿意度分數是初始值則將該路人第一個讀取到的滿意度分數存入滿意度分數
Else
If Satisfaction_temp < Satisfaction_num Then '滿意度分數不是初始值則比較該路人目前讀取到的滿意度分數與該路人第一個讀取到的滿意度分數
Satisfaction_num = Satisfaction_temp '該路人目前讀取到的滿意度分數低於該路人第一個讀取到的滿意度分數,則將目前滿意度分數寫入滿意度分數
End If
End If
If P_Count <> 0 Then '判斷是否不為初始路人數
Select Case Satisfaction_num '判定最終保留的最低滿意度分數是幾分,再轉為文字並寫入滿意度
Case 5
wrk.Cells(P_Count + 1, 6).Value = "非常滿意"
Case 4
wrk.Cells(P_Count + 1, 6).Value = "滿意"
Case 3
wrk.Cells(P_Count + 1, 6).Value = "尚可"
Case 2
wrk.Cells(P_Count + 1, 6).Value = "不滿意"
Case 1
wrk.Cells(P_Count + 1, 6).Value = "非常不滿意"
Case Else
MsgBox "Error" '非以上滿意度顯示Error
End Select
End If
Next
MsgBox "Done!" '執行完成
End Sub

clonliu
謝謝 很專業 我再嘗試看看
請教2樓大大
我嘗試著貼著您的公式
為什麼G列怪怪的,如下圖
煩請指教
謝謝您

clonliu wrote:
請教2樓大大我嘗試著...(恕刪)

2樓大大用的是陣列公式,你要先選擇G2欄位,在資料編輯列輸入=INDEX($J$2:$J$6,SUMPRODUCT(MAX((LEFT($D$2:$D$33,3)=TEXT(F2,"000"))*RIGHT($D$2:$D$33,1))))
輸入完成後按下Ctrl+Shift+Enter,再將公式向下複製到G3:G33。
clonliu
謝謝 我少了Ctrl+Shift+Enter這一步
小小尉 wrote:
提供VBA方式 把問...(恕刪)


提供另一種比較奇怪的寫法

Sub test()

Dim Satisfaction As Object, dic As Object, r As Integer, i As Integer, n As Integer
Set Satisfaction = CreateObject("System.Collections.ArrayList")
Set dic = CreateObject("Scripting.Dictionary")

dic.Add "非常滿意", 5: dic.Add "滿意", 4: dic.Add "尚可", 3: dic.Add "不滿意", 2: dic.Add "非常不滿意", 1
dic.Add 5, "非常滿意": dic.Add 4, "滿意": dic.Add 3, "尚可": dic.Add 2, "不滿意": dic.Add 1, "非常不滿意"
n = 2: r = 2: Range("e2:f" & Cells(Rows.Count, 1).End(xlUp).Row).ClearContents

Do

Cells(n, 5) = Cells(r, 1)
If Cells(r, 1).MergeCells = True Then
For i = r To r + Cells(r, 1).MergeArea.Rows.Count - 1
Satisfaction.Add dic(Cells(i, 3).Value)
Next i
Satisfaction.Sort
r = r + Cells(r, 1).MergeArea.Rows.Count
Else
Satisfaction.Add dic(Cells(r, 3).Value)
r = r + 1
End If
Cells(n, 6) = dic(Satisfaction(0))
n = n + 1
Satisfaction.Clear

Loop Until Cells(r, 1) = "" And Cells(r, 1).MergeCells = False

Set Satisfaction = Nothing
Set dic = Nothing

End Sub

文章分享
評分
評分
複製連結

今日熱門文章 網友點擊推薦!