標題:
[發問]
想要將大量資料依照段落擷取資料
[打印本頁]
作者:
a703130
時間:
2012-6-28 18:58
標題:
想要將大量資料依照段落擷取資料
[attach]11522[/attach]
如附件,想請問一下各位前輩
附件三個column,總共會有四個大段落的資料,中間空白是不一定的
第一個column是分段落用的
第二個column是用來找尋資料的依據
第三個column是需要擷取的資料
因為我的第二個column都會從最高一直到最低
但是最高跟最低不一定,有可能是100~99(高)到15~14(低)
而中間區段我想要區分90、80、70~20,這樣區分下來會有10段
整理出來的結果會像旁邊的數據一樣
請問我要如何搜尋第二個column來分10段抓取資料
我初步是認為應該是要用 xlToDown(找最高跟最低點) 跟find(其他8個點) 這兩個函數來做這件事情
不過執行起來有點困難,因為我還不太會活用
所以到這邊請教各位前輩,也請各位前輩不吝指教
謝謝
作者:
Hsieh
時間:
2012-6-28 20:13
回復
1#
a703130
Sub nn()
Dim Rng As Range, ay(10, 3)
Set Rng = Range([B2], Cells(Rows.Count, 3).End(xlUp)).SpecialCells(xlCellTypeConstants)
r = 3
For i = 1 To Rng.Areas.Count Step 2
ar = Union(Rng.Areas(i), Rng.Areas(i + 1))
k = Application.Max(Application.Index(ar, , 1))
m = Application.Min(Application.Index(ar, , 1))
a = Array(k, 90, 80, 70, 60, 50, 40, 30, 20, m)
n = Rng.Areas(i).Cells(1, 1).Offset(, -1)
n1 = Rng.Areas(i + 1).Cells(1, 1).Offset(, -1)
For j = 0 To 9
s = Application.VLookup(a(j), Rng.Areas(i), 2, 0)
s1 = Application.VLookup(a(j), Rng.Areas(i + 1), 2, 0)
ay(j, 0) = s
ay(j, 1) = s1
ay(j, 2) = a(j)
Next
Cells(r, 8).Resize(10, 3) = ay
r = r + 12
Erase ay
Next
End Su
複製代碼
作者:
a703130
時間:
2012-6-29 10:00
回復
2#
Hsieh
請問一下H大
一開始先range 出四段,但是我不懂
For i = 1 To Rng.Areas.Count Step 2
複製代碼
這段的意思是什麼,是以1、3,2、4各為一個大項來執行嗎??
另外我在執行時有遇到個問題
就是巨集實際抓出來的最大最小值有部分卻是錯的
我不知道為什麼?我檢查了ar 陣列裡面的值都是對的,能請H大幫忙確認嗎??
是否是因為直接+1檢查下一段,結果檢查的欄位大小是一樣的,所以便抓到前一段相同位置的最大最小值??
如果直接將它分成獨立的四段來做是否就沒有此問題
[attach]11528[/attach]
作者:
Hsieh
時間:
2012-6-29 14:40
回復
3#
a703130
這樣就不懂你抓的是第一個位置的值還是最後位置的值了
以B欄最小值15而言
第一區第一位置對應3239.923,最後位置是3294.462
第二區第一位置對應3510.846,最後位置是3502.923
你都是抓最後位置的值
但是其餘各個級距都是抓第一個位置
請說明你的準則
作者:
a703130
時間:
2012-7-2 13:56
回復
4#
Hsieh
我了解您的意思了
確實是我抓資料的準則有誤
應該是要像你一樣抓取每個級距的第一個值
謝謝H 大指導
歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)