Excelのマクロについて質問です。

1つのセルの中にある文章の、一部分だけに色がついていたとして、
その部分のテキストだけを抽出したいのですが、どうしたら良いのかわかりません。

【例】「本日は雨ですね雨宮さん」
※上記の最初の「雨」が赤色だったとして、その位置を取得したい

特定のテキストが出現した位置を取得するのなら、
InStrやCharactersでどうにかなると思うのですが、
色つきの部分を取得したいのです。

どなたかご教授下さい。
よろしくお願いいたします。

回答の条件
  • 1人5回まで
  • 登録:2009/05/25 17:59:57
  • 終了:2009/05/25 19:11:46

回答(1件)

id:taknt No.1

きゃづみぃ回答回数13539ベストアンサー獲得回数11982009/05/25 18:49:07

ポイント60pt
Sub test()
a = Len(Cells(1, "A"))
c = ""
For b = 1 To a
    If Cells(1, "A").Characters(Start:=b, Length:=1).Font.ColorIndex <> xlAutomatic Then
    c = c + Mid(Cells(1, "A"), b, 1)
    End If
Next b

MsgBox c


End Sub

A1のセルに黒意外の色があれば 抜き出します。

id:exflower

ありがとうございます。

xlAutomaticというのをはじめて知りました。勉強になります。

意図していた動作でした。大変たすかりました!

2009/05/25 19:03:29
  • id:Mook
    回答拒否になっているようなのでコメントで失礼しますが、
    下記を応用すれば、できないでしょうか。

    Sub CheckColor()
    With Range("A1")
    For i = 1 To Len(.Value)
    Debug.Print .Characters(Start:=i, Length:=1).Font.ColorIndex
    Next
    End With
    End Sub
  • id:exflower
    Mookさんは回答拒否ユーザーには指定していませんが…。
    同時進行で色々ためしていたのですが、Mookさんが書かれたものと同じ動作にいきつきました。
    わざわざどうもありがとうございました!
    一応ポイントの方もお送りさせていただきました。
  • id:Mook
    わざわざポイントありがとうございました。
    回答拒否条件にマッチしてしまっていたようですね。

    一応関数にした例を作ってみました。
    A1にデータがあるとに、
    B1=InColorStr(A1)
    B1=InColorStr(A1,3)
    といった検索もできます。

    第二オプションは検索する色の指定ですが、指定がなければ先頭文字がデフォルト色になり、
    これと違う色を見つけると、その位置を返します。
    見つからないときは -1 が戻ります。

    Function InColorStr(r As Range, Optional defColor As Integer = -1)
      InColorStr = -1
      
      If Len(r.Value) = 0 Then Exit Function
      If defColor = -1 Then
        defColor = r.Characters(Start:=1, Length:=1).Font.ColorIndex
      End If
      
      Dim i As Long
      For i = 2 To Len(r.Value)
        If r.Characters(Start:=i, Length:=1).Font.ColorIndex <> defColor Then
          InColorStr = i
          Exit Function
        End If
      Next
    End Function

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません