標題:
[發問]
依合計資料自動敘獎
[打印本頁]
作者:
h60327
時間:
2012-1-17 14:28
標題:
依合計資料自動敘獎
本帖最後由 GBKEE 於 2012-1-17 15:32 編輯
優缺點相抵後,優點達12次者嘉獎2次;優點達6次者嘉獎1次,請問如何根據Q欄資料,於「本案獎懲建議名冊」依獎懲事由內容自動敘獎並依高低排序,彙整後如「本案獎懲建議名冊」
作者:
GBKEE
時間:
2012-1-17 15:33
本帖最後由 GBKEE 於 2012-1-18 08:20 編輯
回復
1#
h60327
Option Explicit
Sub Ex()
Dim Ar(), xi As Integer, xB As Integer, Rng As Range
xi = 4
xB = 0
With Sheets("一組")
Do While .Cells(xi, "B") <> "" '執行迴圈Do Loop的條件: B欄的儲存格 <> ""
If .Cells(xi, "Q") >= 6 Then 'Q欄的儲存格>=6
ReDim Preserve Ar(1 To 6, xB) '動態陣列: ReDim(調整) 最後一維元素的數量(xB)
'Preserve 選擇性引數。當改變原有陣列最後一維的大小時,仍然保有原來的資料的關鍵字。
Set Rng = Sheets("人資").Cells.Find(.Cells(xi, "B")) 'Sheets("人資")中尋找 .Cells(xi, "B") :
Ar(1, xB) = Rng.Cells(1, 2) '寫入:姓名欄往右2欄
Ar(2, xB) = Rng.Cells(1, 3)
Ar(3, xB) = Rng '寫入:姓名欄
Ar(4, xB) = Rng.Cells(1, 4)
Ar(5, xB) = "100下半年優點達" & IIf(.Cells(xi, "Q") >= 12, "12", "6") & "次,辛勞得力"
Ar(6, xB) = "嘉獎" & IIf(.Cells(xi, "Q") >= 12, "貳次(4002)", "壹次(4001)")
xB = xB + 1 '最後一維元素的數量(xB)
End If
xi = xi + 1 '使B欄的儲存格往下一列移動
Loop
End With
If xB <> 0 Then Sheets("本案獎懲建議名冊").[a3].Resize(xB, 6) = Application.Transpose(Ar)
' Transpose : 轉置(工作表函數)
End Sub
複製代碼
作者:
h60327
時間:
2012-1-17 21:26
完全適用,非常感謝版主的協助,可惜自己的程度還是太差,對於程式碼的內容還是不知其所以然
作者:
h60327
時間:
2012-1-18 08:54
GBKEE版主您真是太貼心了,非常感謝您的說明
作者:
h60327
時間:
2012-1-18 10:12
再請教GBKEE版主,如果是多工作表時又要如何變化呢?再次感謝不吝指教了.
作者:
GBKEE
時間:
2012-1-18 10:46
回復
5#
h60327
Option Explicit
Sub Ex()
Dim Ar(), xi As Integer, xB As Integer, Rng As Range, xSh As Variant
xB = 0 '動態陣列: 最後一維元素的數量(xB)
For Each xSh In Array("一組", "二組", "三組") '陣列: 須處裡的工作表名稱
With Sheets(xSh) '代入陣列元素
xi = 4 '設定工作表開始的儲存格的列數
Do While .Cells(xi, "B") <> "" '執行迴圈Do Loop的條件: B欄的儲存格 <> ""
If .Cells(xi, "Q") >= 6 Then 'Q欄的儲存格>=6
ReDim Preserve Ar(1 To 6, xB) '動態陣列: ReDim(調整) 最後一維元素的數量(xB)
'Preserve 選擇性引數。當改變原有陣列最後一維的大小時,仍然保有原來的資料的關鍵字。
Set Rng = Sheets("人資").Cells.Find(.Cells(xi, "B")) 'Sheets("人資")中尋找 .Cells(xi, "B") :
Ar(1, xB) = Rng.Cells(1, 2) '寫入:姓名欄往右2欄
Ar(2, xB) = Rng.Cells(1, 3)
Ar(3, xB) = Rng '寫入:姓名欄
Ar(4, xB) = Rng.Cells(1, 4)
Ar(5, xB) = "100下半年優點達" & IIf(.Cells(xi, "Q") >= 12, "12", "6") & "次,辛勞得力"
Ar(6, xB) = "嘉獎" & IIf(.Cells(xi, "Q") >= 12, "貳次(4002)", "壹次(4001)")
xB = xB + 1 '最後一維元素的數量(xB)
End If
xi = xi + 1 '使B欄的儲存格往下一列移動
Loop
End With
Next
If xB <> 0 Then '動態陣列有元素存在
With Sheets("本案獎懲建議名冊")
.Range(.[a3], .[a3].End(xlDown)).Resize(, 6) = "" '清除原有內容
.[a3].Resize(xB, 6) = Application.Transpose(Ar) ' Transpose : 轉置(工作表函數)
End With
MsgBox "符合的資料 共 " & xB & "筆"
Else
MsgBox "查無 符合的資料"
End If
End Sub
複製代碼
作者:
h60327
時間:
2012-1-18 15:43
感謝版主的協助,並預祝各位版主們新春愉快,佳節快樂•
歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)