質問: ExcelのVBAで最後のセル・行・列を取得しようとしているのですが、 実際の最後(値や数式が入っている)のセルが非表示の列や行だった場合、 期待する最後を取得できないでいます。 取得しようとして試した方法は、以下の2つですが、 いずれも非表示している直前の行列までしか返さないようです。 ・Cells.SpecialCells(xlCellTypeLastCell) ・UsedRange 他に最後のセルを取得する方法があれば教えてください。 現在の目的は、ブック全体からすべての数式を取得することで、 全シートの最初のセルから最後のセルまでを見て、 =で始まるセルを数式があるとして処理しています。 最後のセルが非表示の行・列だった場合、 その行・列までを見る事ができなかったので気づきました。 今回の目的以外でも、全シートの最後のセルまで、と言う処理は行ないたいので、 これはこれで回答がいただきたいのと、 他に、ブック全体からすべての数式を取得する方法があれば、 それはそれで回答していただけると助かります。 ただ、非表示列を一旦表示してから取得し、その後非表示に戻す、と言う方法は、 そのブックを閉じる時に変更があったとみなされ、 保存の確認メッセージが表示されるので、したくありません。 確認メッセージを表示させない、と言う方法も、 万一、その有効/無効が完結されない場合があって、 閉じる際に保存したかったのにメッセージが表示されないために保存できなかった、 と言う事になりたくないので、したくありません。 無理なら無理と言う回答でも構いませんが、 何かヒントをいただけるとありがたいです。
回答: 例えば関数が入力されている全てのセルの個数を求めるのでしたら Cells.SpecialCells(xlCellTypeFormulas, 23).Cells.Count というVBAの関数で出来ますから、関数が入力されている全てのセルの個数を変数に格納して取得するのであれば、 変数名 = Cells.SpecialCells(xlCellTypeFormulas, 23).Cells.Count という構文になります。 又、関数が入力されている全てのセルに対して、それらのセルを1つずつ指定して何らかの処理を行うのであれば、 Dim c As Range MsgBox Cells.SpecialCells(xlCellTypeFormulas, 23).Cells.Count For Each c In Cells.SpecialCells(xlCellTypeFormulas, 23) (処理) Next c という構文の中のFor Each~Next c内において変数cに対して行いたい処理を行う様にされると良いと思います。 ですから、例えば「関数が入力されている全てのセルのアドレスを、Msgboxを使用して1つずつ表示させる」という場合には次の様なVBAになります。 Dim c As Range MsgBox Cells.SpecialCells(xlCellTypeFormulas, 23).Cells.Count For Each c In Cells.SpecialCells(xlCellTypeFormulas, 23) MsgBox c.Address Next c 又、「関数が入力されている全てのセルの関数を、Msgboxを使用して1つずつ表示させる」という場合には次の様なVBAになります。 Dim c As Range MsgBox Cells.SpecialCells(xlCellTypeFormulas, 23).Cells.Count For Each c In Cells.SpecialCells(xlCellTypeFormulas, 23) MsgBox c.Formula Next c