2017-05-16 6 views
0

変数名に基づいてどの配列を設定するか選択できますか?VBAの変数に基づいて使用する配列を選択してください

私はイエロー、ブルー、グリーン、ライラックに属する4セットのデータを持っています。まったく同じ4つのアレイを作成しました。データは、開始時にY、B、G、Lがあることを除いて同じですが、対応する配列を作成したいが、すべてのセットを4セット作成したくない。ラインmySorter = (Mid(myLines(i), 53, 1))上記のコードで

For i = 0 To UBound(myLines) 
    myAlrmStrDate = Mid(myLines(i), 6, 2) & "/" & Mid(myLines(i), 4, 2) & "/" & Mid(myLines(i), 2, 2) 
    myAlrmStrTime = Mid(myLines(i), 9, 2) & ":" & Mid(myLines(i), 11, 2) & ":" & Mid(myLines(i), 13, 2) 
    myAlrmEndDate = Mid(myLines(i), 38, 2) & "/" & Mid(myLines(i), 36, 2) & "/" & Mid(myLines(i), 34, 2) 
    myAlrmEndTime = Mid(myLines(i), 41, 2) & ":" & Mid(myLines(i), 43, 2) & ":" & Mid(myLines(i), 45, 2) 
    myFaultDesc = (Mid(myLines(i), 49, 50)) 
    mySorter = (Mid(myLines(i), 53, 1)) 
     myCtime = CDate(myAlrmStrTime) 
     myMinutes = Hour(myCtime) * 3600 + Minute(myCtime) * 60 + Second(myCtime) 
     myftime = Int(myMinutes/900) * 900 
     myftime = myftime/86400 * 96 

    ' Find IOTT Alarms 
    If InStr(1, (Mid(myLines(i), 49, 50)), "IOTT") And InStr(1, (Mid(myLines(i), 49, 50)), "CSC ack") <> 0 Then 
     myTimeDiff = CDate(myAlrmEndTime) - CDate(myAlrmStrTime) 
     mySorter(myftime).IOTT = mySorter(myftime).IOTT + 1 
     mySorter(myftime).IOTTDUR = mySorter(myftime).IOTTDUR + myTimeDiff 
     mySorter(96).IOTT = mySorter(96).IOTT + 1 
      If mySorter(myftime).IOTT > mySorter(98).IOTT Then 
      mySorter(97).IOTT = myftime 
      mySorter(98).IOTT = mySorter(myftime).IOTT 
      End If 
     MsgBox "Line" & "=" & i & myFaultDesc 
    End If 

Y、B、G又はLを選択し、それが私は、配列を移入起動に使用するために、アレイを設定する本です。

基本的に私はそれが以下の配列を指すようにしたいが、書類など

Type Sorter 
    Date    As Date 
    time    As Date 
    Colour    As Long 
    Area    As String 
    Cart    As Long 
    ISD     As Long 
    WNI     As Long 
    WNIDUR    As Date 
    LM     As Long 
    IOTT    As Long 
    IOTTDUR    As Date 
    IOC     As Long 
End Type 

Global Y() As Sorter 
Global G() As Sorter 
Global B() As Sorter 
Global L() As Sorter 
Global YGBL() As Sorter 

ReDim Y(99) 
ReDim G(99) 
ReDim B(99) 
ReDim L(99) 
ReDim YGBL(99, 4) 

YGBLがあるが、以下のように私の現在の配列が設定されて

Y(myftime).IOTTDUR 
B(myftime).IOTTDUR 
G(myftime).IOTTDUR 
L(myftime).IOTTDUR 

場合、複雑作成したくありません提案されているように追加されていますが、これがどのように機能するかについてはまだ検討中です

ありがとう

+0

に言及例えば、YBGLは、あなたが使用することができている場合

colind=instr("YBGL",mysorter) 

で最初の次元のインデックスを決定することができますあなたが提供することは、あなたが望むものを理解することをさらに困難にします。配列を塗りつぶしたコードを別のサブ配列に移動し、4つの配列の1つを 'byref'パラメータとして渡したいと思うでしょう。 – GSerg

+0

こんにちは、私は現在4つの別々の配列を持っていて、Y、B、G、Lの文字列に応じて検索して、対応する配列に異なる値を追加したいとします。 – Fabby

+0

1つの配列を宣言し、それをY、B、GまたはLに割り当てますか?またはあなたが空想的で、4つの配列の1つに[参照を作成](http://stackoverflow.com/a/11713643/11683)というコピーを避けたい場合は、参照を記入して破棄しますか? – GSerg

答えて

0

多次元配列を作成できます。次元の1つは色に対応します。次の命令あなたの多次元配列の名前は、あなたがそれはコードのように見える

YBGL(colind,myftime).IOTTDUR 
+0

H2s04:ありがとうあなたは右のライトにありますので、私があなたが示唆するものが正しい場合は、4をすべて含む配列を作成し、上記のようにしてください。あなたの最初の声明をよく理解していますか? – Fabby

+0

最初のステートメントは、mysorterのコードを1から4までの数字に変換します.Yは1、Bは2、Gは3、Lは4です。この数字は、配列の最初の次元のインデックスとして使用されます。配列YBGLは次のような次元でなければなりません。Dim YBGL(4,99) ' – h2so4

+0

H2so4:あなたの提案がうまくいきました。ちょっとしたジグザグがうまくいきました。とても助けてくれてありがとうと思います。 – Fabby

関連する問題