2017-09-19 15 views
0

特定の条件が満たされている場合、データリストの特定の値を別のワークシートにマップしようとしています。私は過去に配列を使ってこれを行ってきましたが、今はランタイムエラーが発生しており、デバッグできません。マッピングは、この(条件が満たされていると仮定して)ように動作:A、B、列A、B、AKにC、ALのDおよびE.ループと配列を使用してあるワークシートの特定の値を別のワークシートにマッピングする

にAM
Sub newcontracts() 
    Dim source As Variant 
    Dim destination As Variant 
    Dim j As Integer 
    Dim x As Integer 
    Dim LastRow As Long 

    source = Array("A", "B", "AK", "AL", "AM") 
    desitnation = Array("a", "b", "c", "d", "e") 

    LastRow = ThisWorkbook.Sheets(2).Cells(Rows.Count, 1).End(xlUp).Row 
    LastRow3 = ThisWorkbook.Sheets("New Contracts").Cells(Rows.Count, 1).End(xlUp).Row 

    Worksheets("New Contracts").Range("A2:i10").ClearContents 

    With Worksheets(2) 
     For x = 11312 To LastRow 
      If (IsEmpty(Cells(x, 39)) = False Or Cells(x, 39) <> 0) And Cells(x, 40) = "no" Then 
       For j = 0 To 4 
        .Range(source(j) & x).Copy Sheets("New Contracts").Range(destination(j) & Rows.Count).End(xlUp)(1) 
       Next j 
      End If 
     Next x 
    End With 
End Sub 

ありがとう百万!

+1

のために再び...すぐにみんなに感謝をラルフスバージョンを尽くす「*私はランタイムエラーを取得していますし、私はデバッグすることはできません。*」( 1)何のエラー? (2)どこで(どのコード行)? (3) 'ThisWorkbook.Sheets(2).Cells(Rows.Count、1).End(xlUp).Row'では' ThisWorkbook.Sheets(2) 'のように 'Rows.Count'のシートも指定する必要があります。 .Cells(ThisWorkbook.Sheets(2).Rows.Count、1).End(xlUp).Row'これは、この行または同じ問題が発生した次の行で失敗したActiveSheetを想定しています。 **すべての** 'Rows'は特定のシートを指定する必要があります(あなたのコードにはいくつかあります)。 –

+2

(4)[**常に** Integerの代わりに 'Long'を使用する](https://stackoverflow.com/a/26409520/3219613)ExcelにはIntegerよりも多くの行があります! –

+0

また、 'Sheets(2)'は 'Worksheets(2)'と同じシートでも、 'Sheets2'と同じでもないかもしれません。 'Sheets'コレクションには、ワークブックだけでなくチャートも含まれています。だから、どちらを使うべきかを確かめてください。たいていの場合、人々は実際には 'Sheets'を書くと' Worksheets'を使うつもりです。あなたはその違いを知っていることを確認してください!混在して使用すると、例えば、あなたが使用する場合に問題に遭遇します。チャート。 –

答えて

0

これは動作していると思われるコードの新しい繰り返しです。 @Peh、私はすべてのシートを指定する必要があるか分からない。私は以前にどのシートを宣言していたのでしょうか?とにかく...ここにコードがある...私はあなたの入力

Sub newcontracts() 

Dim source As Variant 
Dim destination As Variant 
Dim j As Integer 
Dim x As Integer 
Dim LastRow As Long 
Dim LastRow3 As Long 

source = Array("A", "B", "AK", "AL", "AM") 
destination = Array("a", "b", "c", "d", "e") 


LastRow3 = ThisWorkbook.Sheets("New Contracts").Cells(Rows.Count, 1).End(xlUp).Row 

Worksheets("New Contracts").Range("A2:i10").ClearContents 

With Worksheets(2) 

LastRow = .Cells(Rows.Count, 1).End(xlUp).Row 

For x = 25 To LastRow 

If .Rows(x).EntireRow.Hidden = False Then 

If (IsEmpty(.Cells(x, 39)) = False Or .Cells(x, 39) <> 0) And .Cells(x, 40) = "no" Then 
    For j = 0 To 4 
.Range(source(j) & x).Copy Sheets("New Contracts").Range(destination(j) & Rows.Count).End(xlUp)(2) 
Next j 
End If 
End If 
Next x 




End With 

End Sub 
関連する問題