Board logo

標題: vba - Rows內變數應如何寫 [打印本頁]

作者: jim    時間: 2016-8-4 08:10     標題: vba - Rows內變數應如何寫

各位高手大家好
  變數 [a2] = 84
Rows("100:144").Select  要改寫成
   Rows(" [a2]+16:[a2]+60).Select
正確寫法是如何 ? 請指導 謝謝1
作者: c_c_lai    時間: 2016-8-4 08:23

回復 1# jim
  1. Sub Ex()
  2.     [A2] = 84
  3.     Rows(([A2] + 16) & ":" & ([A2] + 60)).Select
  4. End Sub
複製代碼

作者: jim    時間: 2016-8-4 08:49

回復 2# c_c_lai
c_c_lai  多謝
作者: jim    時間: 2016-8-4 08:59

c_c_lai 高手
若是在  變數為 [A2]=84
Set rng = Range([125:h250], [h65536].End(3))
[h125:h250] = ??是否可改寫為 ?? [ H ?? [A2]+43: H??[A2]+166]
作者: c_c_lai    時間: 2016-8-4 09:28

回復 4# jim
Set rng = Range([125:h250], [h65536].End(3)) ???
不太清楚你的表達。
作者: jim    時間: 2016-8-4 10:23

c_c_lai  多謝關照
[h125:h250]
如同上 用 [a2]+43 代表 125 ,[a2]+166 代表 250
Set rng = Range([125:h250], [h65536].End(3))
  應如何改寫
作者: c_c_lai    時間: 2016-8-4 10:45

回復 6# jim
Set rng = Range([125:h250], [h65536].End(3))?
我猜想你是指
[A2] = 84
Set rng = Range(Range("H" & ([A2] + 41)),  [H65536].End(3))
目前的範圍值為: H125:H###   
(假設  [H65536].End(3) 位址為 H###)
作者: c_c_lai    時間: 2016-8-4 10:48

回復 6# jim
附上一個實務範例,供參考:
[attach]24833[/attach]
  1. Sub 換月()
  2.     Dim cts As Integer, xs As Integer
  3.     Dim rng As Range, lDate As Date
  4.     Dim 年 As String, 月 As String
  5.    
  6.     With Sheets("XXXXXX")
  7.         For xs = 0 To 2
  8.             '  將 H1:AL2、H18:AL19、H35:AL36 範圍內之資料清空。
  9.             .Range("H" & (xs * 17 + 1) & ":AL" & (xs * 17 + 2)).ClearContents
  10.             '  設定 rng 為 H1、H18、以及 H35 欄位。
  11.             Set rng = .Range("H" & IIf(xs < 3, xs * 17 + 1, 63))
  12.             For cts = 1 To Day(DateSerial(年, 月 + 1, 0))      '  取得該月天數
  13.                 rng.Offset(, cts - 1) = cts   
  14.                 '  H1、H18、以及 H35 欄位值為幾號;並依序往右延伸。
  15.                 lDate = DateSerial(年, 月, cts)
  16.                 '  H2、H19、以及 H36 欄位值為星期幾;並依序往右延伸。
  17.                 rng.Offset(1, cts - 1) = Right(WeekdayName(Weekday(lDate)), 1)
  18.             Next cts
  19.         Next xs
  20.     End With
  21. End Sub
複製代碼

作者: jim    時間: 2016-8-4 12:55

c_c_lai  謝謝
我的原意是
Set rng = Range([h125:h250], [h65536].End(3))
可否改變為
Set rng = Range("H" & ([A2] + 41:"H"& [A2] + 166), [h65536].End(3)).
此語法對嗎?
作者: c_c_lai    時間: 2016-8-4 13:22

回復 9# jim
Set rng = Range("H" & ([A2] + 41:"H"& [A2] + 166), [h65536].End(3)).
應該為
Set rng = Range(Range("H" & ([A2] + 41) & ":H" & ([A2] + 166)), [h65536].End(3))
假設 [A2]] = 84,其結果的範圍值為: H125:H###  
兩點之間取最小及最大值,由下圖你便會瞭解了。
[attach]24834[/attach]
作者: jim    時間: 2016-8-21 05:21

回復 10# c_c_lai
c_c_lai
  多謝指導




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