- 締切済み
Excel VBA内の記述での検索
Windows7とWindows8環境でExcel2010を使っています。 現在表の最終行を求めるために Cells(Rows.Count, 1).End(xlUp).Row というコードを書いていますが、過去のファイルには Range("A65536").End(xlUp).Row などで最終行を求めているファイルがたくさんあります。 私が作成したファイルばかりではないため、久しぶりにファイルを開いて初めて気づき、その都度修正はしていますが、時間に追われている仕事の場合は修正作業にかかる時間もバカになりません。 ですので、暇をみて一度に修正してしまおうとおもうのですが、どのファイルが昔の記述をしているのか見つけることができません。 Windows標準のテキスト検索では見つけることができないので、なにかフォルダ内のExcelファイルのVBAの記述を全文検索できるような方法やツールはありませんか?
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- WindFaller
- ベストアンサー率57% (465/803)
水をさして悪いのですが、 >過去のファイルには >Range("A65536").End(xlUp).Row ということで、ファイル自体のフォーマットをxlsから、xlsm に変換するか、変換していくという意味でしょうか?そうでなかったら、Cells(Rows.Count, 1).End(xlUp).Row は、無意味です。 古いファイル、つまり、xlsファイルの行の最終行は65536行しかありません。 仮に、xlsmだったとしても、65536行まで、本当に使うかということがあるはずです。 ご存じだとは思いますが、 >Cells(Rows.Count, 1).End(xlUp).Row もともと、これは、旧フォーマットと現在のフォーマットを互換性を持たせるためのコードですが、Range("A65536").End(xlUp).Row でも、間違いということはありません。 もちろん、Range("A65536")...式は、新しいフォーマットで駆逐されていくものかもしれませんが、今後の新しいものだけに限ったらどうでしょうか?私自身、古いファイルを、一旦xlsmにフォーマットを直したけれども、他の部分で不具合が生じたので、元の互換モードの xls に戻してしまいました。どうやら、現在のフォーマットは、本来、ZIPで圧縮されているので、その展開時に、Openイベントと多少のタイミングのズレが生じて、約10回に1回の割で開けないことがあることが分かりました。他にも、Win32API関数が、エラーを発生しハングしました。ですから、全面的にコードを直さない限りは、安定した使用は無理だと思っていますので、ハングする所は使わないようにし、後はそのままにしました。 勘違いしていたら、すみません。
- MarcoRossiItaly
- ベストアンサー率40% (454/1128)
No.1 です。すみません、ミスしました。他のブックを開くなら、ThisWorkbook に書くようにしないといけませんでした。 Sub VBEtoWorksheet() Dim m As Object, n As Integer, i As Long 'ブックがたくさんあるなら、一つひとつ開いて閉じるコードを追記 For Each m In ActiveWorkbook.VBProject.VBComponents n = Cells(1, Columns.Count).End(xlToLeft).Column + 1 ThisWorkbook.Worksheets(1).Cells(1, n).Value = ActiveWorkbook.Name With m.codemodule For i = 1 To .countoflines ThisWorkbook.Worksheets(1).Cells(i + 1, n).Value = .Lines(i, 1) Next i End With Next m End Sub
お礼
申し訳ありません。質問をし直すことにします。
- MarcoRossiItaly
- ベストアンサー率40% (454/1128)
例えば、次のコードを実行し、ブックにあるコードをシートに書き出してみるとか。後はシート上で検索でも何でもしていただけば。 Sub VBEtoWorksheet() Dim m As Object, n As Integer, i As Long 'ブックがたくさんあるなら、一つひとつ開いて閉じるコードを追記 For Each m In ActiveWorkbook.VBProject.VBComponents n = Cells(1, Columns.Count).End(xlToLeft).Column + 1 Cells(1, n).Value = ActiveWorkbook.Name With m.codemodule For i = 1 To .countoflines Cells(i + 1, n).Value = .Lines(i, 1) Next i End With Next m End Sub
お礼
申し訳ありません。質問をし直すことにします。
お礼
申し訳ありません。質問をし直すことにします。