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に記述しています。
回答3件
あなたの回答
tips
プレビュー