2017-09-03 8 views
1

これは、その列に追加された値に年を追加しようとしています。私は新しい列に貼り付けるのではなく、同じ列の値を置き換えたい。1年間を値の範囲に追加する - Excel VBA

これまでに書かれたコードIVEは、次のとおりです。

Private Sub Update_Click() 

    Application.ScreenUpdating = False 
    Application.Calculation = xlCalculationManual 

    Dim path As String, fileName As String 
    Dim lastRowInput As Long, lastRowOutput As Long, rowCntr As Long, lastColumn As Long 
    Dim inputWS1 As Worksheet, outputWS As Worksheet 

    Set inputWS1 = ThisWorkbook.Sheets("Universal") 
    Set outputWS = ThisWorkbook.Sheets("Carriers") 


    rowCntr = 1 

    lastRowInput = inputWS1.Cells(Rows.Count, "A").End(xlUp).Row 
    lastRowOutput = outputWS.Cells(Rows.Count, "A").End(xlUp).Row 
    lastColumn = inputWS1.Cells(1, Columns.Count).End(xlToLeft).Column 

    inputWS1.Range("A4:A" & lastRowInput).Copy outputWS.Range("B2") 
    inputWS1.Range("B4:B" & lastRowInput).Copy outputWS.Range("C2") 
    outputWS.Range("E2:E" & (lastRowInput - 2)).Value = inputWS1.Name 
    inputWS1.Range("J4:J" & lastRowInput).Copy outputWS.Range("G2") 
    inputWS1.Range("G2:G" & lastRowInput).Value = DateAdd("yyyy", -1, CDate(inputWS1.Range("G2:G" & lastRowInput))) 

    Application.ScreenUpdating = True 
    Application.Calculation = xlCalculationAutomatic 

End Sub 

私はあなたたちは私を助けるために必要な行がある:

DateAdd関数( "YYYY"、-1、CDate関数(inputWS1.Range (「G2:G」& lastRowInput)))

inputWS1私のシートとlastrowinputの名前で列の最後の行を見つけるために私の変数です。私はこのコードを配置する時点で既にG2の値があり、私はちょうど彼らが同じ列に昨年の日付に変換したいと思います。

助けてください

+1

ボタンをクリックすると、セルの列に年を追加します。ボタンをクリックする回数は何回ですか? – jsotola

+0

実際には月に1回、ボタンはセル内に新しいデータをインポートするためです。ただし、古いデータを前のセルのデータで上書きします。だから、基本的には、ボタンをクリックするたびに、新しいシートのすべてがクリアされ、古いシートからコピーされます。 –

+0

ワークシートの内容を削除することに言及しておく必要があります。私は複数回のマクロ実行で1年だけ更新するための仕組みを見つけようとしていた – jsotola

答えて

1
ます。また、一度に以下のような計算を実行するための機能を評価し使用することができ

...

inputWS1.Range("G2:G" & lastRowInput).Value = Evaluate("=IF(ISNUMBER(G2:G" & lastRowInput & "),DATE(YEAR(G2:G" & lastRowInput & ")-1,MONTH(G2:G" & lastRowInput & "),DAY(G2:G" & lastRowInput & ")),G2:G" & lastRowInput & ")") 

すると、カラム内の1つのGで年を減算したい、あなたのコード内の上記の行を組み込みます

+0

私はこの行を追加して何も起こりませんでした。エラーはありません。 –

+0

このコードをいくつかのダミーデータでテストしたところ、問題なく動作しました。例えばInputWS1のG2の日付が2011年9月1日の場合、それは09/01/2016に変更されます。あなたが達成しようとしていることではありませんか? – sktneer

+0

申し訳ありません、それは働いた! –

0

dateadd関数でセルの特定の値を変換する必要があります。

Private Sub Update_Click() 

Application.ScreenUpdating = False 
Application.Calculation = xlCalculationManual 

Dim path As String, fileName As String 
Dim lastRowInput As Long, lastRowOutput As Long, rowCntr As Long, lastColumn As Long 
Dim inputWS1 As Worksheet, outputWS As Worksheet 

Set inputWS1 = ThisWorkbook.Sheets("Universal") 
Set outputWS = ThisWorkbook.Sheets("Carriers") 


rowCntr = 1 

lastRowInput = inputWS1.Cells(Rows.Count, "A").End(xlUp).Row 
lastRowOutput = outputWS.Cells(Rows.Count, "A").End(xlUp).Row 
lastColumn = inputWS1.Cells(1, Columns.Count).End(xlToLeft).Column 

inputWS1.Range("A4:A" & lastRowInput).Copy outputWS.Range("B2") 
inputWS1.Range("B4:B" & lastRowInput).Copy outputWS.Range("C2") 
outputWS.Range("E2:E" & (lastRowInput - 2)).Value = inputWS1.Name 
inputWS1.Range("J4:J" & lastRowInput).Copy outputWS.Range("G2") 
'inputWS1.Range("G2:G" & lastRowInput).Value = DateAdd("yyyy", -1, CDate(inputWS1.Range("G2:G" & lastRowInput))) 
Dim vDB As Variant, i As Long 
vDB = inputWS1.Range("G2:G" & lastRowInput) '<~~ get data to variant array vDB 
For i = 1 To UBound(vDB,1) 
    vDB(i, 1) = DateAdd("yyyy", -1, CDate(vDB(i, 1))) 
Next i 
inputWS1.Range("G2:G" & lastRowInput) = vDB 


Application.ScreenUpdating = True 
Application.Calculation = xlCalculationAutomatic 
End Sub 
+0

「vDB(i、1)= DateAdd( "yyyy"、-1、CDate(vDB(i、1)))」という行にエラーが表示されます。 –

関連する問題