• 締切済み

VBAで文字の色を検索する方法

VBAで図形描写するプログラムを作成しています。 ワークシートにある文字に指定してある色と これから描く図形の色を統一したいのですが、 VBAでの表現方法がわかりません。 セルA1が赤字で「まる」、A2が青字で「しかく」と書かれていたら、 VBAで描く円が赤い円に、四角が青い四角になる。 …といった感じです。 よろしくお願いいたしますっ!(>△<)汗

みんなの回答

  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.2

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)
回答No.1

cells(1,1).font.colorindexがcellの文字の色を返しますので利用してください。 こういうものの見つけ方として マクロの自動記録で文字の色を変える処理を記録してみる。そのマクロをみると cells(1,1).font.colorindexに値が設定されているのが分かるでしょう。 そこからcells("A1").font.colorindexの値を取得できるか試す。 イミディエイトウインドに?cells("A1").font.colorindexとして値が表示されれば取得できることが分かると思います。 VBAでは目的のプロパティやメソッドを早く見つける方法を身につけることが大事です。 一般的にプログラムのデバッグの方法も自分なりに工夫することが大事だと思います。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Excel VBA 四角に網掛する方法

    Excel2007を使用しています。 セルではなく、四角とかボタンのオブジェクトをクリックすると、 そのオブジェクトに網掛をするような、VBAは作成可能ですか? というのも、チェックボックスだと、レ点が小さすぎて、 そこにチェックがあるかどうかわかりづらいので、 チェックボックスのレ点の代わりに、その□に網掛をしたいと考えています。 別にチェックボックスでなくても、四角とか丸などの図形の網掛で十分です。 検索方法が悪いのか、できるかどうかもわかりません。 できるかどうかと、オブジェクトのVBAでの表記を教えてください。 よろしくお願いします。

  • 色のついていない行を非表示にしたい

    ワークシートAにコマンドボタンをレイアウトして、ワークシートBの色のついているセルがない行を非表示にしたいのですがうまくいきません。 添付画像であれば、2,6,7の行を非表示にしたいのですがどのようにすればよいか、VBAを教えてください。 よろしくお願いします。

  • VBA 先頭一文字だけ残し、色を無しにしたいです

    office365です。 A列に文字が入っており、必ず先頭は何かしらの記号が入っています。 セルには、塗りつぶし書式がかかっている個所があり、色は「黄」で統一です。 A列を検索し、セルに塗りつぶしがされていた場合、そのセルの先頭の文字だけ残して削除し、かつ色無し。 色が塗りつぶしされていないセルは、変化無しです。 という命令を作りたいのですが、どう作ればいいか戸惑っています。

  • VBAについて

    いつもお世話になっています マクロ・VBA超初心者です。 質問させてください。 現在シート1の完売のセルの欄に○が入っていれば日付をみてシート2の同じ日付の隣のセルに○を入力しようと思っているのですが、シート2の日付を検索はしているんですが入力がいきません Sheet1  ↓セルA1 ↓セルB1  5月26日   26           B1のセルはDAY(A1)にて出してます         完売  A氏     ○             Sheet2  ↓A列   ↓B列 5月  1日  ・  ・  ・  26日    ○           ←シート1の所に○が付いているとシート1セルB1と同じ  27日                  日付の隣のセルに○を入力  28日 VBA Sub test() Sheets("Sheet2").Select Range("A1").Select Do Until ActiveCell = "" ActiveCell.Offset(1, 0).Activate If ActiveCell.Value = Worksheets("Sheet1").Range("B2") Then ActiveCell.Offset(0, 1).Activate If ActiveCell.Value <> "○" Then ActiveCell.Valu = "○" ActiveCell.Offset(0, -1).Activate Else ActiveCell.Offset(0, -1).Activate End If Else End If Loop Sheets("Sheet2").Select Range("A1").Select End Sub どこが間違っているかわからない状態です。 分かりにくい説明ではあるんですが教えてください お願いします。

  • EXCEL VBAで探した値を色を付ける

    EXCEL VBAで探した値を色を付ける方法が知りたいです。 シート2の値を参照してシート1の中からVBA シート2の数字を見つけて 合ったら シート1の同じ数字の背景に色をつけていく そんなVBAが作りたいのですが いい案が浮かばないのでどなたか教えていただけませんか? よろしくお願いいたします。 Sheet1 sheet2 A A 1 10 : 1 12 2 11 : 2 14 3 12 : 3 15 4 13 : 5 14 : 6 15 : 7 16 sheet1の12・14・15の所の背景を色を付けたいのですが うまくいかないのでよろしくお願いいたします

  • エクセルVBAで該当するセルに色をつけたい

    ご覧いただき、ありがとうございます。 当方、VBA初心者です。 エクセルVBAで、「対象の社名」に該当するセルに色をつけたいと思っています。 それぞれ別シートになります。 たとえば、abc(株)が対象なら、 1.(株)は(株)や株式会社など表記がバラバラなので取る⇒abcの文字列が検索対象 2.「検索シート」にあるabcを検索 3.対象のセルに色をつける 4.文字列がある限り(この場合は○がついている部分はずっと)検索続ける ※○の数式はつけた方が探しやすいと思って作ったので、なくても構いません わかりづらい文章ですみません。 ぜひお知恵を貸してください><

  • Excel 2010 VBAで教えてください。

    Excel 2010 VBAで教えてください。 Doubleの配列 Dim A(100) as double に ワークシート "Sheet1" セル A1:A100 の値を一発(For loop等を利用しない) で読み込むにはどうすればよいのでしょうか。 同じく、 Doubleの配列 A(100)を ワークシート "Sheet2" セル B1:B100 に一発で書き出すのはどうすればよいのでしょうか。  Variantにて Dim A as Variant では  A = Sheets("Sheet1").Range("A1:A100") で 読み込めました。 また Sheets("Sheet2").Range("B1:B100")で書き込みできましたが、double等でどうすれば良いのか知りたいです。

  • エクセルのブック内の検索一覧

    エクセル2003VBAについて教えてください。 複数のブックがあり、ブックの中にはいくつかの同じ内容のシートがあります。 シートの内容は、 A1セルには、○か×が入ります。 A2セルには、このブック名とシート名が入っています。 A3セルにはいろいろな文字列が入っています。 A1が○のブック内のシートを探して、別のブックへ |A2セルの内容|A3セルの内容| というリストを作成したいのですが、どのように組めばよいでしょうか。

  • VBAで区切り文字について

    セルに「○○○/△△△/×××_◇◇◇」もしくは「○○○/△△△/×××_◇◇◇」という形式でデータが入力されています。 ユーザが対象セルを選択して、ワークシート上のボタンをクリックすると、各変数に下記のようにVBAで値を代入させたいのですが、 どのようにしたらよろしいのでしょうか。 basyo1 = ○○○ basyo2 = △△△ basyo3 = ◇◇◇ ご教授下さい。

  • EXCEL VBA 別シートの文字をシート内で検索

    excel2003 VBAで SHEET2に格納されているセルの文字をSHEET1のB列1~9000程度までの文字列の中で一致または部分一致するものがあればそのセル(B列のセル)をSHEET3に順次A列に出力したいのですが、うまくできません。SHEET2に格納されている場所はA列で(SHEET1、SHEET2の文字とも増える可能性あり) 宜しくお願いします。