2016-07-04 8 views
0

ユーザーが選択できるデータ検証ドロップダウンを含むスプレッドシートを作成しています。ドロップダウンは、いくつかの事前定義された条件に基づいて、(非表示の)タブ上の名前付き範囲から設定されます。VBAを使用してデータ範囲条件からExcelデータ検証ドロップダウンに移入

(現在は> 500行である)データ範囲の抽出物は、

| Type | Code | Description  | Start Date | End Date | Status | 
| A | 001 | IT    | 01/01/2016 | 31/12/2016 | O  | 
| A | 002 | HR    | 31/10/2017 | 31/12/2018 | O  | 
| A | 003 | Payrol   | 01/01/2016 | 31/12/2016 | O  | 
| A | 004 | Marketing  | 01/01/2016 | 31/12/2016 | C  | 
| B | 110 | Technical Review | 01/01/2016 | 31/12/2016 | O  | 

されており、中にある名前付き範囲「コードデータ」私は、データ検証ドロップダウンを移入したいのです

  • タイプ=
  • ステータス= O
  • :データ範囲からVBAを使用してコード列と
  • スタート日<今日の日付
  • 終了日>本日の日付

私はうまく動作しますが、起動が遅いODBC/SQLを使用しようとした - 私はそれを照会する前に、それがデータ範囲への接続です作っていると仮定

もっと速く/より良い方法がありますか?

+0

vbaを使用する必要がありますか?名前付きの範囲は同じことをより速く実行します –

+0

なぜうまく動作するODBC/SQLを使用していますが、起動が遅いのですか?名前付き範囲を使用してデータ検証のドロップダウンを設定していないのはなぜですか? –

+0

大きなデータセット/範囲の条件に基づいてデータの名前付き範囲を作成するにはどうすればよいですか? – BlueFrog

答えて

0

私はデータの検証には連続した範囲が必要だと思いますので、最初にフィルタをかけて、結果のセルを別の場所に移動するか、データの検証に隠れたセルなどが含まれている必要があります。範囲:

Sub someMacro() 
With Sheets("Sheet1") 
    With .Range("a1:f6") 
     .AutoFilter Field:=1, Criteria1:="A" 
     .AutoFilter Field:=6, Criteria1:="O" 
     .AutoFilter Field:=4, Criteria1:="<" & Date 
     .AutoFilter Field:=5, Criteria1:=">" & Date 
    End With 
    .Range(.Range("b2"), .Range("b2").End(xlDown)).Copy 
    .Range("g1").PasteSpecial xlPasteValues 'Put this whereever is suitable, don't forget to add something in to delete this with each run 
    .Range("h1").Validation.Add Type:=xlValidateList, Formula1:="='Sheet1'!" & .Range(.Range("g1"), .Range("g1").End(xlDown)).Address 'I've validated cell h1, change this to whatever 
End With 
End Sub 
関連する問題