Excel2010を使用しています。
アクティブセルには、英文が入力されています。
例文を以下に2つ書きますが、()で囲まれた部分のフォントが赤色とご理解ください。
その他の部分のフォントは黒色です。
例文1
If I (had) enough money,I (would) buy this book.
例文2
(Had I known) it was an important document, I (would not have thrown) it away.
フォントが赤色の部分だけ、白色に変更したいと思い、モジュールシートに以下のように書きました。
例文1では問題ありませんが、例文2のように1文字目のフォント色が赤の場合、2文字目が勝手に黒に変更されてしまいます。
Sub mojiiro()
Dim i As Integer
For i = 1 To Len(ActiveCell)
If ActiveCell.Characters(Start:=i, Length:=1).Font.ColorIndex = 3 Then
ActiveCell.Characters(Start:=i, Length:=1).Font.ColorIndex = 2
End If
Next i
End Sub
修正すべき部分を教えていただけないでしょうか。
何卒宜しくお願い致します。
No.1ベストアンサー
- 回答日時:
こんばんは!
確かに1文字目からフォント色が「赤」の場合は質問通りの動きになってしまいますね。
(いままで全く気づきませんでした。)
苦肉の策ですが、1文字ずつではなく
「赤」のフォント色の文字数を取得し、その文字数分だけフォント色を変える方法はどうでしょうか?
Sub Sample1()
Dim i As Long, cnt As Long, c As Range
If Selection.Count = 1 Then
Set c = Selection
For i = 1 To Len(c)
cnt = 0
If c.Characters(Start:=i, Length:=1).Font.ColorIndex = 3 Then
Do
If c.Characters(Start:=i + cnt, Length:=1).Font.ColorIndex <> 3 Or _
i + cnt > Len(c) Then Exit Do
cnt = cnt + 1
Loop
c.Characters(Start:=i, Length:=cnt).Font.ColorIndex = 2
End If
i = i + cnt
Next i
Else
MsgBox "1セルのみ選択してください"
End If
End Sub
こんな感じではどうでしょうか?m(_ _)m
ありがとうございます!
早速試してみました。
以下のような、文頭と文末のフォント色が「赤」になっている場合、文末の処理ができず、苦しんでおりました。
(Will) we be in time for the plane if we leave now? No,you (won't.)
でも...マクロを2回実行するとうまくいきます。不思議です(+_+)
ですから、正しい処理を書いてくださっていることと思います。ありがとうございます。
文末のピリオドのフォント色は、必ず黒色とすることにしました。
少々納得は行かないのですが、とりあえず今日は、これで乗り切ろうと思います。
1つ質問ですが
c.Characters(Start:=i, Length:=cnt).Font.ColorIndex = 2
End If
i = i + cnt
Next i
の部分を
c.Characters(Start:=i, Length:=cnt).Font.ColorIndex = 2
i = i + cnt-1
End If
Next i
とするのは間違いでしょうか?
No.5
- 回答日時:
No.1です。
c.Characters(Start:=i, Length:=cnt).Font.ColorIndex = 2
i = i + cnt-1
End If
Next i
とするのは間違いでしょうか?
についてですが、
別に間違いというコトはないと思います。
おそらくそのコードでも動くはずです。
「-1」とするコトで一文字後戻りして、次のループになりますので、
すでに「白」に変わっている文字も、もう一度ループするのではないでしょうか?
今回は1セルだけですので、大勢に影響はないと思います。
とりあえずはこの程度で・・・m(_ _)m
No.4
- 回答日時:
#2です
ごめんなさい
2007 でできたので回答してました
2010 特有の動きなのでしょうか
失礼しました
とんでもないです!
大変勉強になりました。心より感謝しております<(_ _)>
いつか30246kikuさんのように、美しいモジュールを書けるようになりたいです!
私は2003から2010にしたので、2007では動作確認できないのですが、とにかく色々と変わっていてとまどいます。
本当にお世話になりました。ありがとうございました。
No.3
- 回答日時:
先頭が赤の場合、連続した赤の部分を1動作で設定しないとまずいようですね。
さもないとデータそのものも乱れて表示されたりします。(2007 sp2)
最初の赤だけ特別扱い、あとは普通に1文字ずつで大丈夫です。
Sub mojiiro()
Dim i As Long
Dim cnt As Long
With ActiveCell
For i = 1 To Len(ActiveCell)
If .Characters(i, 1).Font.ColorIndex = 3 Then
cnt = cnt + 1
Else
Exit For
End If
Next i
If cnt > 0 Then
.Characters(1, cnt).Font.ColorIndex = 2
End If
For i = cnt + 1 To Len(ActiveCell)
If .Characters(i, 1).Font.ColorIndex = 3 Then
.Characters(i, 1).Font.ColorIndex = 2
End If
Next i
End With
End Sub
ありがとうございます!
他の方にも書いたのですが、
(Will) we be in time for the plane if we leave now? No,you (won't.)
のように文末のフォント色を変えようとした場合に、うまく動作しません。
bonaronさんのマクロを加工して、連続した部分の文字色を変更したり、一文字ずつ変更したりしているうちにデータが乱れ、数式バーの内容とセルの内容が異なる現象もおきました。
最後にはファイルが壊れます・・・。なんでしょうね・・・。
bonaronさんの書いてくださったとおり、文頭の文字は特別扱いが必要なように、文末も特別扱いが必要なのかもしれません。
文末のピリオドを黒色に変更した後、マクロを実行すれば問題ありません。
疑問が残ってしまいましたが、仕事を進める上では全く支障ないので、今回はありがたくこれで進めようと思います。
貴重なお時間を割いていただき、本当にありがとうございました。
No.2
- 回答日時:
大差ありませんが、雰囲気以下でどうなりますか
状況を把握してから変更します
Public Sub test1()
Call Samp1(Range("B2:B24"), 3, 2)
End Sub
Public Sub test2()
Call Samp1(Range("B2:B24"), 2, 3)
End Sub
Public Sub test3()
Call Samp1(Selection, 3, 2)
End Sub
Public Sub test4()
Call Samp1(Selection, 2, 3)
End Sub
Public Sub test5()
Call Samp1(ActiveCell, 3, 2)
End Sub
Public Sub test6()
Call Samp1(ActiveCell, 2, 3)
End Sub
Public Sub Samp1(rng As Range, iCf As Long, iCt As Long)
Dim r As Range
Dim iA() As Long
Dim i As Long, j As Long, k As Long, n As Long
For Each r In rng
k = -1
j = Len(r.Value)
i = 1
While (i <= j)
If (r.Characters(i, 1).Font.ColorIndex = iCf) Then
n = 1
Do While (i + n <= j)
If (r.Characters(i + n, 1).Font.ColorIndex <> iCf) Then
Exit Do
End If
n = n + 1
Loop
k = k + 1
ReDim Preserve iA(1, k)
iA(0, k) = i
iA(1, k) = n
i = i + n
End If
i = i + 1
Wend
For i = 0 To k
r.Characters(iA(0, i), iA(1, i)).Font.ColorIndex = iCt
Next
Next
End Sub
※
> For i = 0 To k
> r.Characters(iA(0, i), iA(1, i)).Font.ColorIndex = iCt
> Next
この部分は、明示的に覚えたものがあるか判別した方が良いかも
( k = -1 なら For 内は実行されませんが )
If (k >= 0) Then
For i = 0 To k
r.Characters(iA(0, i), iA(1, i)).Font.ColorIndex = iCt
Next
End If
ありがとうございます!
ExcelのVBAしか経験のない私にはかなり高度な内容でした。
30246kikuさんのように、いつか書けるようになりたいです!
Public Sub test3()
Call Samp1(Selection, 3, 2)
End Sub
を試してみました。
Samp1 の ReDim Preserve iA(1, k)以下がまだ理解できておらず、※以下の部分が生かせていない状況です。そんな中途半端な状況でお礼を書くのは、大変失礼だと思いますが・・・<(_ _)>
No.1さんにも書いたのですが
(Will) we be in time for the plane if we leave now? No,you (won't.)
というように、文末のピリオドまで赤になっていた場合に、文末の won't. が白に変わってくれないのです。
でも、マクロを2回実行するとうまくいきます。
ですので、マクロ実行前に、ピリオドを黒に変更することにしました。
これならもちろん、瞬時に色を変更してくれます!
後半の部分、勉強させていただきます。ありがとうございました(^^)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・【大喜利】【投稿~1/31】『寿司』がテーマの本のタイトル
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・【大喜利】【投稿~1/20】 追い込まれた犯人が咄嗟に言った一言とは?
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・【大喜利】【投稿~1/9】 忍者がやってるYouTubeが炎上してしまった理由
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ダガーの入力の仕方
-
エクセルのワードアートのフォ...
-
illustratorフォントを矢印キー...
-
横三角記号
-
エクセルVBAでのワードアート操...
-
入力規則のリストのフォントを...
-
ペイントの不思議な動き
-
文字がMS明朝になってしまいます
-
英数字用フォントでギリシア文...
-
キーボードのキー右下にある文...
-
エクセルに貼付けたURLが青文字...
-
「芦」の字が変換できません
-
カシオ KLD-300 ”ウ”の濁点の...
-
右クリックが一瞬で消えてしま...
-
ハイフンの入力の仕方が分かり...
-
カーソルの暴走
-
BackSpaceキーでページが戻って...
-
追加入力の文字だけ色を変えた...
-
excelのセル内の文字を180度回...
-
エクセル 入力規則を使ったリ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ダガーの入力の仕方
-
エクセルのワードアートのフォ...
-
文字がMS明朝になってしまいます
-
英数字用フォントでギリシア文...
-
英文フォントで単位を入力(win...
-
ディズニーフォントとミッキー...
-
英字小文字のエル(l)と数字...
-
フオントサイズが72以上になる...
-
ペイントの不思議な動き
-
ワード、縦の列がそろわない(...
-
アリス→ァㇼㇲ のような "捨て...
-
Excel上における発音記号の入力
-
オープンオフィスのワード機能...
-
エクセルVBAでのワードアート操...
-
イラストレーターでイタリック...
-
テキストボックスのフォンを変...
-
ことえり 文字バレット
-
リットルの文字
-
Jpegの写真に文字を入れる方法。
-
入力規則のリストのフォントを...
おすすめ情報