2012-03-09 12 views
1

Webサイトから引き出して自動的に(または手動で)更新するテーブルがExcelにあります。Excelでのデータ更新後の範囲の並べ替え

データが更新されるたびに自動的にソートしたい別のテーブルがリンクされています。これを行う方法は?

答えて

2

自動的に更新する必要のあるテーブルがあるシートには、以下のコード(擬似コード)のようなものを追加することができます。テーブルが変更されるたびにテーブルがソートされます。頻繁に更新を受けると、時間がかかることに注意してください。

Private Sub Worksheet_Change(ByVal Target As Range) 
    If Target is in the table (you can check Target.Row and Target.Column for example) Then 
     Sort the table 
    End If 
End Sub 

範囲を使用すると、たとえば、これを行うことができます名前付き範囲と呼ばれるnamed_range(非常に効率的ではなく読めない)の場合:

Private Sub Worksheet_Change(ByVal Target As Range) 
    For Each c In [named_range] 
     If c = Target Then MsgBox "OK" 
    Next c 
End Sub 

それとも、これを行うことができ、より良いの名前は行われます範囲が大きい:

Private Sub Worksheet_Change(ByVal Target As Range) 
    Dim row_start As Long 
    Dim row_end As Long 
    Dim col_start As Long 
    Dim col_end As Long 

    row_start = [named_range].Cells(1, 1).Row 
    col_start = [named_range].Cells(1, 1).Column 
    row_end = row_start + [named_range].Rows.Count - 1 
    col_end = col_start + [named_range].Columns.Count - 1 

    If Target.Row >= row_start And Target.Row <= row_end And Target.Column >= col_start And Target.Column <= col_end Then 
     MsgBox "In range" 
    End If 

End Sub 
+0

提案ありがとうございます...私は最初の列がランク(ランク関数を使用して)であるテーブルがあります。したがって、ランクは更新されたデータに基づいて変化します。変更の全範囲を監視するにはどうすればよいのですか(必ずしもすべてが変更されるわけではないので)。 – McB

+1

範囲がA1:A5であると仮定すると、次のようにテストできます。If Target.Row> = 1 And Target.Row <= 5 And Target.Column = 1 Then ... – assylias

+0

どのように「IF Target IN namedRange Then "? – McB

関連する問題