2017-01-16 6 views
0

ExcelとVBAプログラミングには新しく、出席シートを作成し、ボタンを押してシートを1枚ずつ(月別に)コピーしたいと考えています。ランタイムエラー '9'、下付き文字範囲外エラー

私は次の行でエラーを取得しています

lastrow1 = Sheets(“Sheet14”).Range(“A” & Rows.Count).End(xlUp).Row

私のコード

Sub Button2_Click() 

    Dim i As Long, j As Long, lastrow1 As Long, lastrow2 As Long 
    Dim myname As String 
    lastrow1 = Sheets(“Sheet14”).Range(“A” & Rows.Count).End(xlUp).Row 

    For i = 7 To lastrow1 
     myname = Sheets(“Sheet14”).Cells(i, “A”).Value 

     Sheets(“sheet2”).Activate 
     lastrow2 = Sheets(“sheet2”).Range(“A” & Rows.Count).End(xlUp).Row 

     For j = 7 To lastrow2 

      If Sheets(“sheet2”).Cells(j, “A”).Value = myname Then 
       Sheets(“Sheet14”).Activate 
       Sheets(“Sheet14”).Range(Cells(i, “D”), Cells(i, “AH”)).Copy 
       Sheets(“sheet2”).Activate 
       Sheets(“sheet2”).Range(Cells(j, “D”), Cells(j, “AH”)).Select 
       ActiveSheet.Paste 
      End If 

     Next j 
     Application.CutCopyMode = False 
    Next i 
    Sheets(“Sheet14”).Activate 
    Sheets(“Sheet14”).Range(“D7”).Select 
End Sub 
+0

@ YowE3Kあなたは正しいです、後で感謝しました:) –

+0

lastrow2 = Sheets( "sheet2")。範囲( "A"&Sheets( "sheet2")。Rows.Count).End(xlUp)。行 – Kanan

答えて

0

あなたのコードではなく"の、の間違った種類を持っていました。

Activate,SelectおよびActiveSheetから離れて、代わりに参照されているワークシートと範囲を使用してください(速度も速くなります)。

以下のコードを試してみて、それだけで少し速く(そしてより信頼性の高いActiveSheetに依存しない、同じことをするでしょう

修正コード

Sub Button2_Click() 

Dim i As Long, j As Long, lastrow1 As Long, lastrow2 As Long 
Dim myname As String 

With Sheets("Sheet14") 
    lastrow1 = .Range("A" & .Rows.Count).End(xlUp).Row 

    ' take the line below outside the For loop, there is no need to get the last row evey time 
    lastrow2 = Sheets("sheet2").Range("A" & Sheets("sheet2").Rows.Count).End(xlUp).Row   
    For i = 7 To lastrow1 
     myname = .Range("A" & i).Value 

     For j = 7 To lastrow2 
      If Sheets("sheet2").Range("A" & j).Value = myname Then 
       .Range("D" & i & ":AH" & i).Copy Destination:=Sheets("sheet2").Range(Range("D" & j & ":AH" & j)) 
      End If 
     Next j 
     Application.CutCopyMode = False 
    Next i 
End With 

End Sub 

:もしsheet2とsheet14のデータは一意であり(シート全体に一度しか表示されません)、Match関数を使用することを検討すると、1 Forループを保存します。

+0

@Kananどのラインでエラーが表示されますか? –

+0

@カノン私は今、それをテストして、それは私のために働く、あなたはあなたのブックに "sheet2"を持っていると確信していますか?このように綴られていますか? –

+0

@カナン私のコード全体を上からコピーしましたか?それのすべて ?アルと; –

関連する問題