2017-04-11 71 views
0

TLDR:我需要更改我編寫的基於用戶輸入選擇一系列數據的宏。它最初使用整個範圍(只是連續的列),但現在需要選擇其他列。 enter image description here enter image description here在動態範圍VBA中選擇每個其他列

我有一個表,我的工作在哪裏,用戶將輸入的年數,他們想看看投資了過來。基本上,我有50年的人口,我的宏隱藏超過指定年份的列。然後使用剩餘的可見範圍,我有運行的指標(淨現值,內部收益率)。這一切都運行良好,但我現在需要在初始數據旁邊放置一個百分比列,這意味着公制公式無法按照原樣使用連續範圍運行。他們需要看到data.Here 下面的每隔一列是我的代碼:

Sub HideCol() 

'Prep the sheet 

Sheets("Modeling").Visible = True 
Sheets("Modeling").Activate 
Columns("C:AZ").Select 
Selection.EntireColumn.Hidden = True 
myNum = Worksheets("InitialData").Range("LeaseTerm").Value 
Range("C1").Select 
numrows = Selection.Rows.Count 
numColumns = Selection.Columns.Count 
Selection.Resize(numrows + 0, numColumns + myNum - 1).Select 
Selection.EntireColumn.Hidden = False 

'Input dynamic calcs 
'This is my problem here. calcrange selects consecutive columns, and I need to do every other 
Dim calcrange As Range 

Set calcrange = Union(Range("InvestmentOutlay"), Range(Range("B57"), Range("B57").End(xlToRight))) 

Range("IRR").Formula = "=IRR(" & calcrange.Address & ")" 

Dim npvRange As Range 
Set npvRange = Range(Range("C57"), Range("C57").End(xlToRight)) 

Range("NPV").Formula = "=NPV(EconGrowth," & npvRange.Address & ")" 

Dim outF As Range 
Dim inF As Range 

Set outF = Range("InvestmentOutlay") 
Set inF = Range(Range("C57"), Range("C57").End(xlToRight)) 
Range("PB").Formula = "=PaybackPeriod(" & outF.Address & ", " & inF.Address & ")" 

End Sub 

回答

1

相反的:

Set calcrange = Union(Range("InvestmentOutlay"), Range(Range("B57"), Range("B57").End(xlToRight))) 

只是每隔一列加入到聯盟:

Dim c As Long 
Set calcrange = Range("InvestmentOutlay") 
For c = 2 To Range("B57").End(xlToRight).Column Step 2 
    Set calcrange = Union(calcrange, Cells(57, c)) 
Next 
+0

感謝答覆。我在VBA方面很新穎,所以我希望我可以把事情做好。我得到一個錯誤,調試突出顯示這一行:/ n'Dim c As Long Set calcrange = Range(「InvestmentOutlay」) For c = 2 To Range(「B57」)。End(xlToRight).Column步驟2 設置calcrange =聯合(calcrange,Cells(57,c)) Next' This line here ** ** Range(「IRR」)。Formula =「= IRR(」&calcrange.Address&「) 「' – jules325

+0

對不起,這很讓人困惑。所以它在你寫的代碼之後的下一行,它在IRR公式中輸入calcrange變量: 'Range(「IRR」)。Formula =「= IRR(」&calcrange.Address&「)」' – jules325

+1

@ jules325 - ahh - 我應該更詳細地閱讀代碼 - 我認爲你可以改變這一行來說'Range(「IRR」)。Formula =「= IRR((」&calcrange.Address&「))''(但是我會預料到這會給你一個問題,除非「InvestmentOutlay」是單元格A57。) – YowE3K