2017-12-26 11 views
0

**** UPDATEを処理しません。以下に示すコードは、1行を除いて意図したとおりに動作します。VBAエクセルループがこの*****誰もこの結論に私を導くためにあなたの助けをありがとう解決されている!私の中******</p> <p>だから、すべてのアレイ

If c = myArray(x) Then

このスクリプトでは、私がunmentioned残っているファイルを読み込み。ファイルから 'A'列を読み取り、各行をmyArrayにスローします。私はダイアログボックスにループアウトすると、データを適切に出力するので、配列が機能することが分かります。ループは適切に各行を検索し、 'c'に等しい場合はデータを取得して別のシートに配置します。私はこれがうまくいくことを知っている私の問題は、myArray(x)という要素を整数 'c'と比較するために追加しようとするときです。それは整数 'x'でmyArray()を適切にループするためにx整数を見ることを拒否します。

誰かが私に説明してください。myArray(x)が適切にループしないか、解決策を手伝ってくれるのですか?私はベテランのVBAプログラマーではありませんが、私は正当に機能するコードを書いています。私はちょっとした細部が見当たらず、簡単なことを見落としたような気がします。助けを借りれば、これは仕事目的のためのものであり、自分自身だけでなく、他人を助けてくれることに感謝します。

Sub myArray() 
    Dim FSO As Object, MyFile As Object 
    Dim FileName As String, Arr As Variant 
    Dim c As Range 
    Dim j As Integer, i as Integer 
    Dim Source As Worksheet, Target As Worksheet 

    FileName = "" '<--This is left intentionally blank. 
    Set FSO = CreateObject("Scripting.FileSystemObject") 
    Set MyFile = FSO.OpenTextFile(FileName, 1) 
    Arr = Split(MyFile.ReadAll, vbNewLine) 
    Set Source = ActiveWorkbook.Sheets("Sheet1") 
    Set Target = ActiveWorkbook.Sheets("Sheet2") 

    i = 0 
    j = 1 

    For i = LBound(Arr) To UBound(Arr) 
    For Each c In Source.Range("B:D") 
     If c = Arr(i) Then 
      Source.rows(c.Row).Copy Target.rows(j) 
      j = j + 1 
     End If 
    Next c 
Next i 

End Sub 
+0

何が*** xの値は***です?? –

+0

配列の上限を超えていないかどうかを評価するには 'if c = myArray(x)Then Then'行をチェックしてください。 'c = myArray(x)とx <= ubound(myArray)Then'のようなものです。 –

+0

X = 0である必要があります。 これは私のForループでは機能しませんでしたが、それでも値は比較されません。 –

答えて

0

に開始することを見てきましたループはB1:D6719ループとは独立しているため、xが上限を超えて増加した後の配列です。

それが何かのようにコードを修正した場合、次のようになります。エラーが発生したとき

For Each c In Source.Range("B1:D6719") 
    If c = CInt(myArray(x)) Then '<--Here is where my problem is, this line right here 
     Source.rows(c.Row).Copy Target.rows(j) 
     j = j + 1 
     x = x + 1 
    End If 

    If x > UBound(myArray) Then Exit For 
Next c 
+0

これは私のためには機能しませんでしたが、上記のshrivallabhaとして両方の方法を試しました。ループは、配列の整数 'x'を認識しません。xを出力すると、0に等しいはずです。 –

+0

整数を比較する場合は、配列が文字列配列であるため、 'CInt'を使う必要があります。私の更新されたコードを見てください。 –

+0

これはデータ型の不一致を示しているので、CLngとCStrを試してみました。探している数字が大きいほど、データ型は長くなるはずです。これは、私が望むように、それでも正常に機能しません。それは間違いを吐くことはありません。プログラムが実行され、それでも私の配列(x)を見ることを拒否し、列B:Dで必要なデータを含む行を取得してシート2に移動します。手動で数値を入力すると、正常に実行されます。私の配列に何が間違っていますか? –

-2

1で始まる配列を呼び出してみてください。

他人 examples of array in vba
x = 1 
    if c = myArray(x) then 

私は、彼らはあなたがチェックし続ける可能性が高いているように見えます1ではなく0

+0

申し訳ありませんが、私は出発点として1を使用しようとしましたが、これは事実ではありません。私の配列の機能はうまくいけば、配列を適切にスプールしないForループがあります。 –

関連する問題

 関連する問題