我在Excel VBA中工作。我正在進行迴歸。 「O」列中的數據是因變量。使用do while循環正在運行這個迴歸8次。如何在Excel VBA中使用移動列的範圍?
我遇到的問題如下。在每次通過時,我正在刪除一列。這當然會將列O移動到第一遍的第N列,第二遍的第M列等。
我需要找到一種方法來使用範圍來做到這一點,而無需使用if then語句。任何人都可以闡明這一點嗎?
我在Excel VBA中工作。我正在進行迴歸。 「O」列中的數據是因變量。使用do while循環正在運行這個迴歸8次。如何在Excel VBA中使用移動列的範圍?
我遇到的問題如下。在每次通過時,我正在刪除一列。這當然會將列O移動到第一遍的第N列,第二遍的第M列等。
我需要找到一種方法來使用範圍來做到這一點,而無需使用if then語句。任何人都可以闡明這一點嗎?
您可以訪問細胞:
.Cells(RowNumber,ColumnNumber)
每次你刪除列,你可以減少一個列號來實現你的目標。
很難想象你正在做什麼而沒有看到代碼,但你可能會考慮使用Range Offset功能。查看在範圍之前,之後和之後,範圍值如何變化。然後設計一個可以處理這些情況的小語句。
例如:
Option Explicit
Sub x()
Dim rngCurrent As Range
Dim wksCurrent As Worksheet
Set wksCurrent = ActiveSheet
' Example 1: The range in question is in a column after the column to delete
Set rngCurrent = wksCurrent.Cells(20, 31)
Debug.Print rngCurrent.Address '$AE$20
wksCurrent.Range("O:O").Delete
Debug.Print rngCurrent.Address '$AD$20 (it decreased automatically)
Set rngCurrent = rngCurrent.Offset(0, -1) ' Reset column to previous column, in this case 30
Debug.Print rngCurrent.Address '$AC$20
' Example 2: The range in question is a column before the deleted column
Set rngCurrent = wksCurrent.Cells(20, 3)
Debug.Print rngCurrent.Address '$C$20
wksCurrent.Range("O:O").Delete
Debug.Print rngCurrent.Address '$C20 (no change since the deleted column was after this range)
Set rngCurrent = rngCurrent.Offset(0, -1) ' Reset column to previous column, in this case 30
Debug.Print rngCurrent.Address '$B20
' Example 3: The range in question is the same as the deleted column
Set rngCurrent = wksCurrent.Cells(20, 15)
Debug.Print rngCurrent.Address '$O$20
wksCurrent.Range("O:O").Delete
'Debug.Print rngCurrent.Address 'Error: Object Required, the cell pointed no longer exists
'Set rngCurrent = rngCurrent.Offset(0, -1) ' Error: Object Required
'Debug.Print rngCurrent.Address '$O19 ' Error: Object Required
' Example 4: The range in question is the same as the deleted column. Avoid the error.
Set rngCurrent = wksCurrent.Cells(20, 15)
Debug.Print rngCurrent.Address '$O$20
wksCurrent.Range("O:O").Delete
Set rngCurrent = wksCurrent.Range("O20").Offset(0, -1) ' Refer to the worksheet to reset the range, instead of to the range itself
Debug.Print rngCurrent.Address '$N20
End Sub
命名的範圍將與移動選擇。然後你在你的代碼中使用這個名字。例如MyData
定義爲Sheet1!O:O
。如果列被刪除,則Excel將自動更改命名區域的地址。
例子:
ActiveWorkbook.Names.Add Name:="TempRange", RefersTo:="=Sheet1!O1"
Range("TempRange").Value = Range("TempRange").Address
Range("A:A").Delete
Range("TempRange").Value = Range("TempRange").Address
還,注意地址並沒有改變,但它引用的單元格呢,你會看到的價值$O$1
兩個O1和N1
IS表中的數據?或者至少有一個標題?如果存在標題但沒有表格,則可以使用匹配,=MATCH("Column Header",1:1,0)
將返回包含該標題的列的編號。
否則,如果你有頭和一個表,你可以簡單地用TableName[HeaderName]
呼叫,它將把所有的數據從列在表中指定的標題下。請注意以下內容如何突出顯示指定標題下的所有數據。
無論哪種方式,數據將始終保持不變,將您的信息,只要頭部保持您指定的行或表所示。
你能分享一些代碼,以便我們能夠理解你到底想要達到什麼目的嗎? –
會顛倒列的工作順序嗎? – pnuts
'不使用if語句'???這是一本雜誌的追求嗎? –