標題:
請教要如何尋找並排序~
[打印本頁]
作者:
ms2001
時間:
2014-3-22 17:49
標題:
請教要如何尋找並排序~
表 一 .
1 英文 25
1 國文 85
2 英文 80
2 國文 53
2 歷史 88
3 國文 33
3 地理 55
4 英文 66
4 國文 22
4 地理 55
希望能做出當我在表二的a1輸人編號後a2可以自動列出下面的低到高的排序,如
當a1輪入 "2" 時.
國文 53
英文 80
歷史 88
輸入"3"時..
國文 33
地理 55
----------
有高手可以幫幫忙嗎~
作者:
yen956
時間:
2014-3-23 05:37
本帖最後由 yen956 於 2014-3-23 05:40 編輯
試試看:
'Sheet1 的VBA
'資料整理
Private Sub CommandButton1_Click()
Dim sh1, sh2 As Worksheet, rngA As Range
Dim endRow As Integer
Set sh1 = Sheets(1): Set sh2 = Sheets(2)
endRow = sh1.[A1].End(xlDown).Row
sh2.[B1].Resize(endRow, 2) = ""
'將 sh1.欄A 按升冪排序
sh1.[A1].Resize(endRow, 3).Sort _
Key1:=sh1.[A1], Order1:=xlAscending, _
Key2:=sh1.[C1], Order2:=xlAscending, _
Header:=xlYes
'重新定義名稱 "x" 的範圍(sh1.欄A)
ActiveWorkbook.Names("x").Delete
ActiveWorkbook.Names.Add Name:="x", RefersToR1C1:="=Sheet1!R1C1:R" & endRow & "17C1"
End Sub
'Sheet2 的VBA
'欲在sh2.欄A 資料變更時觸發事件, 可用 Intersect 方法完成:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim sh1, sh2 As Worksheet, rngA As Range
Dim endRow, cnt As Integer
Set sh1 = Sheets(1): Set sh2 = Sheets(2)
'將公式 MATCH 輸入 sh2.[F1]
'將 sh2.欄A 所輸入的 編號, 用公式 MATCH 獲取 對應到 sh1.欄A 的起始列號
sh2.[F1] = "=MATCH(E1, x, 0)"
endRow = sh1.[A1].End(xlDown).Row
'限定 資料變更時觸發事件 的有效範圍在 rngA 內
Set rngA = sh2.[A1].Resize(endRow, 1)
If Not Intersect(Target, rngA) Is Nothing Then
'將剛剛變更的 Target, 存入 sh2.[E1], 供 sh2.[F1] 的公式 MATCH 比對用
sh2.[E1] = Target
'若 sh2.[F1] 是數值, 表示剛剛輸入了 有效數字
If Application.IsNumber(sh2.[F1]) Then
cnt = 0
Do
Target.Offset(cnt, 1) = sh1.Cells(cnt + sh2.[F1], 2)
Target.Offset(cnt, 2) = sh1.Cells(cnt + sh2.[F1], 3)
cnt = cnt + 1
Loop Until sh1.Cells(cnt + sh2.[F1], 1) > sh1.Cells(sh2.[F1], 1) Or sh1.Cells(cnt + sh2.[F1], 1) = ""
End If
End If
End Sub
複製代碼
歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)