2016-07-14 10 views
0

私は行がシート1を頼りにチェックして、シート1上のすべての行を確認するために、シート2上の数にそれを比較していますが、私はにシート1を選択し、用紙に2アクティブシートの切り替えとカウント行

まずありアクティブなシートがデータを含む行を含んでいますが、シート1とシート2のデータが含まれている行が等しくない場合は、アクティブシートをシート2に切り替えます。

ThisWorkbook.Worksheets("Sheet1").Select 
num = Application.WorsheetFunction.CountA(Range("A:A")) 

ThisWorkbook.Worksheets("Sheet2").Select 
num2 = Application.WorsheetFunction.CountA(Range("A:A")) 

問題は、私はNUM2の値を取得するたびに、それは常にNUMに等しいということであると私は、これは真実ではありません知っています。 countA(A1:A100)を手動でチェックすると、num!= num2という値が得られます。私の推測では、新しいアクティブシートに切り替えるにしても、num2の計算はシート1に基づいてまだ決定されています。それは本当ですか?私のコードにいくつか目立つ問題がありますか?前もって感謝します。

+0

何行ありますか? 'num'と' num2'は何と宣言されていますか?さて、私はそれがリソースの不必要な排水であるので、 'セレクト'を全くしないでください。 Range( "A:A")) ' – Soulfire

+0

" Worksheet "に入力ミスがあります –

+0

データを表示できますか?セット(またはサンプル)?私は問題を再現できません。また、各シートに行が連続していますか?もしそうなら、別の方法があります。 –

答えて

1

ここでSelectを使用する必要はありません。また、可能な限り避けてください。

これで必要なのは、範囲をそのシートで修飾することだけです。

num = Application.WorksheetFunction.CountA(Worksheets("Sheet1").Range("A:A")) 

num2 = Application.WorksheetFunction.CountA(Worksheets("Sheet2").Range("A:A")) 
+0

私のマシンでselectを使ってコードを実行するので、これは完全に答えであるとは思えませんが、 'Select'や' Activate'を避けてオブジェクトを直接参照するのは非常に良い提案です。 – Soulfire

+1

2行目は 'num2 = Application.WorksheetFunction.CountA(ワークシート(" Sheet2 ")。Range(" A:A "))'を編集することはできません。 – Raugmor

+0

@Raugmor:edited。 +1 – cyboashu

関連する問題