• 締切済み

Excelセル内文字列のフォント属性

Excel 2016 VBAでセル内文字列の1文字ずつの属性を取り出していきたいのですが、文字数が多いと(1000文字とか)下記コードで数分の時間が掛かってしまいます。高速化の手段はありませんか? For i=1 to nChar Set ChrFont = objExcelCell.Characters(i, 1).Font ' この行の実行が遅い ' ちょっとした処理がここに来る Next i

みんなの回答

  • kkkkkm
  • ベストアンサー率66% (1742/2617)
回答No.5

> 属性が同じであるかどうかをチェックする セルのFont.Colorなどを取得してNullが返ってくれば違いがあるという事は一瞬でわかりますが、どこで違うのかまでとなると全て見ないと駄目な感じですね。

maishin
質問者

お礼

やはりそうですよね。ご意見ありがとうございました。

Powered by GRATICA
回答No.4

openpyxl を、使ってPythonで処理してみたらどうなんでしょう?

maishin
質問者

お礼

なるほどぉ。openpyxlの経験はありませんが、トライしてみます。ありがとうございました。

Powered by GRATICA
  • kkkkkm
  • ベストアンサー率66% (1742/2617)
回答No.3

> それを数秒で終わるような高速化は可能なのかどうか FontなのでRangeを毎回参照しないと駄目だと思いますから多分無いような気がします。 Fontを全ての文字で参照しないと駄目なんですよね

maishin
質問者

補足

はい、全ての文字の属性が同じであれば、その後処理を高速にできるのですが、属性が同じであるかどうかをチェックするためには、結局すべての文字を参照しなくてはならず、処理全体としては高速化できないという残念な結果になっています。

  • kkkkkm
  • ベストアンサー率66% (1742/2617)
回答No.2

objExcelCellが Set objExcel = CreateObject("Excel.Application") Set objWorkbook = objExcel.Workbooks.Open(FilePath) みたいな感じで開いたブックのセルかと思って試してみましたが2000文字でも1分以内(かなり古いPCです)で終わりました。

maishin
質問者

補足

ご確認ありがとうございました。実行が遅いという抽象的な表現で申し訳ありませんでした。こちらでも2000文字で1分以内というレベルなのですが、1分というのは待ってるユーザにとっては長い時間であり、それを数秒で終わるような高速化は可能なのかどうか、というのが伺いたかったところです。説明不足で申し訳ありませんでした。何か高速化のアイディアがおありでしたらご教示ください。

  • kkkkkm
  • ベストアンサー率66% (1742/2617)
回答No.1

objExcelCellが何なのかが分かりませんが 直接セル指定してみたら Set ChrFont = Range("A1").Characters(i, 1).Font ' この行の実行が遅い 時間はかかりませんでした。

maishin
質問者

補足

上の方と同じ回答になってしまいますが、ご確認ありがとうございました。実行が遅いという抽象的な表現で申し訳ありませんでした。こちらでも2000文字で1分以内というレベルなのですが、1分というのは待ってるユーザにとっては長い時間であり、それを数秒で終わるような高速化は可能なのかどうか、というのが伺いたかったところです。説明不足で申し訳ありませんでした。何か高速化のアイディアがおありでしたらご教示ください。

関連するQ&A