Excel (VBA) |
![]() ![]() |
(Windows 10 Home : Excel 2016)
セルの背景色・赤文字、シェイプ内の塗り潰し・赤文字を変更したい
投稿日時: 21/04/08 23:30:19
投稿者: Ackies
|
---|---|
エクセルブックの色外しという業務に携わっています。
|
![]() |
投稿日時: 21/04/09 10:01:33
投稿者: simple
|
---|---|
本体は、以下のような形式にして、
For Each sht In Worksheets '読み込んだブックの、全てのシートに実施 Call interiorColorClear(sht) Call fontColorRedToBlack(sht) If sht.Tab.ColorIndex <> xlNone Then '処理を実施しているシートタブに色がある場合 sht.Tab.ColorIndex = xlNone 'その色をクリアー End If Call modifyShape(sht) Next shtで、お題の 1)セル内に赤文字以外の文字が混在していても、赤文字のみを黒にしたい。 2)シェイプ内に赤文字があれば黒に、赤文字以外の文字が混在していても、赤文字のみを黒にしたい。 3)シェイプが塗り潰されている場合、塗り潰しなしにしたい。ですが、1)はもう出来上がっているのでは? 2)3)は例えば、こんな風に書けるでしょう。 Function modifyShape(sht As Worksheet) Dim shp As Shape Dim characters As TextRange2 Dim k As Long For Each shp In sht.Shapes If shp.TextFrame2.HasText Then Set characters = shp.TextFrame2.TextRange.characters For k = 1 To characters.Count '文字色が赤なら黒に If characters.Item(k).Font.Fill.ForeColor.RGB = RGB(255, 0, 0) Then characters.Item(k).Font.Fill.ForeColor.RGB = RGB(0, 0, 0) End If Next End If shp.Fill.Visible = msoFalse '塗りつぶしを無しに Next End Function【補足】 注意すべきは、思わぬものがShapeオブジェクトになっていることです。 たとえば、Comment ですね。これもsht.Shapesの列挙の中に入ってきます。 これらを排除するために、shapeのTypeプロパティで判断する必要があります。 (別のものでは、違う判定条件が必要になるかもしれません。) これらは、あなたの置かれている状況によって、適宜、対応してください。 追記: 動作させていないので、詳細は見ていませんが、気になった箇所。 塗りつぶし色の判定で、5行目以内に該当色があると、作業をやめているが、 6行目以降にあっても、それは残すんですか?そういう意図なら構いませんが、気になりました。 その他、 ・シートを逐一Activateしているところも気になりました。(ファイル保存の前は意味があるとしても) ・.FindFormat.Clearが保存する前にもあえて必要なものなのか。 など。 |
![]() |
投稿日時: 21/04/10 08:24:35
投稿者: simple
|
---|---|
ああ、少し勘違いしていました。
|
![]() |
投稿日時: 21/04/11 00:53:39
投稿者: Ackies
|
---|---|
お返事が遅くなってしまい、申し訳ありません。
|