2016-06-16 11 views
0

シート間で前後に切り替え、入力を1枚のシートに入れて別のシートに貼り付けるコードを記述しようとしています。これがコードです。私は.Activateの部分を取得するとき。VBAでのシート間のアクティブ化とトグル

For r = 1 To ActiveCell.End(xlDown).Row 
    Cells(1, c).Select 
     Do Until IsEmpty(Selection) 

      name = ActiveCell.End(xlToLeft).Value 
      email = ActiveCell.End(xlToLeft).Offset(0, 1).Value 
      phoneNumber = ActiveCell.End(xlToLeft).Offset(0, 2).Value 
      generation = ActiveCell.End(xlToLeft).Offset(0, 3).Value 
      status = ActiveCell.End(xlToLeft).Offset(0, 13).Value 
      ActiveCell.Offset(1, 0).Select 
     Sheets("Compiled Data").Select 

'paste data 

     Cells(oRow, c) = name 
     Cells(oRow, c + 1) = email 
     Cells(oRow, c + 2) = phoneNumber 
     Cells(oRow, c + 3) = generation 
     Cells(oRow, c + 4) = status 

     oRow = oRow + 1 
     r = r + 1 
     Sheets("Sheet 1").Activate 
     Loop 

Next 

問題があり、Excelが添字が範囲外であることを読み取ります。

どうすればよいですか?

+5

(http://stackoverflow.com/questions/10714251/how-to-avoid-using-select-in-excel-vba-macros)[できるだけ早くこれを読む] – BruceWayne

+0

あなたは、元のExcelシートを使用と仮定は、名前はSheets( "Sheet1")でなければなりません。Not Sheet( "Sheet 1")をアクティブにします。 –

答えて

1

forを使用してループしており、forrを増やしているようです。それが使用されるまで私はまたcを見ない。

さらに、BruceWayneがすでに指摘しているようにActive/Selectを使用する代わりに、シートと範囲を明示的に定義します。 ws2ThisWorkbook.Sheets("Compiled Data")のための同じ

Dim ws1 As Worksheet 
Set ws1 = ThisWorkbook.Sheets("Sheet 1") 

最後に、変数を設定する代わりに、データを真っ直ぐに入れないでください。

Dim leftCol as Integer 
leftCol = ws1.Cells.Find("*", SearchOrder:=xlByColumns, searchdirection:=xlNext).Column 
ws2.Cells(oRow, c).value = ws1.Cells(r, leftCol).value 
関連する問題