
ご助言いただければ幸いです。
現在、Excel2013にて、以下の処理を行おうとしております。
<前提>
A1セルに「ABC123DEF」が記載
※123のみ、文字色が青
<処理内容>
セル内にある文字列の、文字の色が黒以外である場合、
その文字のみを赤に変更する。
<サンプルコード>
Sub Test()
For i = 1 To Len(Range("A1"))
If Range("A1").Characters(i, 1).Font.ColorIndex <> 0 Then
Range("A1").Characters(i, 1).Font.ColorIndex = 3
End If
Next i
End Sub
<相談内容>
いくつかのサイトを参照した結果、Charactersで1文字ずつチェックする方法が主流のようですが、
この方法だと、セルの文字列が長文であった場合、かなりの処理時間がかかってしまいます。
可能でれば、フォントカラーが変更されている範囲、
「ABC」「123」「DEF」をRangeなどで取得し、
その後に一括で着色処理をしたいのですが、書式変更箇所の範囲取得は可能でしょうか。
ご助言いただければ幸いです。
No.1ベストアンサー
- 回答日時:
こんにちは
文字を色などの情報を保持したままオブジェクトとして取得するにはCharacters(start, length) しか方法がないと思いますので、色を順に調べたいのですから、1文字ずつテストするしかないと思います。
若干でも処理を速くできそうな可能性があるのは、ご提示の方法のように変更対象を発見したら即座に1文字ずつ色を変更するのではなく、連続している限りは走査を続け、連続が終わったところでその文字数分だけまとめて色を変更するような仕組みにすることでしょうか?
(対象の文字列にもよりますが、色を変更する処理回数が減るので、速くなる可能性はあります)
対象の文字列の状態によっても時間は変わるので一概には言えませんが、100文字のアルファベットで5か所ほどに異なる色の文字があり、全体で約40%程度の文字の色を変えるというサンプルでテストしてみました。
1行だけでは処理時間の差がわからないので、同じサンプルを100行(=100回)処理した結果の比較をしてみました。
ご提示の方法で約5秒のところが、約3秒になりましたので多少は速くなる可能性があるものと思います。
方法としては上述の通りなので繰り返しになりますが、文字の走査は1文字ずつ順に行い、変更対象があったところから連続して変更するべき文字数を数えます。
連続が終わったところで、その文字数分をまとめて
.Characters(start, length).Font.ColorIndex = 3
で変更するといった要領です。
加えて(どれだけ効果に寄与したかは不明ですが)、複数回同じオブジェクトを参照するのなら、一旦変数に置き換えて参照するようにするか、あるいはwith構文を利用するなどといったことでも短縮を図ってみました。
結果的には
>可能でれば、フォントカラーが変更されている範囲、
>「ABC」「123」「DEF」をRangeなどで取得し
に近いのかもしれませんが、1文字ずつ調べているのは変わりませんし、変更箇所をまとめて.Characters(start, length)で指定しているだけとも言えます。
ご確認ありがとうございます。
実はまとめて着色はすでの実施しております。
どうしても一文字ずつチェック、がボトルネックになってしまうんですよね…。
時間計測までしていただき、ありがとうございました!
No.2
- 回答日時:
こんばんは。
マクロとしては作っていませんが、一旦、web フォーマット(.htm)で保存し、その中で、該当する
>123のみ、文字色が青
<font class="font76749">123</font>
>その文字のみを赤に変更する。
<font class="font66749">123</font>
と置き換えて上げればよいです。
それを保存し、もう一度、Excelで開いて、Excel用のフォーマットに保存し直せばよいです。
ただし、注意点は、Web フォーマットに保存する時に、セル幅が優先されますので、AutoFit で列幅を確保しておく必要があります。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 指定文字列が該当するA列をアクティブセルにするには 3 2022/08/17 13:18
- Visual Basic(VBA) 【追加】ファイルを閉じてダイアログで保存した時だけ処理の実行をする 3 2022/03/23 15:43
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- Visual Basic(VBA) エクセルVBA ダブルクリックしたら色反転を指定したセルのみにしたい 2 2022/04/06 12:52
- Excel(エクセル) Excel VBAどこが間違ってますか? 4 2023/07/17 10:04
- Excel(エクセル) VBAで組み合わせ算出やCOUNTIFSの処理を高速化したいです。 4 2022/04/07 02:38
- Excel(エクセル) B列に文字がはいったらA列に数字が入るマクロードを完成させたい 4 2023/04/21 01:58
- Visual Basic(VBA) データのある範囲を選択するVBAについて 2 2022/09/03 00:20
- Excel(エクセル) エクセルの数式で教えてください。 1 2023/02/15 08:30
- Visual Basic(VBA) 正規表現を用いての並び替え 7 2022/04/04 09:27
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
今、見られている記事はコレ!
-
弁護士が解説!あなたの声を行政に届ける「パブリックコメント」制度のすべて
社会に対する意見や不満、疑問。それを発信する場所は、SNSやブログ、そしてニュースサイトのコメント欄など多岐にわたる。教えて!gooでも「ヤフコメ民について」というタイトルのトピックがあり、この投稿の通り、...
-
弁護士が語る「合法と違法を分けるオンラインカジノのシンプルな線引き」
「お金を賭けたら違法です」ーーこう答えたのは富士見坂法律事務所の井上義之弁護士。オンラインカジノが違法となるかどうかの基準は、このように非常にシンプルである。しかし2025年にはいって、違法賭博事件が相次...
-
釣りと密漁の違いは?知らなかったでは済まされない?事前にできることは?
知らなかったでは済まされないのが法律の世界であるが、全てを知ってから何かをするには少々手間がかかるし、最悪始めることすらできずに終わってしまうこともあり得る。教えてgooでも「釣りと密漁の境目はどこです...
-
カスハラとクレームの違いは?カスハラの法的責任は?企業がとるべき対応は?
東京都が、客からの迷惑行為などを称した「カスタマーハラスメント」、いわゆる「カスハラ」の防止を目的とした条例を、全国で初めて成立させた。条例に罰則はなく、2025年4月1日から施行される。 この動きは自治体...
-
なぜ批判コメントをするの?その心理と向き合い方をカウンセラーにきいた!
今や生活に必要不可欠となったインターネット。手軽に情報を得られるだけでなく、ネットを介したコミュニケーションも一般的となった。それと同時に顕在化しているのが、他者に対する辛らつな意見だ。ネットニュース...
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
CString型 全角半角を意識せず...
-
一番右のスペース以降の文字列...
-
StrConvでUnicodeに変換出来な...
-
HEX
-
ファイル名の一部削除について
-
VB6のテキストボックスに入力し...
-
全角文字と半角文字を判別して...
-
TextFieldParserの固定長桁数を...
-
EXCELのVBAでLenB関数について
-
文字列から、null値を除去する方法
-
C言語とWin32APIで全角かなの...
-
Access VBAの参照設定(DAO)につ...
-
Err.Number
-
VBからID3タグをいじる方法
-
VBScriptで半角カナと半角英数...
-
SQLで複数のテーブルと結合した...
-
TextBox内の改行
-
ADOレコードセットのプロパティ...
-
Accessでテーブルのデータのみ...
-
Dir関数で読み取り順を操作でき...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
EXCELのVBAでLenB関数について
-
StrConvでUnicodeに変換出来な...
-
CString型 全角半角を意識せず...
-
TextFieldParserの固定長桁数を...
-
ファイル名の一部削除について
-
一番右のスペース以降の文字列...
-
アクセス ステータスバーの文...
-
機種依存文字と特殊文字について
-
文字列から、null値を除去する方法
-
「シフトJIS X 0213」形式の文...
-
VB6のテキストボックスに入力し...
-
ワードのVBAで
-
【Excel VBA】セル内テキストの...
-
エンコード・デコードの仕方
-
マルチバイト混在の文字列整形
-
VBからID3タグをいじる方法
-
VB6.0 文字列のファイル書...
-
Access VBAの参照設定(DAO)につ...
-
VBScriptで半角カナと半角英数...
-
ASC関数
おすすめ情報