2011-10-25 9 views
0

2つの質問は、まず、多次元配列を割り当てるときにそれをポレーションする方法を私に思い出させることができますか?私はいつもforループでやっていますし、どうやって静かにそれを逃れるようですか?セルのバリデーションと配列

私が実際に探しているのは、配列を使用してセルの内容を検証することです。以下の例では、第2次元の最初の要素のみを使用したいと考えています。
0,0
1,0
2,0
3,0
4,0

すなわち

は.Addタイプを更新する方法はあります:= xlValidateList、Formula1: = Join(ary、 "、")行は5行4列の配列からこれら5つの値を返すだけですか?

Cheeers

アーロン

Sub test() 


Dim ary As Variant 
ReDim ary(5,4) 


ary = Array("Value1", "Value2", "Value3", "test", "test2", "test3", "test4") 

With ActiveSheet.Cells(1, 1).Validation 
    .Delete 
    .Add Type:=xlValidateList, Formula1:=Join(ary, ",") 
    .IgnoreBlank = False 
    .InCellDropdown = True 
    .InputTitle = "" 
    .ErrorTitle = "" 
    .InputMessage = "" 
    .ErrorMessage = "" 
    .ShowInput = True 
    .ShowError = True 
End With 
End Sub 
+0

ここで多次元配列を編集しましたか?実際に範囲から入力する場合は、その範囲に名前を付けて、その名前を検証に使用することができます。 –

+0

配列はデータをフォールリング形式0,0 = description、0,1 =開始ポスト、0,2 =終了ポストで保持します。私は説明でセルの妥当性を確認したいだけです。 Actulay配列は、実行時に移入されます。サイズはx×3です。私は別の配列に説明を引き出すことができることを知っていますが、これはiniffecnetのようです – DevilWAH

答えて

2

1Dに2Dアレイのサイズ変更が迅速である

コードは、次のサンプルデータを、第二のループのみを抽出してください5 * 4配列を移入新しい1D配列の最初の次元は、最初の配列と同じ行の長さです。

Sub test() 

    Dim ary As Variant 
    Dim X As Variant 
    Dim lngRow As Long 
    Dim lngCol As Long 

    ReDim ary(1 To 5, 1 To 4) 
    ReDim X(1 To UBound(ary, 1)) 

    For lngRow = 1 To UBound(ary, 1) 
     For lngCol = 1 To UBound(ary, 2) 
      ary(lngRow, lngCol) = "I am row " & lngRow & " and dimension " & lngCol 
     Next 
    Next 

    For lngRow = 1 To UBound(ary, 1) 
    X(lngRow) = ary(lngRow, 1) 
    Next 

    With ActiveSheet.Cells(1, 1).Validation 
     .Delete 
     .Add Type:=xlValidateList, Formula1:=Join(X, ",") 
     .IgnoreBlank = False 
     .InCellDropdown = True 
     .ShowInput = True 
     .ShowError = True 
    End With 
End Sub 
+0

私は1d配列に余分な問題はないと言いましたので、私はこのステップを踏まなければならないのですか? – DevilWAH

+0

私はそうは思わない、私は2D to 1Dメソッドのショートカットを見たことがない。それは非効率的なコーディングのように感じるとしても、ループ配列は非常に効率的です。私は上記のアプローチはあなたの既存のスタイルに応じていくつか使用するかもしれないと思っていました。乾杯。 – brettdj

+0

私はあなたの専門知識に屈するでしょう、私は配列から単一の行/ coloumの値を簡単に引き出すことはできません。つまり、すべてのディメンションを1つからロックします。私はあなたがネットワーク上で何かしていることを何とかして、マスクを適用して変更可能なものと変更できないものを制限しています。あなたのコードで多くの助けになったのは、マルチディメンオン配列でのUBoundの使用です。これはsomethignなので、私は使用する必要があります:)ヘルプとコメントをありがとう。 – DevilWAH

関連する問題