私はこれをできる限り短くし、それでも十分に説明しようとします:)
フォーラムや VBA 文献を検索しましたが、私が試みていることを実行する方法が見つかりません。
rowTotal >= 60 行のスプレッドシートがあります。行には、各列のセルにテキスト データが含まれているか、パターンと colorindex が設定された空白の行があります。
空白でない行をすべて選択するマクロが必要です。
最初に列 A のセルをループして (列 A のセルにテキスト データがある場合は、その行を選択する必要があります)、activecell.value
<> が空かどうかを確認しました。
これがジストです(疑似コードとコードの組み合わせ):
Range("A1").Select
loop to end
if activeCell.value <> empty then
stringVar = stringVar + cstr(activeCell.row) + ":" + cstr(activeCell.row) + ","
end if
end loop
stringVar = Left(stringVar, (Len(stringVar) - 1))
Range(stringVar).Select
行 2 と行 8 にデータがある合計 10 行がある場合、次の
stringVar
ように解決されます"2:2, 8:8"
。
Range(stringVar).Select
を書くのと同じ結果になりますRange("2:2, 8:8").Select
。範囲内の行数が <= 45 の場合、これは問題ありません。ただし、データを含む行の数が 45 を超えるとすぐに、コードは失敗し
Range(stringVar).Select
ます。
マクロレコーダーを試してみましたが、Union
メソッドを使用してこれを回避します。そして、「自分自身、Union() でこれを行うことができます。やったー MacroRecorder」と思いました。しかし、悲しいかな、私の喜びは手抜きでした。
1 つの大きな文字列を 1 つ以上の文字列に分割できると考えていました。これらの小さい文字列はそれぞれ、上記の 45 の制限を下回ります。次に、Union() を使用して、すべての範囲 (これらの小さな文字列) を 1 つの目的の範囲にグループ化できます。
ただし、これらの45> 文字列がいくつあるかがわかった後、コードの実行中に Union() コードをリアルタイムで「ビルド」する必要がありました。
ワークシートを取得して、データを含む行だけを選択する方法は誰でも知っています。これは、45 行を超える数の行が選択されている連続していない行の範囲を持つことになります。