- ベストアンサー
エクセルVBAでの質問
お世話になります。 エクセルVBAのプログラムコードをコピーし、 エクセルの通常シートへ貼り付けした際、 「’」で始まる説明分または注釈をプロシージャ画面の 様に色づけしたいと思い下記の様なコードを書きました。 しかし、VBA実行後、元のコードが行によって、空白 から始まって行の途中に「’」がある場合など、 少し手前の文字から着色されたりしていました。 何故なのでしょうか。 どこがおかしいのでしょうか。 空白が半角か全角になっている為にこのような現象に なっているのでしょうか。 しかしその解決方法が分からなく、 どなたかご教授頂きたく宜しくお願い致します。 記 Sub サンプル() Dim x As Integer Dim y As Integer Dim z As Integer Dim myrng As String Dim zz As Integer For y = 1 To 10 For x = 1 To Cells(Rows.Count, y).End(xlUp).Row If InStr(Trim(Cells(x, y).Value), "'") = 1 Then Cells(x, y).Font.ColorIndex = 10 ElseIf InStr(Trim(Cells(x, y).Value), "'") = 0 Then Else z = InStr(Trim(Cells(x, y).Value), "'") myrng = Cells(x, y) zz = Len(myrng) Cells(x, y).Characters(z, zz).Font.ColorIndex = 10 End If Next x Next y End Sub
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>少し手前の文字から着色されたりしていました。 何故なのでしょうか。 文字の評価でTrimを使って空白を除外していますが、着色時には空白を除外した文字位置を元に着色開始位置を指定したために、先頭の空白文字数だけ”ズレ”が出るのです。 z = InStr(Cells(x, y).Value, "'")
その他の回答 (1)
- nagare
- ベストアンサー率33% (280/831)
Trim()が犯人です " 'AB"をいう文字列をTrim()で変換すると"'AB"となるので InStr()の戻り値がずれてしまいます Trim()は必要なのでしょうか? 余談 "'"の場合はコメントではないので考慮が必要です 例)ElseIf InStr(Trim(Cells(x, y).Value), "'") = 0 Then
お礼
ありがとうございました。 最初違う事をやろうとしてまして その際、Trimが必要で、そのまま残ってしまってました。 おかげさまで解決です。
お礼
ありがとうございました。 解決です。