2016-06-20 7 views
0

私はループが突然、セルJ242で停止したマクロを実行しようとすると、それは時々今罰金働いていたが最初はこのVBAエクセルマクロコードのActiveCell <>レンジ

Sub fillcells() 
    Range("J14").Select 
    Do While ActiveCell <> Range("J902") 
     ActiveCell.Copy 
     ActiveCell.Offset(6, 0).Select 
     ActiveCell.PasteSpecial 
    Loop 
End Sub 

を有するがDOは、他の時間はありますエラー「ミスマッチタイプ」が発生し、マクロがループを実行せずにセルJ14を選択することがあります

+2

は 'SELECT'を使用しないでください。 – findwindow

+1

(これを参照してください(このスレッド:http://stackoverflow.com/questions/10714251/how-to-avoid-using-select-in-excel-vba-macros) – BruceWayne

+0

このコードには多くの問題があります。正確に何を達成したいですか?列全体を6個分下に移動しますか? – trincot

答えて

3

あなたのやりたいことはわかりませんが、(OPへのコメントに記載されているように)don't use .Select/.Activate。以下は、あなたが何を望むか(と思う)実行する必要があります。

Sub fillcells() 
Dim i& ' Create a LONG variable to count cells 

For i = 14 To 901 Step 6 
    Cells(i, 10).Offset(6, 0).FormulaR1C1 = Cells(i, 10).FormulaR1C1 
Loop 
End Sub 

これがループをセルJ14からJ901、コピー/ペースト*に6行がオフセットのセルに。


注:私は実際にコピー/ペーストしませんでした。元のコードではPasteSpecialを使用していたので、値を貼り付けることを前提としています。この場合、2つの範囲/セルを等しく設定できます。

+0

これはコードがシリーズを塗りつぶすのではなく、セルJ20 = G17 + H17 "、セルJ26" = G23 + H23 " –

+1

@ArturoEsparza - OPを編集しました。また、[How to Ask](http:// stackoverflow。あなたが何をしようとしているのかをあなたのOPでもう少し説明したことがありましたら、誰もが時間を節約してくれたからです。 – BruceWayne

2

@ BruceWayneが既に述べたことに加えて、「時々」だけで起こる典型的な現象がある場合は、ActiveまたはCurrentまたはSelectionなどのキーワードを使用することがよくあります。これらは特定ではありませんが、マクロを呼び出すたびに変更されます。あなたが選んだものは何でも出発点です。マクロが実行されている間に、クリックして起動してSelectionを変更することさえできます。要するに、明示的にコーディングを開始し、VBA/Excelがあなたのために決定を下すことを許可しないでください。

Range("J14").Selectから始めましょう。このコード行は、VBAに既に2つの前提を設定するように求めています。

  1. 複数のExcelファイルが開いている場合。どのExcelファイルから始める必要がありますか?
  2. ファイル内には複数のシートがある可能性があります。これらのシートのどれにJ14を選択する必要がありますか?

明示的なコーディングとは、あなたが何を参照しているかを非常に明確にすることを意味します。だから、代わりにちょうどあなたが使用する必要がありますRange("J14")を述べる:

ThisWorkbook.Worksheets("SheetNameYouWantToReferTo").Range("J14") 

をしかし、他の回答で指摘され、これは、この場合にも、必要ありません。むしろループ示すように、行と使用:

ThisWorkbook.Worksheets("SheetNameYouWantToReferTo").Cells(i, 10).Offset(6, 0).Formula = ThisWorkbook.Worksheets("SheetNameYouWantToReferTo").Cells(i, 10).Offset(i, 10).Formula 

これは少し長いですので、あなたがWithステートメントを使用して、それを短絡させることができます。

With ThisWorkbook.Worksheets("SheetNameYouWantToReferTo") 
    .Cells(i, 10).Offset(6, 0).Formula = .Cells(i, 10).Formula 
End With 
関連する問題