2016-04-26 14 views
1

私はVBA for Excelの比較的新しいプログラマーであり、仕事関連のプロジェクトの助けを求めています。マクロを使って会計年度を更新する

手元の問題は、入力ボックスにユーザーが指定した任意の今後の会計年度の日付エントリを更新してしまう予算追跡システム、用の更新ルーチンの設計に関するものである:

Sub Putittogether() 
On Error Resume Next 

Dim xMonthNumber As Integer 
Dim xMonthNumber2 As Integer 
Dim xYearInput As Integer 
Dim xCell As Range 
Dim xCell2 As Range 
Dim xMonthYear As Range 
Dim xMonthNextYear As Range 

Set xMonthYear = Range("B4:B12") 
Set xMonthNextYear = Range("B1:B3") 


xYearInput = InputBox("Please enter year:") 


For Each xCell In xMonthYear 
    xCell = xYearInput 
     For xMonthNumber = 4 To 12 
     Range("B" & xMonthNumber).NumberFormat = "General" 
     Range("B" & xMonthNumber) = MonthName(xMonthNumber, True) & xCell 
      For Each xCell2 In xMonthNextYear 
      xCell2 = xYearInput + 1 
       For xMonthNumber2 = 1 To 3 
       Range("B" & xMonthNumber2).NumberFormat = "General" 
       Range("B" & xMonthNumber2) = MonthName(xMonthNumber2, True) & xCell2 
      Next xMonthNumber2 
     Next xCell2 
    Next xMonthNumber 
Next xCell 

End Sub 

マクロは今年の4月から翌年の3月にかけて二重ループになります。

私は2つの場所で問題にぶつかります:私が使っている方法を使って、B列の範囲を1-12行に厳密に反映させる必要があり、他の行は出力に問題を引き起こします理由は分かりません。

2番目の問題は、毎月トラッキングテーブルを取得していて、ヘッダー行(つまり、最初のデータ行をB2に移動)があるテーブルでこのマクロを実行しようとすると、どのように私はそれを別の範囲で動作させるのですか?

ご協力いただきありがとうございます。

答えて

1

を使用することができますように。これはループをコードの2行に単純化します。あなたは、開始行を規定する必要がある場合は

その後、一つの方法は、+ STARTROWするstartRow属性から行のループを実行することです11.

だからあなたのコードは次のようになります。

Const START_ROW As Integer = 1 'set this to the row you want 
Dim ws As Worksheet 
Dim r As Integer 
Dim dat As Date 
Dim yyyy As Integer 

Set ws = ThisWorkbook.Worksheets("Sheet1") 

yyyy = InputBox("Please enter year:") 

dat = DateSerial(yyyy, 4, 1) 
For r = START_ROW To START_ROW + 11 
    ws.Cells(r, "B").Value = Format(dat, "mmmyyyy") 
    dat = DateAdd("m", 1, dat) 
Next 
+0

@INOPIAE申し訳ありませんが、あなたの答えを見ていない... 2つの大きな心!私はOPの行の質問を手助けするために純粋にそれを保つつもりです。 – Ambie

+0

ここで提出したバージョンを書き込む前に、DateAddメソッドを使用していましたが、範囲全体のループの最後の値を出力していたという問題があり、その年を整数として扱い、毎月一緒に置いてください。日付データタイプは当時の私の心を邪魔しませんでした... 私たちが見てきたように、あなたとイノピアのアプローチはかなり洗練されています。 ありがとうございました。大変感謝しています。 – quadrature

1

はあなたがDateデータ型と、その後DateAdd()機能を使用できませんでした。このコード

Sub Putittogether() 
    On Error Resume Next 

    Dim xYearInput As Integer 
    Dim xColumn As Integer 
    Dim xDate As Date 

    xYearInput = InputBox("Please enter year:") 

    xDate = DateSerial(xYear,4,1) 'you might adjust this date to the first month to be entered 

    For xColumn = 1 to 12 

     Cells("B" & xColumn).NumberFormat = "General" 
     Cells("B" & xColumn) = Format(xDate,"MMM YY") 
     xDate = DateAdd("m", 1, xDate) 

    Next xColumn 

End Sub 
+0

はあなたに感謝を洞察のために、このバージョンは人生を楽にするでしょう - 私はこれの前にDateSerialメソッドについて知りませんでした。 – quadrature

関連する問題