@ BruceWayneが既に述べたことに加えて、「時々」だけで起こる典型的な現象がある場合は、Active
またはCurrent
またはSelection
などのキーワードを使用することがよくあります。これらは特定ではありませんが、マクロを呼び出すたびに変更されます。あなたが選んだものは何でも出発点です。マクロが実行されている間に、クリックして起動してSelection
を変更することさえできます。要するに、明示的にコーディングを開始し、VBA/Excelがあなたのために決定を下すことを許可しないでください。
Range("J14").Select
から始めましょう。このコード行は、VBAに既に2つの前提を設定するように求めています。
- 複数のExcelファイルが開いている場合。どのExcelファイルから始める必要がありますか?
- ファイル内には複数のシートがある可能性があります。これらのシートのどれに
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
は 'SELECT'を使用しないでください。 – findwindow
(これを参照してください(このスレッド:http://stackoverflow.com/questions/10714251/how-to-avoid-using-select-in-excel-vba-macros) – BruceWayne
このコードには多くの問題があります。正確に何を達成したいですか?列全体を6個分下に移動しますか? – trincot