iT邦幫忙

1

(更新問題)VBA如何指定欄位名稱選取範圍

  • 分享至 

  • xImage

https://ithelp.ithome.com.tw/upload/images/20220801/20147438nf9nmvoMpm.png
各位大神好,以下是我本次的問題。
這邊我原本是用錄的=>有成功
用意是 SPECIFICATION 欄位的內容,最後面都要加上(空格 + Logi Number)
作法:在H欄先插入一欄,透過公式組合兩欄,再把原本欄未取代後刪除。
** 但是討論後,欄位有可能會浮動(機率很低)=>不一定在H和I欄**
後面用原本錄製成功的語法改成下方寫法,
先抓兩欄的相對位置,再透過相對位置做處理,但是卻沒辦法執行成功。
現在的問題是
ActiveCell.FormulaR1C1 = "=RC[1]&""(""&RC[-SL]&"")"""
這一段 SL 是4,但是RC是否不能使用參數的方始寫入?
#有先用MSG顯示過,確實是4
https://ithelp.ithome.com.tw/upload/images/20220801/20147438RH1XSsGtUe.png
然後就是原本使用
ColCNT = Cells(1, Columns.Count).End(xlUp).Columns To 1 Step -1
但這段語法好像不能用,要用下面的語法。
ColCNT = Cells(Rows.Count, 1).End(xlUp).Row To 1 Step -1
但是我要固定列找行,為什麼第一個寫法不能用。
最後還有第三問
Selection.AutoFill Destination:=Range(Cells(2, Sp), Cells(1000, Sp))
目前是先把範圍拉到一千,我要如何寫才能自動的方式,
讓覆蓋欄位根據資料筆數覆蓋呢?

rain_yu iT邦新手 1 級 ‧ 2022-08-01 16:21:17 檢舉
我測試了一下,cells(列,行),我是要第一列,然後找行。
ColCNT = Cells(1, Columns.Count).End(xlUp).Columns To 1 Step -1
但這段語法好像不能用,要用下面的語法。
ColCNT = Cells(Rows.Count, 1).End(xlUp).Row To 1 Step -1
這邊我也不懂為什麼。
rain_yu iT邦新手 1 級 ‧ 2022-08-01 16:33:11 檢舉
在發現上面應該改用下列改寫後。
ColCNT = Cells(Rows.Count, 1).End(xlUp).Row To 1 Step -1
出現新的問題是
ActiveCell.FormulaR1C1 = "=RC[1]&""(""&RC[-SL]&"")"""
SL=4,但是好像SL不能作為參數設定,
目前手動填上4寫才可以成功。但是我想要用參數的方式設定,不曉得我是不是哪裡寫錯
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

1
海綿寶寶
iT邦大神 1 級 ‧ 2022-08-02 08:59:58

ActiveCell.FormulaR1C1 = "=RC[1]&""(""&RC[-SL]&"")"""
這一段 SL 是4,但是RC是否不能使用參數的方始寫入?

可以

Sub Macro1()
    SL = 4
    Debug.Print "=RC[1]&""(""&RC[-" & SL & "]&"")"""
    ActiveCell.FormulaR1C1 = "=RC[1]&""(""&RC[-" & SL & "]&"")"""
End Sub

至於
其他部份的問題我實在看不懂是什麼意思

rain_yu iT邦新手 1 級 ‧ 2022-08-02 13:31:49 檢舉

感謝大神的回答。
其他問題主要是因為公式抄來的,所以在定義上不清楚。
底下這列公式,我的解讀是,cells(列,行)
ColCNT = Cells(Rows.Count, 1).End(xlUp).Row To 1 Step -1
如果行(欄)設定=1,那麼rows.count,就是在計算列的總長度。
.End(xlUp).Row To 1 Step -1 這行就是指列的最大的數字
EX:共十列,每跑一次FOR就,row就會-1。
希望這部分沒有解讀錯誤。

然後問題是,我想要固定列,找出有幾欄。不曉得能不能改寫成下面的公式?我自己測試是不行,是否哪裡寫錯?
ColCNT = Cells(1, Columns.Count).End(xlUp).Columns To 1 Step -1

海綿大真厲害,我真的是看不懂。

1
Misty0723
iT邦新手 3 級 ‧ 2022-08-03 01:36:07

(1) 如海綿寶寶說的,要把變數與其他文字以 & 相連
(2) 抓最後一行:EndCol = Cells(1, Columns.Count).End(xlLeft).Column
抓最後一列:EndRow = Cells(Rows.Count, 1).End(xlUp).Row
(3) 如果要涵蓋到最後一列:Selection.AutoFill Destination:=Range(Cells(2, Sp), Cells(EndRow, Sp))

rain_yu iT邦新手 1 級 ‧ 2022-08-03 11:48:07 檢舉

謝謝您的指點,我果然真的對這些公式沒有搞懂。
透過您的提示,我找到這樣是可以計算欄位的。
Cells(1, Columns.Count).End(xlToLeft).Column

rain_yu iT邦新手 1 級 ‧ 2022-08-03 14:04:53 檢舉

第三個問題也已經解決了,謝謝

我要發表回答

立即登入回答