2016-06-09 129 views
0

我對vba相當陌生,有一個相當簡單的問題。是否有人可以幫助:選擇最後一行,範圍,vba

而是選擇特定的細胞,我希望我的VBA宏去關注的柱的底部,跳過和兩個單元下方做到以下幾點:

Range("W72").Select 
    Selection.NumberFormat = "General" 
    ActiveCell.FormulaR1C1 = "Null_value" 
    Range("X72").Select 
    Selection.NumberFormat = "General" 
    ActiveCell.FormulaR1C1 = "=R[-2]C[1]-SUM(R[-2]C[-8]:R[-2]C[-6])" 

正如你可以看到上面的代碼是指特定的單元格W72和X72。目前,這些列中的最後一項是W70和X70,但下個月我的數據集將變大,因此W72和X72不是執行上述操作的正確位置。我如何糾正這個問題,使得我的vba代碼自動進入W(n)的底部:X(n),跳過一行,並且在W(n + 2)中,X(n + 2)執行上面的代碼。我的公式上面(ActiveCell.FormulaR1C1)也指的是特定的單元格,在我的情況下,行70左邊的幾列,但正如你可能告訴,這也有相同的問題,因爲行引用更改每個月。我需要讓我的vba使公式獲取這些列的最後一行,列是P,Q,R。

感謝您提供的任何幫助。

更新:我同樣的工作項目的一部分,如果任何人都可以幫助,我將不勝感激。謝謝:

大家好,

我現在有關於改變變量的輸入框everymonth:

r_mo = Application.InputBox(提示:=「輸入報表每月YYYYMM(如: 「)

這提示一個輸入框,哪一個必須手動輸入...但是,我想自動執行此過程並且不需要輸入框。 vba中沒有現在的函數會自動生成今天的日期。

從現在開始,或者系統功能,我想要做的就是提取四位數的年份和兩位數的月份。

因此,舉例來說,如果我們在decemeber 2016

子asasdas()

「現在運作」 r_mo = YYYYMM「從 」NOW函數「

末次自動更新

我很感激你能給我的任何幫助,並且非常感謝你。

+2

戴夫給了你一個很好的答案。然而,一個額外的提示,這將使您在VBA中取得很好的效果:幾乎不需要使用代碼選擇單元格。而不是做「範圍(...)。選擇」,然後「Selection.NumberFormat = ...」 - 你可以簡單地說「Range(...)。NumberFormat = ...」。您將瞭解如何使用「選擇」查看宏錄製器的輸出。這就是每個人都在學習的方式:)但是他們接下來要學習的是,當你自己編寫代碼時,你可以直接在單元上直接執行相關操作而無需選擇。祝你好運! –

回答

1

可以在VBA獲取給定列的最後一個人口稠密行(W在我的例子),用下面的代碼:

Dim ws As Worksheet : Set ws = ThisWorkbook.Worksheets("MySheetNameHere")  
lastRow = ws.Cells(ws.Rows.Count, "W").End(xlUp).Row 

當然,如果你再加入2〜lastRow你有你的細胞尋找。

+0

謝謝,非常有幫助! –

0

我不喜歡它

Sub asdf() 

    Range("w1048576").End(xlUp).Offset(2, 0).Select 'gets the last row 
    With Selection 
     .NumberFormat = "General" 
     .FormulaR1C1 = "Null_value" 
    End With 

    ActiveCell.Offset(, 1).Select 

    With Selection 
     .NumberFormat = "General" 
     .FormulaR1C1 = "=R[-2]C[1]-SUM(R[-2]C[-8]:R[-2]C[-6])" 
    End With 

End Sub 
+0

非常感謝您的幫助! –

0

如果你想你將不得不作出一個新的問題作出更詳細的答案,但對於你的第二個問題,試試這個。

Sub Now() 
    Dim myDate As String 
    myDate = Date 
    myDate = Format(myDate, "yyyymm") 
    Debug.Print myDate '201606 output for June 10th 2016 
End Sub