質問: 0 End If wb.Worksheets(i).Range("B" & i ).Value<>wb.Worksheets(i).Range("B" & i-1).Value のように直接比較するコードは書けたのですが、同様の処理を1行内で数個所行い、 更にi=rCountとなるまで繰り返す必要があるので、1シートの処理に数分かかる有様でとても使い物になりません。 皆様の知恵をお借りしたく投稿いたしました。知恵をお貸しください。
回答: 以下2点修正してみてください。 1. ~~`Dim arr() As Variant` を `Dim arr As Variant` にする~~ → hatena19さんのご指摘より、修正の必要がないことがわかりました。誤情報を書いてしまい申し訳ありません。 rangeの範囲の中身を配列に代入するときに、変数宣言で()を付ける必要はなかったかと思います。 2. `Range("A3:H" & rCount)` を `.Range("A3:H" & rCount)` にする `.`をつけないとWithステートメントの意味がありません。 `Range("A3:H" & rCount)`はアクティブシートの`Range`を指しているため、アクティブなシートの情報しか得られないのです。`.`をつけることで、`With`の後に指定したもの(今回なら`wb.Worksheets(i)`を省略しますよ、という意味になります。