Board logo

標題: [發問] 如何選取每次欄位都會變的資料範圍呢?用find還是InStr?還是別的?? [打印本頁]

作者: vickey99    時間: 2012-8-1 17:07     標題: 如何選取每次欄位都會變的資料範圍呢?用find還是InStr?還是別的??

問題: 在做資料匯整時,每次資料來的時候,目標資料所屬欄位都不定,(無法定義名稱)
要用什麼語法查詢欄位名來選取目標欄位下的資料呢???再請幫忙...想好久,想不出來 >///<

描述:
1) 要將sheet1的藍色及黃色部分資料 複製到 sheet2
2) 藍色部分資料欄位固定,都是B:D列
3) 黃色部分資料欄位不固定,每次來都有可能會不一樣...
  -> 要用什麼語法,來查詢欄位名稱"決議"或"賣價",進而求到黃色部分的RANGE 位置呢?


Sub TEST()
   Worksheets(1).Activate '開啓sheet1
   Range("B9:D9", Range("B9:D9").End(xlDown)).Select '選擇藍色區塊
   Selection.Copy  '複製選擇區塊
   Worksheets(2).Activate  '到sheet2
   Range("B65536").End(xlUp).Offset(1).PasteSpecial Paste:=xlValue, operation:=xlNone  '貼到sheet2,B欄接下去空白位置
   Worksheets(1).Activate '開啓sheet1
   '如何選取黃色部分?要用'FIND'還是'InStr'以求得黃色部分range位置?如何用才好呢???[attach]11979[/attach]
End Sub
作者: Hsieh    時間: 2012-8-1 17:56

回復 1# vickey99
  1. Sub TEST()
  2. Dim Rng As Range, A As Range, r&
  3. With Sheet1
  4. Set Rng = .Range("B9:D9", .Range("B9:D9").End(xlDown))
  5. r = Rng.Rows.Count
  6. Set A = Sheet2.[B65536].End(xlUp)
  7. A.Offset(1).Resize(r, 3) = Rng.Value
  8. A.Offset(1, 3).Resize(r, 3) = .[N9].Resize(r, 3).Value
  9. End With
  10. End Sub
複製代碼

作者: vickey99    時間: 2012-8-3 10:45

非常感謝版大的回覆,小的才疏學淺,
是初學者,有些不懂 r 的部分,
r 是求行數嗎?  r = Rng.Rows.Count

另外 因黃色部分資料會變動,如何求出黃色區塊起始位置[N9]呢?
因為下次資料來,黃色區塊起始位置[N9]有可能就不是[N9]了..
再請賜教,小的感激不盡~
作者: Hsieh    時間: 2012-8-3 16:27

回復 3# vickey99


   
另外 因黃色部分資料會變動,如何求出黃色區塊起始位置[N9]呢?

會變動欄還是列?變動的依據是什麼?
作者: vickey99    時間: 2012-8-3 17:06

dear 版大,

  呵~版大果然功力深厚,小的研究半天終於了解原來 r是求rng的列數啊~
因資料來源的項目名稱"決議";或"賣價"的欄位每次可能都會變,可能是N欄 或 S欄等不定..
研讀討論區其他資料後,先用find來找"決議",再offset找目標資料Range,
但自己試的結果有bug...真不知是哪裡錯了 >///<
再請指教,感激不盡~


Sub TEST2()
Windows("12072602_Sample.xls").Activate
Dim A As Range, B As Range, C As Range, r&
With Sheet1
Set A = .Range("B9:D9", .Range("B9:D9").End(xlDown))
r = A.Rows.Count
Set B = .Range("5:5").Find("決議", LookAt:=xlPart).Offset(4, 0).Resize(r, 3)
Set C = Sheet2.[B65536].End(xlUp)
C.Offset(1).Resize(r, 3) = A.Value
C.Offset(1, 3).Rezize(r, 3) = B.Value
End With
End Sub
[attach]12013[/attach]
作者: Hsieh    時間: 2012-8-3 17:45

回復 5# vickey99

C.Offset(1, 3).Resize(r, 3) = B.Value
   檢查紅字
作者: vickey99    時間: 2012-8-4 01:15

回復 6# Hsieh


    呵呵..:$  錯在不該錯的地方...真糗啊~
感謝版大不吝指教,將語法寫的簡潔有力~
小的受益良多~vba真是有趣啊~
謝謝您^^




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)