- 締切済み
Excelセル内文字列のフォント属性
Excel 2016 VBAでセル内文字列の1文字ずつの属性を取り出していきたいのですが、文字数が多いと(1000文字とか)下記コードで数分の時間が掛かってしまいます。高速化の手段はありませんか? For i=1 to nChar Set ChrFont = objExcelCell.Characters(i, 1).Font ' この行の実行が遅い ' ちょっとした処理がここに来る Next i
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- kkkkkm
- ベストアンサー率66% (1742/2617)
> 属性が同じであるかどうかをチェックする セルのFont.Colorなどを取得してNullが返ってくれば違いがあるという事は一瞬でわかりますが、どこで違うのかまでとなると全て見ないと駄目な感じですね。
- heisukewada
- ベストアンサー率57% (94/163)
openpyxl を、使ってPythonで処理してみたらどうなんでしょう?
お礼
- kkkkkm
- ベストアンサー率66% (1742/2617)
> それを数秒で終わるような高速化は可能なのかどうか FontなのでRangeを毎回参照しないと駄目だと思いますから多分無いような気がします。 Fontを全ての文字で参照しないと駄目なんですよね
補足
はい、全ての文字の属性が同じであれば、その後処理を高速にできるのですが、属性が同じであるかどうかをチェックするためには、結局すべての文字を参照しなくてはならず、処理全体としては高速化できないという残念な結果になっています。
- kkkkkm
- ベストアンサー率66% (1742/2617)
objExcelCellが Set objExcel = CreateObject("Excel.Application") Set objWorkbook = objExcel.Workbooks.Open(FilePath) みたいな感じで開いたブックのセルかと思って試してみましたが2000文字でも1分以内(かなり古いPCです)で終わりました。
補足
ご確認ありがとうございました。実行が遅いという抽象的な表現で申し訳ありませんでした。こちらでも2000文字で1分以内というレベルなのですが、1分というのは待ってるユーザにとっては長い時間であり、それを数秒で終わるような高速化は可能なのかどうか、というのが伺いたかったところです。説明不足で申し訳ありませんでした。何か高速化のアイディアがおありでしたらご教示ください。
- kkkkkm
- ベストアンサー率66% (1742/2617)
objExcelCellが何なのかが分かりませんが 直接セル指定してみたら Set ChrFont = Range("A1").Characters(i, 1).Font ' この行の実行が遅い 時間はかかりませんでした。
補足
上の方と同じ回答になってしまいますが、ご確認ありがとうございました。実行が遅いという抽象的な表現で申し訳ありませんでした。こちらでも2000文字で1分以内というレベルなのですが、1分というのは待ってるユーザにとっては長い時間であり、それを数秒で終わるような高速化は可能なのかどうか、というのが伺いたかったところです。説明不足で申し訳ありませんでした。何か高速化のアイディアがおありでしたらご教示ください。
お礼