• ベストアンサー

Excel  VBAで 図形を描いてその中に文字を。

教えて下さい。 エクセル2007 VBAで オートシェイプでフローチャートの三角形を描いて、 その中に「検索」などの文字を表示させることが必要になってきました。 どのように記述すればいいのですか? >ActiveSheet.Shapes.AddShape msoShapeIsoscelesTriangle, 560, 60, 70, 80 これで三角形は描画できますが、その中に文字を記入させるにはどうすればいいのかを教えて下さい。よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんばんは。 セルの右端の上を頂点として作成します。 ただし、左により過ぎると、「位置エラー」で、作画できません。 記録マクロでは、Character.Text が出てくるので、それは、TextFrame です。2007では、デフォルトで、塗りつぶしなどになりますから、書式設定をして、それを規定値にしてあげれば、よいかと思います。 '------------------------------------------- Sub TestMacro1() Dim sMsg As String Dim dL As Double '左 Dim dT As Double '上 Dim dW As Double '幅 Dim dH As Double '高さ      sMsg = Application.InputBox("シェイプに入れる文字をいれてください。", Type:=2)   If sMsg = "False" Or sMsg = "" Then Exit Sub      With ActiveCell    dL = 0: dT = 0: dW = 110: dH = 95    If .Offset(, 1).Left - (dW / 2) < 0 Then MsgBox "位置エラー", 48: Exit Sub    dL = .Offset(, 1).Left - (dW / 2): dT = .Top: dW = 110   End With      With ActiveSheet.Shapes.AddShape(msoShapeIsoscelesTriangle, dL, dT, dW, dH)    .DrawingObject.Text = sMsg '位置合わせは、スペースをいれでもよい。例: =" " & sMsg   End With End Sub

banzaiA
質問者

お礼

早速のご回答ありがとうございます! できました! これで次へ進むことができそうです。

その他の回答 (2)

  • xls88
  • ベストアンサー率56% (669/1189)
回答No.2

残念ながら、Excel2007では記録されなくなりました。 Word2007なら記録されます。 図形を挿入する部分はExcel2007でも使えます。 「テキストの追加」の部分のコードは使えないようです。 ヘルプで、TextFrameプロパティを確認してください。 Textを追加するコードが掲載されています。

banzaiA
質問者

お礼

ありがとうございます 確認してみます

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.1

そのままマクロの自動記録で、テキストを記入して、生成されたコードを見ればわかるはずです。 ついでに・・・ >フローチャートの三角形~ msoShapeIsoscelesTriangleは基本図形の三角形ではありませんか?

banzaiA
質問者

補足

早速のご回答ありがとうございます。 ああ、基本図形の三角形でしたか? ご指摘の自動記録では、オートシェイプの図形作成表示の一連の作業は記録されなかったのです。なぜでしょうか?

