質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

3回答

9801閲覧

【EXCEL VBA】セルの文字列の一部文字色を変更したいが変わらない

KenG1300R

総合スコア6

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2016/12/21 07:11

編集2016/12/21 08:39

Excelで文字列比較を行い、一致した文字のみ色づけするマクロを作成していますが、下記のマクロを実行するとすべての文字が色づけされてしまいます。

C列:比較ベース文字
I列:比較対象文字1(C列と同じ文字を色づけしたい)
J列:比較対象文字2(C列と同じでI列とは異なる文字を色づけしたい)

ステップ実行して確認していますが、文字単位の比較は想定通り動いているようですが、CellsのFont.ColorIndexが優先されているような動作でCharacters().Font.ColorIndexの変更が効きません。

CellsおよびCharactersは使用方法に何か制限や、手順があるのでしょうか?

###発生している問題・エラーメッセージ
・ステップ実行でCells(ii, jj)とCells(ii, jj).Characters(kk, Length:=1)をウォッチ式に追加し、ウォッチ式からCells(ii, jj).Characters(kk, Length:=1).Font.ColorIndexを変更したところ下記の動作を確認しました。

kk=1の場合(Cells(ii, jj).Font.ColorIndex = -4105の状態で)
Cells(ii, jj).Characters(kk, Length:=1).Font.ColorIndexに3を入れる

Cells(ii, jj).Characters(kk, Length:=1).Font.ColorIndexに3が入る
Cells(ii, jj).Font.ColorIndexにも3が入る

kk>1の場合(Cells(ii, jj).Font.ColorIndex = -4105の状態で)
Cells(ii, jj).Characters(kk, Length:=1).Font.ColorIndexに3を入れる

Cells(ii, jj).Characters(kk, Length:=1).Font.ColorIndexが変わらない
(Cells(ii, jj).Font.ColorIndexの値に上書きされる?)
Cells(ii, jj).Font.ColorIndexも変わらない

###該当のソースコード

VBA

1Private Sub Worksheet_Calculate() 2 Dim ii 3 ii = 9 4 Do While Cells(ii, 1).Text <> "" 5 For jj = 9 To 10 6 For kk = 1 To Len(Cells(ii, jj)) 7 If Mid(Cells(ii, jj), kk, 1) = Mid(Cells(ii, 3), kk, 1) Then 8 Cells(ii, jj).Characters(kk, Length:=1).Font.ColorIndex = 3 9 Else 10 Cells(ii, jj).Characters(kk, Length:=1).Font.ColorIndex = xlAutomatic 11 End If 12 If jj = 10 Then 13 If Mid(Cells(ii, jj), kk, 1) = Mid(Cells(ii, jj - 1), kk, 1) Then 14 Cells(ii, jj).Characters(kk, Length:=1).Font.ColorIndex = xlAutomatic 15 End If 16 End If 17 Next 18 Next 19 ii = ii + 1 20 Loop 21End Sub

###試行データ
各列のデータは9桁の16進数(文字列)です。

C列,I列,J列 15364299C,1535A6597,15364299C 0E7EE381D,0E7E47418,0E7EE381D 26CC15DC6,26CB799C2,26CC15DC6 1AB769FFB,1AB6CDBF8,1AB769FFB 0938A00B6,093803CB2,0938A00B6 1C1A41A94,1C19A5690,1C1A41A94

###補足情報(言語/FW/ツール等のバージョンなど)
MS Office2013 Excel VBAマクロ
コードはExcel ObjectsのSheet1に記述しています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

takito

2016/12/21 07:58

マクロを試してみたところ部分的な色付けはできました。試行されている文字列パターンも示していただければ、何か原因がわかるかもしれません。
KenG1300R

2016/12/21 08:41

試行データを追加しました。
guest

回答3

0

私の手元の環境 Windows 7, Excel 2013 で試した結果を示します
部分的な色着け処理そのものは問題ないようですが、いかがでしょうか
試行結果

他になにか影響を与えるものに心当たりないですか?
同じセルを別の処理でも色付けしてるとか、条件付き書式が設定されているとか、、、

投稿2016/12/21 08:51

takito

総合スコア3111

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

KenG1300R

2016/12/21 15:21

試行ありがとうございます。 VBAマクロについてはこの処理しか実装しておらず、条件付き書式も設定していません。 気になることとしては文字比較にCells().Characters().Textを使用したところ実行時エラー1004が発生することですがこのことが何か関係あるでしょうか?
takito

2016/12/22 01:04

私の示した結果は KenG1300Rさんが求めている結果になっていますか?違いますか? 求めている結果通りであるなら、コードはキャプチャ画像で示した通り「丸写し」なので、コード以外の何かの理由があるとしか考えられません [Cells().Characters().Textを使用したところ]とのことですが、ご提示のコードのどの部分でしょうか? 現象の再現ができなければ何が理由でエラーになっているのか、それがどう影響するのか、わかりませんのでなんとも・・・
KenG1300R

2016/12/26 04:19

takitoさんに示していただいた実行結果は求めていた結果になっています。 Mid()を使用して文字抽出しているところをCells().Characters().Textを使用すると実行時エラーが発生します。 詳細に書くとI列、J列の値はほかの列の値をベースに別シートから参照した値なのでその辺がなにか関係あるのかもしれません。(イベント順序として全体の書式が上書きされてしまうなど)
guest

0

自己解決

新規作成したファイルで同様のコードを実行した場合には回答者様と同様に色づけされました。
根本的な解決はしていませんが、VBAマクロの問題ではなさそうなので一旦クローズします。

回答ありがとうございました。

投稿2016/12/26 04:12

KenG1300R

総合スコア6

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

Excel2010の環境ですが、提示のコードで問題なく動きました。
|C列|…|I列|J列|
|ABC|…|ADF|AAC|
とした場合、I列はA、J列はCが赤く表示され、それ以外は黒(自動)になりました。
また事前にフォントを別の色に変えておいた場合でも問題はありませんでした。

投稿2016/12/21 07:36

ttyp03

総合スコア16998

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問