2016-06-09 9 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) также относится к конкретным ячейкам, в моем случае Row 70 несколько столбцов слева, но, как вы, вероятно, говорите, это тоже имеет ту же проблему, поскольку строка, ссылающаяся на изменения каждого месяц. Мне нужно, чтобы моя vba получила формулу, которая отображает последнюю строку этих столбцов, столбцы P, Q, R.

Спасибо за любую помощь, которую вы можете предоставить.

Обновление: часть моего же рабочего проекта, я был бы очень признателен, если кто-то может помочь в этом. Спасибо:

Привет всем,

Я в настоящее время есть поле ввода для переменной, которая изменяет everymonth:

r_mo = Application.InputBox (подсказка: = "Введите отчетный месяц, как YYYYMM (например: 201604). Ошибки в этой записи приведут к ошибкам в результатах. »)

Это окно ввода ввода, в которое нужно вручную войти ... Однако я хочу автоматизировать этот процесс и устранить необходимость в поле ввода. Не существует ли теперь функции vba, которая автоматически генерирует сегодняшнюю дату.

От теперь или системной функции все, что я хочу сделать, это извлечь год в четыре цифры и месяц в две цифры.

Так, например, если мы находимся в decemeber 2016

Sub asasdas()

"Теперь работать" r_mo = ГГГГММ 'автоматически обновляется из "теперь работают"

End Sub

Я ценю любую помощь, которую вы можете мне дать, и большое спасибо.

+2

Дэйв дал вам хороший ответ ниже. Тем не менее, дополнительный наконечник, который поможет вам хорошо зарекомендовать себя в VBA: почти никогда не нужно выбирать ячейки с кодом. Вместо «Range» (...) выберите «, а затем« Selection.NumberFormat = ... »- вы можете просто сказать« Range (...). NumberFormat = ... ». Вы узнаете, как использовать «Выбрать» для просмотра вывода макрорекордера. Вот как все учатся :) Но следующая вещь, которую они изучают, заключается в том, что, когда вы сами пишете код, вы можете просто выполнять соответствующие операции непосредственно на ячейках без выбора. Удачи! –

ответ

1

Вы можете получить последнюю населенную строку данного столбца (W в моем примере) в VBA со следующим кодом:

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 
Смежные вопросы