2017-03-13 11 views
0

2枚のExcelシートがあり、いくつかの値を比較する必要があります。これは簡単な部分です。このために私は次のコードを使用:その後VBAの2つの配列を比較して別のシートに書き込む

Dim OldLabel() As String, size As Integer, i As Integer, j As Integer 

size = WorksheetFunction.CountA(Worksheets(3).Columns(1)) 

ReDim OldLabel(size) 

j = 1 

For i = 7 To size 

    If (InStr(Cells(i, 1).Value, "[") > 0) Then 
     OldLabel(j) = Cells(i, 1).Value 
     j = j + 1 
    End If 

Next i 

Dim NewLabel() As String, newSize As Integer, k As Integer, l As Integer 

newSize = WorksheetFunction.CountA(Worksheets(4).Columns(1)) 

ReDim NewLabel(newSize) 

l = 1 

For k = 7 To newSize 
    If (InStr(Cells(k, 1).Value, "[") > 0) Then 
     NewLabel(l) = Cells(k, 1).Value 
     l = l + 1 
    End If 
Next k 

を私は2つの配列の値を比較し、それらが同じであるかどうかを確認し、別のシートにそれらを記述する必要があります。私はコードを実行しようとしましたが、動作していないようです。

Dim cont As Integer 
cont = 1 

For i = 1 To size 
    For k = 1 To newSize 

     If (OldLabel(i) = NewLabel(k)) Then 
      Sheet8.Activate 
      Range("A1").Select 
      Cells(cont, 1).Value = OldLabel(i) 
      cont = cont + 1 
     End If 

    Next k 

Next i 
+0

問題は何ですか?プログラムは予期せぬ反省を与える?あるいは、いくつかのエラー/バグがありますか? 私の最初の考えは、ループで、ハードコードされた数字の代わりに 'LBound'と' UBound'関数を使ってみてください。 –

+1

「うまく動作していないようです」とは特に役に立ちません。予想と実際の出力を掲示してください。 – jsheeran

+0

私はプログラムを実行した後、シートをチェックしてもデータはありません –

答えて

0

これは私が代わりに配列のデータ収集の使用を推奨例1である:

'Define data collections: 
    Dim OldLabel As New Collection: Set OldLabel = New Collection 
    Dim NewLabel As New Collection: Set NewLabel = New Collection 
'Define data limits: 
    Dim OldLimit As Integer 
    OldLimit = ThisWorkbook.Sheets("Sheet3").Columns(1).Find("*", SearchOrder:=xlByRows, LookIn:=xlValues, SearchDirection:=xlPrevious).Row 
    Dim NewLimit As Integer 
    NewLimit = ThisWorkbook.Sheets("Sheet4").Columns(1).Find("*", SearchOrder:=xlByRows, LookIn:=xlValues, SearchDirection:=xlPrevious).Row 
'Define extra variables: 
    Dim counter As Integer 
    counter = 1 
'Fill collections: 
    For x = 1 To OldLimit 
     If InStr(ThisWorkbook.Sheets("Sheet3").Cells(x, 1).text, "[") > 0 Then 
      OldLabel.Add ThisWorkbook.Sheets("Sheet3").Cells(x, 1).text 
     End If 
    Next x 
    For x = 1 To NewLimit 
     If InStr(ThisWorkbook.Sheets("Sheet4").Cells(x, 1).text, "[") > 0 Then 
      NewLabel.Add ThisWorkbook.Sheets("Sheet4").Cells(x, 1).text 
     End If 
    Next x 
'Writer: 
If OldLabel.Count > 0 And NewLabel.Count > 0 Then 
    For x = 1 To OldLabel.Count 
     For y = 1 To NewLabel.Count 
      If OldLabel(x) = NewLabel(y) Then 
       ThisWorkbook.Sheets("Sheet8").Cells(counter, 1).FormulaR1C1 = OldLabel(x) 
       counter = counter + 1 
      End If 
     Next y 
    Next x 
End If 

ご注意:A)あなたは、あなたの手続きのためのワークシートをアクティブにする必要はありません。 b)私はワークシートに名前をつけ、その名前を使ってその名前を参照しました。いくつかの理由から、私はシートインデックスを使用しないことをお勧めします。 c)細胞を「[」文字で比較しているだけであることを確認します。 d)データ列のいずれかが空の場合、コードはエラーを生成します。

+0

あなたのコードを使用しようとしましたが、結果は同じですが、依然として必要なシートにデータがありません、それはちょうど空です –

+0

あなたのデータ列?またはそれらの一部だけ?私は自分のマシンでテストしましたが、うまくいきました。 – Pspl

+0

各データ列のセルに同じテキスト( "["文字を含む)を置いてコードをテストしてください。 – Pspl

関連する問題