関連するQ&A

  • Excel VBA で図形を描く方法について

    Excel VBA初心者です。 Excel のオートシェイプで任意の四角を描くには、始点をマウスでクリックし対角にドラッグすれば自由な四角が描けますが、VBAでこれを行なう場合、どのように記述すればいいのでしょうか?。 Excel は2003です。 いろいろ調べてみると… 一例ですが… Set Shp = WS.Shapes.AddShape(msoShapeRectangle, 50, 50, 100, 40) このような記述をよく目にします。 恐らくこれは始点(50,50)、四角の大きさ(100,40)となると思います。 私がVBAで描きたいのは、マウスを使った任意の位置と大きさの四角と丸です。 説明が下手で申し訳ありませんが、よろしくお願いします。

  • ShapeのVBAの中での取り扱い

    ShapeのVBAの中での取り扱いに関して、サジェスチョン願います。 Shapeに文字が書き込まれていない段階で、選択して文字を読み込み判定しようとするとエラーとなります。 下記のVBAでは、5番目のShapeが該当します。 このエラーを防ぐためには、On Error Resume Nextが有効ですが、他の方法を探しています。例えば、charactor=trueみたいなもの。 ----- Sub Shapeの調査() Dim nametemp(10) As String Dim temp As Integer Dim i As Integer Dim aaa As Variant 'On Error Resume Next ActiveSheet.Shapes.AddShape(msoShapeRectangle, 50, 50, 50, 50).Select ActiveSheet.Shapes.AddShape(msoShapeOval, 100, 100, 50, 50).Select ActiveSheet.Shapes.AddTextbox(msoTextOrientationHorizontal, 150, 150, 50, 50).Select ActiveSheet.Shapes.AddShape(msoShapeRectangle, 200, 200, 50, 50).Select ActiveSheet.Shapes.AddShape(msoShapeOval, 250, 250, 50, 50).Select temp = ActiveSheet.Shapes.Count For i = 1 To temp ActiveSheet.Shapes(i).Select nametemp(i) = ActiveSheet.Shapes(i).Name Next For i = 1 To temp / 2 + 1 '4つのshapeに対し、文字を書き込もうとする ActiveSheet.Shapes(nametemp(i)).Select Selection.Characters.Text = "" Next For i = 1 To temp / 2 '3つに対して、文字を書き込む ActiveSheet.Shapes(nametemp(i)).Select Selection.Characters.Text = "zzzzz" Next For i = 1 To temp ActiveSheet.Shapes(nametemp(i)).Select aaa = Selection.Characters.Text '<--5番目のShapeに対し If aaa = "zzzzz" Then MsgBox (aaa)'<--errorとなる。 Next End Sub

  • 特定の名前のオートシェイプの有無を知りたい(エクセルVBA)

    Excel VBA で、オートシェイプを扱おうとしています。 たとえば、 ActiveSheet.Shapes.AddShape(msoShapeRectangle, 10, 10, 50, 50).Name = "TestShape1" のようにして、それぞれ名前を付けているのですが、プログラム中、特定のオートシェイプを削除したり、再び同じ名前で作ったり、ということを行っています。 前者の場合、すでに当該オートシェイプが削除されている場合、目的のオートシェイプが存在していないためか、エラーが発生します。また後者の場合も、オートシェイプを重ねて作成することになってしまうケースにエラーが発生します。 On Error Resume Next で回避することも考えられるでしょうが、もっと直接的に、ある名前のオートシェイプが存在する/しない、をチェックしたうえで各処理を行うようにしたいのです。 どのような方法があるでしょうか?

  • Excel VBA で自在に図形を変化させたい

    Excel VBAを使って図形を自由に変化させたいと思っています。 一つの形の四角形や三角形をVBAを使ってシート上に表記することは出来ます。 私はユーザーインターフェースを作り、テキストボックスに値を入れることで図形を変化させることをしたいと思っています。 例えば、一つの三角形を正三角形にしたり、直角二等辺三角形にしたり、自在に角度を変えてVBAに描かせたいと思っています。 三角形は以下のようにコードを記述しましたらシートに表示できました。 Sub 三角形作成() Set ArwLine = ActiveSheet.Shapes.AddLine(10, 10, 200, 200) Set ArwLine = ActiveSheet.Shapes.AddLine(200, 200, 100, 400) Set ArwLine = ActiveSheet.Shapes.AddLine(100, 400, 10, 10) End Sub これを以下のようにして変数(x、y)にユーザーインターファースから値を代入するようにしたいのですがどのようにすればよいのでしょうか教えてください。 Private Sub CommandButton1_Click() UserForm1.Show End Sub Sub 三角形作成() Set ArwLine = ActiveSheet.Shapes.AddLine(10, 10, 200, 200) Set ArwLine = ActiveSheet.Shapes.AddLine(200, 200, x, y) Set ArwLine = ActiveSheet.Shapes.AddLine(x, y, 10, 10) End Sub 前回、「Excel VBAで図面を書きたい」という質問をしたのですがややこしく書いたため解答される方が居ませんでしたので編集して再質問をさせていただきます。 よろしくお願いします。

  • Excel非表示行中のshapeが移動できない

    Excel VBAで不明な点がありましたので、質問させてください。 オートシェイプ(四角形/msoRectangle)を、VBAで移動、変形させていたのですが、オートシェイプのある行を非表示にした場合、表示している行以外に移動させても、オートシェイプが表示されません。 ・shapes.Topやshapes.Leftは変更されています。 ・shapes.visibleもmsoTrueです。 ・activesheet.activateでシートを更新してみても表示されません。 ・該当行を非表示から表示にしたら、変更後の位置、大きさにオートシェイプが出現します。 これは、エクセルの仕様(バグ)なのでしょうか? それとも、何か別の設定を行えば、行を非表示にしたまま、オートシェイプを別の位置に移動(出現)させることができるのでしょうか? どうか、皆様のお知恵をお貸しください。 OSはWin7Pro 32bit、Excelは2010です。

  • Word2010 VBAでオブジェクトに文字の効果

    Word2010のVBAで作成するオートシェイプに文字を入力し、その文字に文字の効果を付けたいです。 付けたい効果は「ワードアートのスタイル」の「文字の効果」内にある「変形」の「四角」です。 Sub 図形() Dim 丸 As Shape Set 丸 = ActiveDocument.Shapes.AddShape(msoShapeOval, 1, 1, 60, 60) 丸.Select 丸.TextFrame.TextRange = "文字" 'この部分です。Excelではこれで出来たのですがWordだと書き方が違うのでしょうか? Selection.ShapeRange.TextEffect.PresetShape = msoTextEffectShapePlainText End Sub よろしくお願いいたします。

  • #の意味

    エクセルでオートシェイフ゜のマクロの記録をとったときに Sub Macro2() ActiveSheet.Shapes.AddShape(msoShapeFlowchartConnector, 100, 100#, 100, 100).Select End Sub のように TOPの後にシャーフ゜が入ります。 (expression.AddShape(Type, Left, Top, Width, Height)) これはどういう意味でしょうか? シャーフ゜があってもなくても新規のオートシェイフ゜が挿入できます。

  • VB6 オートシェイプ描画

    VB6 オートシェイプ描画 VB6でExcel,2000(ActiveSheet)にオートシェイプを使用したいのですが、エラーが出てしまいます。 コマンドボタンクリック時、エラー ------------------------------- 実行時エラー'1004': 指定された値は境界を超えています。 ------------------------------- AddLineは出来たのですが四角や円がこのエラーです。どこが間違えているのでしょうか? 宜しくお願いします。 Private Sub CB13_Click() Dim xlApp As Excel.Application Set xlApp = GetObject(, "Excel.Application") xlApp.ActiveSheet.Shapes.AddLine 50, 50, 100, 100 '(OK) xlApp.ActiveSheet.Shapes.AddShape(msoShapeRectangle, 50, 50, 100, 100).Select '(NG) Set xlApp = Nothing End Sub

  • エクセルVBAの記述方法の質問です。

    エクセルです。12個のセルの文字列をオートシェープの吹き出しに順に表示させるマクロをつくりました。 Sub tenki2() Dim i As Integer Dim a As String For i = 1 To 12 a = Cells(i, 2).Value ActiveSheet.Shapes("AutoShape 4").Select Selection.Characters.Text = a Application.Wait Now + TimeValue("00:00:05") Next i End Sub これで思った通り表示されるのですが、できればオートシェープをセレクトしないようにしたいのです。 (シートを保護するため) それで ActiveSheet.Shapes("AutoShape 4").Select Selection.Characters.Text = a のところを ActiveSheet.Shapes("AutoShape 4").Characters.Text = a と変えたのですが、「オブジェクトはこのプロパティまたはメソッドをサポートしていません」という実行時エラーがでてしまいました。書き方のどこがまずかったのでしょうか?ご教示いただければ幸いです。

  • EXCEL VBAについて

    EXCEL VBAに詳しい方よろしくお願いいたします ユーザーからフォルダー指定してもらい そのフォルダー内に入っているすべてのブック、すべてのシートの検索、 (シート内にオートシェイプの中に文字を入れたものもアリ。検索対象。) そして、その検索にヒットしたシート名とブック名を別のテキストファイルに吐き出す。 それとは別に検索に引っかかった文字を青に置き換える(EXCELシート内)事は可能でしょうか? 文字の色は変わるのですがオートシェイプ内の色が変えられません。 何時間がんばりましたが、経験不足のためどうもうまくいきません。 どなたか親切な方、お教えいただけたら幸いです。

専門家に質問してみよう