- 締切済み
VBAで文字の色を検索する方法
VBAで図形描写するプログラムを作成しています。 ワークシートにある文字に指定してある色と これから描く図形の色を統一したいのですが、 VBAでの表現方法がわかりません。 セルA1が赤字で「まる」、A2が青字で「しかく」と書かれていたら、 VBAで描く円が赤い円に、四角が青い四角になる。 …といった感じです。 よろしくお願いいたしますっ!(>△<)汗
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- mitarashi
- ベストアンサー率59% (574/965)
Shape追加でイベントを動作させて色を変えられないかなと思って、遊んでみました。あるシートのA1に○を、A2に□を入れておきます。他のシートから移る等して、そのシートがアクティブになると、プログラムが起動されます。オートシェイプで○を描くと、A1の○の文字色と同じ色に変更されます。□についても同様です。文字色は、動作中でも普通の方法で変更できます。DoEventsを使っているためか、オートシェープの選択を示すマークが表示されなくなったり、オートシェープのボタン表示が戻らなくなったりといった不具合があります。なお、当方XL2000です。 一つお役立ち情報を:文字のColorIndexと、オートシェープのSchemeColorは初期状態では7つずれた値になっている様です。 ☆クラスモジュール countShapeClass VBAの編集画面で、挿入・クラスモジュールとすると、Class1というのが生成されますので、名前を変更してください。 Public Event shapeAdd() Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Private mySheet As Worksheet Private shapesCount As Long Public Property Set sheet(newSheet As Worksheet) Dim shp As Shape Set mySheet = newSheet shapesCount = mySheet.Shapes.Count End Property Public Sub countShapes() If mySheet Is Nothing Then Exit Sub Do While ActiveSheet.Name = mySheet.Name DoEvents Sleep 100 If mySheet.Shapes.Count > shapesCount Then RaiseEvent shapeAdd shapesCount = mySheet.Shapes.Count Loop End Sub ☆シートモジュール VBAの編集画面の左側の、例えばSheet1というところでWクリックして、貼り付けてください。(当然ですが、図形を描画する、上で○、□を設定したシートにしてください) Private WithEvents countShape As countShapeClass Private Sub countShape_shapeAdd() Dim shp As ShapeRange Dim myShapeType As String Set shp = Selection.ShapeRange myShapeType = Left(shp.Name, InStr(shp.Name, " ") - 1) Select Case myShapeType Case "Oval" shp.Line.ForeColor.SchemeColor = Me.Range("A1").Font.ColorIndex + 7 Case "Rectangle" shp.Line.ForeColor.SchemeColor = Me.Range("A2").Font.ColorIndex + 7 Case Else End Select End Sub Private Sub Worksheet_Activate() Set countShape = New countShapeClass Set countShape.sheet = Me countShape.countShapes End Sub Private Sub Worksheet_Deactivate() Set countShape = Nothing End Sub
- rivoisu
- ベストアンサー率36% (97/264)
cells(1,1).font.colorindexがcellの文字の色を返しますので利用してください。 こういうものの見つけ方として マクロの自動記録で文字の色を変える処理を記録してみる。そのマクロをみると cells(1,1).font.colorindexに値が設定されているのが分かるでしょう。 そこからcells("A1").font.colorindexの値を取得できるか試す。 イミディエイトウインドに?cells("A1").font.colorindexとして値が表示されれば取得できることが分かると思います。 VBAでは目的のプロパティやメソッドを早く見つける方法を身につけることが大事です。 一般的にプログラムのデバッグの方法も自分なりに工夫することが大事だと思います。