![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
今回の質問は図形に寸法値を入れるために基礎学習として簡単なマクロを作った件についてです。
シート上のコマンドボタンでフォームを呼び出し、文字の位置(100とか)を入力し、数字等文字を打ち込むと
打ち込んだ文字がその位置に表示されるというものです。
Private Sub Cmd文字表示_Click()
Dim x As Single, y As Single, Sh As Shape
On Error Resume Next
x = CSng(Text位置A.Value)
y = CSng(TextBox1.Value)
With ActiveSheet
For Each Sh In .Shapes
If Sh.Name <> "Cmd文字入力" Then
Sh.Delete
End If
Next Sh
.Shapes.AddTextbox(msoTextOrientationHorizontal, x, x, _
x, x).Select
End With
With Selection.ShapeRange
.Fill.Visible = msoFalse
.Fill.Transparency = 0#
.Line.Weight = 0.75
.Line.DashStyle = msoLineSolid
.Line.Style = msoLineSingle
.Line.Transparency = 0#
.Line.Visible = msoFalse
End With
Selection.Characters.Text = "y"
With Selection.Characters(Start:=1, Length:=3).Font
.Name = "MS Pゴシック"
.FontStyle = "標準"
.Size = 11
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.ColorIndex = xlAutomatic
End With
End Sub
文字位置を自由に変えることは出来ますが打ち込んだ文字に変化させることが出来ません。
簡略的なコードや文字を表示させるには別の方法があるという方がいましたらご教示お願いします。
No.1ベストアンサー
- 回答日時:
とりあえず、23行目の引用符を取り除いて
Selection.Characters.Text = y
とすれば、TextBox1に入力した数値が表示されます。
TextBox1に入れた文字が変数yに入りますが、
yはSingle型ですから、数値しか表示できません。
また、「小数点以下2桁」など書式設定をして表示したいなら、
Selection.Characters.Text = Format(y, "0.##")
などとします。
文字でも数値でもとにかくTextBox1に入力したとおりに表示させたいなら、
2行目を
Dim x As Single, y As String, Sh As Shape
5行目を
y = TextBox2.Value
23行目を
Selection.Characters.Text = y
でよいと思います。
回答ありがとうございます。
早速、一番下の回答でトライしてみました。出来ました!
Dim x As Single, y As String, Sh As Shape
y = TextBox2.Value
ここまでは思いついていました。
しかし、
Selection.Characters.Text = "y"
の””がまずいということまで気が付きませんでした。
とはいえ、自分でもある程度までは出来ていたことに喜んでいます。
文字を表記するのは線を描くよりもコードが長いですね。
最初はワードアートで考えていました。本にはそれしか載っていなかったので。
テキストボックスは私が考えたのですがコードが長いですね。
文字を表記する方法はこれしかないのでしょうか。
図形を描いてその線分の長さを線の脇に書くことを考えているのですがSetステートメントなどでこのコードを短縮しておき、他の線には変数で対応することを考えています。
ひとまずありがとうございました。
No.3
- 回答日時:
こんにちは。
If Sh.Name <> "Cmd文字入力" Then
が使えるようになりましたね。
ちょっと気になってきたのでほっとしました。
序にコードの長さについて一言。
マクロ記録では不必要なプロパティまで設定してしまうので冗長なコードにはなりますが、その反面、プロパティーを覚える手助けにはなると思いますので不必要なコードを無闇に削除するのではなく、意味をよく理解してから削除するように心掛けてください。VBA勉強中であれば尚更のこと。
また、マクロ記録では頻繁にSelectが出てきますがこれはほとんどが不必要なものですので必要な時以外は削除するようにしましょう。
それから「表示のみ」の場合は、Label Controlが基本です。
ところで今勉強中の図形の寸法表示ですが、例えば四角形の「縦」の寸法表示は上手くいきますか?
以上です。
この回答への補足
>If Sh.Name <> "Cmd文字入力" Then
>が使えるようになりましたね。
>ちょっと気になってきたのでほっとしました。
前回の質問を締め切った後にとうとう原因がわかりました。
Sheet1上にある「名前ボックス」がCommandBattun1であることに気が付きました。早速、名前を「Cmd作図」にしたところ見事にコマンドボタンが消えなくなりました。
今までそんなところは気にもしなかったのですがSheet1上にあるオブジェクトの属性というべきものを表示する重要なところなんだなと感じました。
私にとっては時間をかけた分、大きな一歩でした。
前回ヒントをもらってからプログラムもかなり進化しています。
If文を使い、ある高さを超えると4角形から5角形を描画することや寸法線表示も図形の形状に合わせて出来るようにしました。
VBAは、一つの定形のコードを覚えるとどんどん応用が出来る感じがしています。
回答ありがとうございます。
>ところで今勉強中の図形の寸法表示ですが、例えば四角形の「縦」の寸法表示は上手くいきますか?
この文章を見てヒョっとしたらと感じましたのでトライしてみました。昨日、深夜まで試行錯誤したのですが出来ませんでした。
安易に考えていたようです。
テキストボックス、縦書きテキストボックスのどちらかを使いテキストボックスの書式設定で方向を縦使いに直すマクロの記録をを取りました。
With Selection
.HorizontalAlignment = xlLeft
.VerticalAlignment = xlTop
.Orientation = xlUpward
.AutoSize = False
.AddIndent = False
End With
このうちの
.Orientation = xlUpward
が該当するコードであることがわかりましたので前に作った文字表示のマクロにコピペしたのですが横使いのままでした。
セル範囲でしたら
Range("A1:A5").Orientation = 90
というコードでできるということがわかりましたのでアレンジしてやってみたのですが出来ませんでした。
マクロの記録で記録したコードにコマンドボタンをつけてみましたら出来なくなってしまいました。
マクロの実行で出来ることがコマンドボタンでは出来なくなるという点でコードの記述に問題があるのではと感じています。
No.2
- 回答日時:
短くするには不要な命令を削ってはいかがでしょうか。
2番目のWithブロックの中は
.Fill.Visible = msoFalse
.Line.Visible = msoFalse
だけでいいと思うし、
3番目のWithブロックは
With Selection.Characters.Font
.Name = "MS Pゴシック"
.FontStyle = "標準"
.Size = 11
End With
でいいと思います。
文字を自由な位置に置きたいなら、仰るとおりテキストボックスやその同類(オートシェイプ)を使うしかないと思います。
再度、回答ありがとうございます。
早速、コードを削ってみました。
かなり簡略化できました。
マクロの記録でコードを作るといろいろコードが表示されてしまいますよね。
でも、これってどうゆうコードなのかなって調べるときはいいですね。
ありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) excel2021で実行できないマクロ。どこを直したらいいのか 2 2022/03/28 03:40
- Visual Basic(VBA) Excel VBAの解読について質問があります。 概要は、マクロでチェックボックスにチェックすると日 1 2023/02/10 07:50
- Visual Basic(VBA) VBAで質問ですが、皆さんはどの様に導き出しているのでしょうか? 6 2022/05/03 21:53
- Visual Basic(VBA) VBAの繰り返し処理について教えてください。 3 2022/08/02 13:21
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) エクセルのマクロを使ってメールを送る方法について教えてください 2 2022/03/29 01:36
- Visual Basic(VBA) VBAでファイルを開くプログラムがエラーです 2 2023/02/21 16:56
- Visual Basic(VBA) excel vbaでvlooupの変数がわかりません。 7 2022/05/30 09:35
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ウォッチ式の文字数制限について
-
eclipseのデバッグ中に変数の値...
-
Vba テキストボックス文字を右...
-
ACCESSのラベル内データに下線...
-
ラベルを表示したり非表示にし...
-
ラベルの文字列の長さが変わっ...
-
三菱タッチパネル小数点以下表...
-
複数のコンボボックスの項目の...
-
Propertyプロシージャの使い道
-
ラベル内の文字(Caption)を縦...
-
フォームのラベルのプロパティ...
-
ExcelVBA:コンボボックスのリ...
-
ラベルのスクロール(VB)
-
VisualStudioのプロパティが表...
-
ToolStripコントロールのLocat...
-
Access2002のVBAコンボボックス...
-
MATLABのグラフで軸目盛りのフ...
-
データ型とオブジェクト型 プ...
-
プロパティを表示させるにはど...
-
ダイアログ属性の変更
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ウォッチ式の文字数制限について
-
eclipseのデバッグ中に変数の値...
-
Vba テキストボックス文字を右...
-
ExcelVBA EnableプロパティがF...
-
VisualStudioのプロパティが表...
-
ラベルを表示したり非表示にし...
-
三菱タッチパネル小数点以下表...
-
ラベルのスクロール(VB)
-
VB.NETでラベルの大きさってど...
-
Excel VBA ユーザーフォーム内...
-
ラベル内の文字(Caption)を縦...
-
ラベルの文字列の長さが変わっ...
-
ACCESSのラベル内データに下線...
-
ACCESSのVisibleについて
-
C# DataGridView特定セルの入力...
-
MATLABのグラフで軸目盛りのフ...
-
エクセル 画像のプロパティで縦...
-
Notepad++のコメントの色を変え...
-
C#初心者です。チェックボック...
-
TextBox内で違う色の文字を表示...
おすすめ情報