2017-12-13 11 views
0

ここアマチュア - これはシンプルで、入手できません。変更があると、Excelは新しい行(最初の行のデータを含む)を作成します。

私のワークブックには、A2の3分ごとに更新されるタイマーがあります。 B2、C2、D2などでは、非常に高速なリフレッシュレートを持つプラグインから値が変動します。

A2の値が変更されるたびに(そこからの時間とともに)、B2、C2などの値を新しい行として「記録」するマクロが必要です。ここで(それは素晴らしい作品、タイマーマクロを除く)、私がこれまでにしたものである:

Private Sub Worksheet_Calculate() 
    Worksheet_Change Range("A2") 
End Sub 

Private Sub Worksheet_Change(ByVal Target As Range) 
    If Not Intersect(Target, Range("A2")) Is Nothing Then 
     Application.EnableEvents = False 
     Range("A" & Rows.Count).End(xlUp).Offset(1, 0).Value = Range("A2").Value 
     Application.EnableEvents = True 
     Application.EnableEvents = False 
     Range("B" & Rows.Count).End(xlUp).Offset(1, 0).Value = Range("B2").Value 
     Application.EnableEvents = True 
     Application.EnableEvents = False 
     Range("C" & Rows.Count).End(xlUp).Offset(1, 0).Value = Range("C2").Value 
     Application.EnableEvents = True 
     Range("D" & Rows.Count).End(xlUp).Offset(1, 0).Value = Range("D2").Value 
     Application.EnableEvents = True 
     Range("E" & Rows.Count).End(xlUp).Offset(1, 0).Value = Range("E2").Value 
     Application.EnableEvents = True 
     Range("F" & Rows.Count).End(xlUp).Offset(1, 0).Value = Range("F2").Value 
     Application.EnableEvents = True 
     Range("G" & Rows.Count).End(xlUp).Offset(1, 0).Value = Range("G2").Value 
     Application.EnableEvents = True 
     Range("H" & Rows.Count).End(xlUp).Offset(1, 0).Value = Range("H2").Value 
     Application.EnableEvents = True 
    End If 
End Sub 

このコードの問題は、私はB2、C2などの値に置くことでプラグインを使用する場合、すべてが行くということですワイルドで新しい行の作成を開始します(これを自分自身で試してみたい場合は、=RANDBETWEEN(40,80)を値の1つとして入力します。これは、私が直面する問題を完全にエミュレートします)。

私の質問に戻って、A2に変更が加えられたときにマクロが新しい行を作成するにはどうすればよいですか?

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

+2

注: 'Application.EnableEvents = True'または' False'が何をしているか、必要な数、場所と理由を調べる必要があります。 –

+1

再計算イベントが発生するたびにchangeイベントを呼び出し、ターゲットを強制的にA2にします。したがって、セルが変わるたびにコードが実行されます。なぜあなたはこのコードを持っているのですか? Private Sub Worksheet_Calculate() Worksheet_Change Range( "A2") End Sub –

+0

このコードを削除すると、何も記録されません。私はターゲットA2に強制しなければならないと思いますか?あなたは私が代わりに使ってみたいことは何ですか? @HarassedDad –

答えて

1

あるかさえActiveSheetにまた、あなたはおそらく何でもあなたのシートをシート1を変更する必要があります(以下を使用してコードを交換し、worksheet_calculateを削除)私はこれをテストしてみた、それはあなたがそれを期待します:

Private Sub Worksheet_Change(ByVal Target As Range) 
    If Target.Address = Sheet1.Range("A2").Address Then 'check to see if changes happend on A2 
     Application.EnableEvents = False 
     Sheet1.Range("A" & Rows.Count).End(xlUp).Offset(1, 0).Value = Sheet1.Range("A2").Value 'copy the row from Row 2 to next empty row 
     Sheet1.Range("B" & Rows.Count).End(xlUp).Offset(1, 0).Value = Sheet1.Range("B2").Value 
     Sheet1.Range("C" & Rows.Count).End(xlUp).Offset(1, 0).Value = Sheet1.Range("C2").Value 
     Sheet1.Range("D" & Rows.Count).End(xlUp).Offset(1, 0).Value = Sheet1.Range("D2").Value 
     Sheet1.Range("E" & Rows.Count).End(xlUp).Offset(1, 0).Value = Sheet1.Range("E2").Value 
     Sheet1.Range("F" & Rows.Count).End(xlUp).Offset(1, 0).Value = Sheet1.Range("F2").Value 
     Sheet1.Range("G" & Rows.Count).End(xlUp).Offset(1, 0).Value = Sheet1.Range("G2").Value 
     Sheet1.Range("H" & Rows.Count).End(xlUp).Offset(1, 0).Value = Sheet1.Range("H2").Value 
     Application.EnableEvents = True 
    End If 
End Sub 
+0

それは美しく動作するようだ!ありがとうございました! –

関連する問題