• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:vba textboxの文字のサイズの変更)

VBA TextBoxの文字のサイズを変更する方法

kagakusukiの回答

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.5

>早速次のように、コードを追加してみましたが解決できませんでした。 との事ですので、取り敢えず、セルに入力する事で設定されるデータや、一部のVBAの構文内で指定されているデータに不適当なものや、欠落があった場合には、主に間違いが発生しやすいのではないかと思える箇所に関しては、何処が誤っているのかを表示する様にしたVBAを組んでみました。  処で、質問者様のVBAでは k = .Cells(j + m, 3).Value '表示位置取得 の所で表示位置が入力されているセルはj + m行目に存在しているとなっているのに対し、 temp.TextFrame.Characters.text = Worksheets("ツーリングダイヤ").Cells(j, 2).Value 'BOXに駅名転記 の所で、駅名が入力されているセルはj行目にあるセルという事になっておりますが、駅名が入力されている行と表示位置のデータが入力されている行が異なる行となっているなどという、入力し難い作りとなっているのは何故なのでしょうか?  その理由がどの様なものなのか解りませんでしたので、「表示位置のデータが入力されている行」は「駅名が入力されている行」のm行下の行であるとする条件は、今回私が組んだVBAにおいてもそのまま残しております。  後、質問者様のVBAでは t = .Range("c110").Value において、C110セルに入力する値を駅の数ではなく、「駅名を入力するセルの中で最も下となるセルの行番号」にしなければならなくなっておりますが、今回私が組んだVBAを使用する際には「駅の数」を入力する様にして下さい。  尚、 >textboxの中の文字を大きくしたい というだけではどこまで大きくすれば良いのか解りませんでしたので、取り敢えず文字サイズを10.5ptに設定する様にしておきましたから、別のサイズにされる際には .Size = 10.5 '図形内のテキストのフォントサイズを10.5ptに設定 という箇所の10.5の部分を他の数値に変更して下さい。  その際の有効な値は正の数(小数点以下の桁数を含んだ数も可)です。  又、 >今回の場合はtextboxは、透明ですので必要はありませんが、できましたら、文字の色、背景の色、枠組の線、文字の位置の変更、等についてのコードなど併せ教えていただけましたらうれしいです。 との事でしたので、参考となる様に(テキストボックスは透明にしたままで)文字の色を赤、フォントの種類をMS Pゴシックとなる様にしておりますので、不要な様でしたら該当箇所を削除して下さい。  後、図形の位置は、通常のやり方では図形を囲む事が出来る最小の大きさを持つ長方形の左上の隅の頂点の位置で指定するものなのですが、透明なテキストボックスを使用しているというのに、その見えないボックスの左上の隅を基準にしてもあまり意味はない様にも思えましたし、折角縦一列に並べて配置しているというのに、駅名を表す文字列の右端の位置が、駅名の長さによってバラバラとなってしまっては見栄えが良くないようにも思えましたので、文字列の中心部分の位置で配置する位置を指定する様にしております。  その方法としては、まず縦横のサイズが0のボックスを作成する事で、左上の隅の頂点位置と、ボックスの中心の位置が一致する様にし、続いて文字列の折り返し無しモードとしてから、文字の上下の配置と、左右の配置を共に中央揃えとする事で、文字列の中心位置と、ボックスが配置されている位置が一致する様にしております。  只、サイズが0のテキストボックスでは、後からそのボックスを選択しようとした際に、選択する事が困難となりますので、文字列の中心位置とボックスの中心位置を一致させた後で、ボックスのサイズを文字列を囲む様なサイズに変更しています。  その際、透明なテキストボックスという事ですので、ボックスのサイズは一定とせずに、文字列の長さとフォントサイズに合わせて変わる様にしております。 Sub QNo8957421_vba_textboxの文字のサイズの変更_改() Dim temp As Shape Dim j, k, myOffsetC As Long Dim mySheet, NumStCell, AdjustCell, NameCell, PositColumn, NoAddress, BlankCell, InvalidCell, NoDataStation As String Dim m, t As Variant Dim c, StName As Range Dim IgnoreBlank, IgnoreInvalid As Boolean Dim myMsg As Byte mySheet = "ツーリングダイヤ" '処理の対象とするシートのシート名 NumStCell = "C110" '駅数が入力されているセルのセル番号 '※上記のセルには「駅名等が入力されている最後のセルの行番号」ではなく、 '駅の数を入力して下さい。 AdjustCell = "E99" '表示位置調整のデータが入力されているセルのセル番号 NameCell = "B104" '駅名が入力されている最初のセルのセル番号 PositColumn = "C" '表示位置のデータが入力されているセルが存在する列 'シートの有無を確認 If IsError(Evaluate("ROW('" & mySheet & "'!A1)")) Then MsgBox """" & mySheet & """シートが見つかりません。" _ & Chr(13) & "マクロを終了します。", vbExclamation, "存在しないシート" GoTo labelE End If If IsError(Evaluate("ROW('" & mySheet & "'!" & NumStCell & ")")) Then _ NoAddress = NoAddress & "NumStCell = """ & NumStCell & """" & Chr(13) & Chr(13) '駅数が入力されているセルのセル番号の有無確認 If IsError(Evaluate("ROW('" & mySheet & "'!" & AdjustCell & ")")) Then _ NoAddress = NoAddress & "AdjustCell = """ & AdjustCell & """" & Chr(13) & Chr(13) '表示位置調整のデータが入力されているセルのセル番号の有無確認 If IsError(Evaluate("ROW('" & mySheet & "'!" & NameCell & ")")) Then _ NoAddress = NoAddress & "NameCell = """ & NameCell & """" & Chr(13) & Chr(13) '駅名が入力されている最初のセルのセル番号の有無確認 If IsError(Evaluate("ROW('" & mySheet & "'!" & PositColumn & 1 & ")")) Then _ NoAddress = NoAddress & "PositColumn = """ & PositColumn & """" & Chr(13) & Chr(13) '表示位置のデータが入力されているセルが存在する列番号の有無確認 'マクロのVBA構文内で使用されているセル番号や列番号に誤りがある場合には、その旨を表示した後、マクロを終了 If NoAddress <> "" Then NoAddress = NoAddress & "においてセル番号として規定されている値は、セル番号" If InStr(NoAddress, "PositColumn = ") > 0 Then _ NoAddress = Replace(NoAddress, "セル番号", "セル番号や列番号") MsgBox "本マクロのVBAの構文中の以下の部分" & Chr(13) & Chr(13) & NoAddress & _ "として使用出来ない値であるため、このままではマクロを実行出来ません。" & Chr(13) & _ "マクロを実行を中止致しますので、上記の部分におけるアドレス番号を正しいものに修正して下さい。" _ , vbExclamation, "無効なアドレス番号" GoTo labelE End If '駅数のデータの取得及び確認 With Sheets(mySheet) t = .Range(NumStCell).Value '駅数 If Not IsNumeric(t) Then GoTo label1 If t <> Int(t) Or t < 1 Then GoTo label1 ※まだ途中なのですが、回答欄に入力可能な文字数を超えてしまいますので、残りは又後で投稿させて頂きます。

関連するQ&A

  • excel vba でtextboxの色、線を消す

    excel VBA の中でtext boxを作成しその中に文字を転記します。その際中の文字だけを表示し塗りつぶしなし、,線なしにしたいのですが何か方法はありませんか。手動で、図形書式の設定の、塗りつぶしなし,線なし、にすればできますが、次に作成するともとに戻ってしまいます。 コードは、下記のコードです。 dim temp as shape t = worksheets("ダイヤ").range("q93").value for j = 73 to t step 1'駅数の数NEXT m = worksheets("ダイヤ").range("f110").value’表示位置調整 k = worksheets("ダイヤ").cells(j + m.17).value’表示位置取得 set temp = worksheets("ダイ ヤ ").shapes.addtextboxmsotextorientationhorizontal.32,k,65,17)’textbox作成 temp. textframe.characters.text = worksheets("ダイヤ").cells(j,15).value、駅名転記 next j このコードで現在textboxを作成その中に文字を転記できますが、ボックスも表示されされてしまいま す、ボックスは消し、文字だけ表示することはできませんか。 何方か教えて頂けませんか。

  • excel VBA で条件の設定方を教えて下さい。

    今、斜線を引きその斜線データの最初のセルに数値で(1とか3とかの数値の)条件をつけて置き、その条件で、太さ、色等を変えて斜線を引きたいのですがうまくいきません。何方か教えて頂けませんか。 --------------------- dim myrange as range workheets("補助計算").range("c8:c47").value = worksheets("時刻").range("c8:c47").value workheets("補助計算").range("g8:h47").value = worksheets("時刻").range("g8:h47").value with worksheets("時刻")     v=worksheets("時刻").range("m2").value+12'描画本数     for i = 12 to v step 1'設定可能本数50本 set myrage = worksheets("補助計算").range("t3:t47") myrange.value = .range(.cells(3,i),.cells(48,i)).value for cnt = 75 to 113 step 2 e = worksheets("ダイヤ").cells(cnt,10).value       f = worksheets("ダイヤ").cells(cnt,11).value       g = worksheets("ダイヤ").cells(cnt+1,10).value       h = worksheets("ダイヤ").cells(cnt+1,11).value with worksheets("ダイヤ").shapes.addline(e,f,g,h) .line.weight = 1.1 .line.forecolor.rgb = vbblue end with next cnt next i end with ----------------------- 上記コードで、斜線が何本か引かれます、その際、データ元のセルに数値の条件、例えば、1 とか3とかの数値を入力されているときは、それによって、斜線の色、又は線の太さをかえたいのですが、指定の仕方は、時刻シートの時刻の上欄セルに、線の指定のセル、太さ指定のセルに別々に指定おき、それを参照して、線の色、太さをかえたいのですが、いろいろ試みましたがうまくいきません。上記コードにどのように追加コードをすればよいか何方か教えていただけませんか。できれば、線の色は3色以上設定できればありがたいです。、

  • EXCEL VBA SetFocus について教え

    ComboBox3 で郵便番号 住所 を選択して TextBox8 に表示 その後番地等を記入するため Private Sub ComboBox3_AfterUpdate() '郵便番号 住所 Workbooks("*****.xls").Activate Worksheets("**").Activate With UserForm7 No = .TextBox1.Value .TextBox7.Value = Mid(.ComboBox3.Text, 1, 8) Cells(No + 1, 7).Value = Mid(.ComboBox3.Text, 1, 8) '郵便番号 .TextBox8.Value = Mid(.ComboBox3.Text, 10) '住所 Cells(No + 1, 8).Value = .TextBox8.Value .ComboBox3.Visible = False .TextBox8.SetFocus .TextBox8.TabIndex = 4 .TextBox8.Text = Mid(.TextBox8.Text, 1) End With End Sub 上のコードで TextBox8 の テキストの最後にカーソルを移動したいのですが TextBox8 に カーソルは現れません。(UserForm7の最初のTextBox1にフォーカスが移る) UserForm8 にも 同様なコードが有りますがこちらは期待どうり動作します。 タブオーダーとかの違いは有りますが関係するのでしょうか  よろしくお願いします。

  • VBAのフォームでTextBoxがいっぱいある時

    Microsoft Excel 2000 for VBAのフォーム機能を使用して TextBox?に値が入力したらシートの指定したセルへ値が入るようにしたいんですが、 TextBoxがいっぱいあるため、以下のように非常に長いプログラムになってしまいました。 Private Sub TextBox1_Change() Sheets(sheetname).Cells(1, 横位置).Value = TextBox1.Value End Sub TextBox2~29は繰り返し Private Sub TextBox30_Change() Sheets(sheetname).Cells(30, 横位置).Value = TextBox30.Value End Sub 上手く配列化なんかでまとめる方法がありましたらアドバイスください。

  • TextBox.2 に Vlookupを入れる記述を教えて下さい。

    VBA初心者です。見よう見真似で売上伝票を作っています。 TextBox1には入力したコードをSheet2B1に書き込みたいです。 TextBox2にはTextBox1に入力したコードを見てVlookupのように、 商品リストから参照し、TextBox2に反映させたいです。 自分で作成してみたのですが、全く動きませんでした。 是非教えて下さい。宜しくお願い致します。 Private Sub CommandButton1_Click() With Worksheets("Sheet2") .Range("B1") = TextBox1.Text End With With Worksheets("商品リスト") TextBox2.Text = Application.WorksheetFunction.VLookup(Val(TextBox1.Value), RangeA, 2, False) End With End Sub

  • VBA ステートメントをまとめたい

    OSはXP Excelは2003を使用しています。 下記は組んだマクロの一部ですが、 ComboBoxが20まであるので、大変長いステートメントになってしまうので、 withの中を何とかまとめられないかと思い、こちらで教えて頂きたく書き込みました。 説明不足のところは追記致しますので、 何卒、よろしくお願い致します。 With ws 'Cells(行,列)  If ComboBox1 <> "" Then Cells(i + 1, 1) = TextBox1.Value '日付 Cells(i + 1, 2) = TextBox2.Value '伝票No. Cells(i + 1, 24) = TextBox3.Value '郵便番号 Cells(i + 1, 25) = TextBox4.Value '住所 Cells(i + 1, 3) = TextBox5.Value '社名 Cells(i + 1, 4) = TextBox6.Value '担当者名 Cells(i + 1, 18) = TextBox601.Value '税抜合計 Cells(i + 1, 19) = TextBox602.Value '消費税 Cells(i + 1, 20) = TextBox603.Value '合計 Cells(i + 1, 22) = TextBox701.Value '備考 Cells(i + 1, 23) = TextBox702.Value '未定 '------------------------------------------------------ Cells(i + 1, 6) = ComboBox1.Value '商品コード Cells(i + 1, 7) = TextBox11.Value 'メーカー名 Cells(i + 1, 8) = TextBox12.Value 'ModelNo. Cells(i + 1, 9) = TextBox13.Value '品名(英 Cells(i + 1, 10) = TextBox14.Value '品名(日 Cells(i + 1, 11) = TextBox15.Value '仕上(英 Cells(i + 1, 12) = TextBox16.Value '仕上(日 Cells(i + 1, 13) = TextBox17.Value '単価 Cells(i + 1, 14) = TextBox18.Value '掛け率 Cells(i + 1, 15) = TextBox19.Value '売価 Cells(i + 1, 16) = TextBox20.Value '数量 Cells(i + 1, 17) = TextBox21.Value '小計 Cells(i + 1, 21) = TextBox22.Value '社内コメント '---------------------------------------------------- '---------------------------------------------------- If ComboBox2 <> "" Then Cells(i + 2, 1) = TextBox1.Value '日付 Cells(i + 2, 2) = TextBox2.Value '伝票No. Cells(i + 2, 24) = TextBox3.Value '郵便番号 Cells(i + 2, 25) = TextBox4.Value '住所 Cells(i + 2, 3) = TextBox5.Value '社名 Cells(i + 2, 4) = TextBox6.Value '担当者名 Cells(i + 2, 18) = TextBox601.Value '税抜合計 Cells(i + 2, 19) = TextBox602.Value '消費税 Cells(i + 2, 20) = TextBox603.Value '合計 Cells(i + 2, 22) = TextBox701.Value '備考 Cells(i + 2, 23) = TextBox702.Value '未定 '------------------------------------------------------ Cells(i + 2, 6) = ComboBox2.Value '商品コード Cells(i + 2, 7) = TextBox31.Value 'メーカー名 Cells(i + 2, 8) = TextBox32.Value 'ModelNo. Cells(i + 2, 9) = TextBox33.Value '品名(英 Cells(i + 2, 10) = TextBox34.Value '品名(日 Cells(i + 2, 11) = TextBox35.Value '仕上(英 Cells(i + 2, 12) = TextBox36.Value '仕上(日 Cells(i + 2, 13) = TextBox37.Value '単価 Cells(i + 2, 14) = TextBox38.Value '掛け率 Cells(i + 2, 15) = TextBox39.Value '売価 Cells(i + 2, 16) = TextBox40.Value '数量 Cells(i + 2, 17) = TextBox41.Value '小計 Cells(i + 2, 21) = TextBox42.Value '社内コメント End If End If

  • このVBA、もうちょっとシンプルにできないですか?

    自力でVBAを書いてみたのですが、長くなってしまいました。 もうちょっとシンプルにするアイディアがあればお願いします。 やりたいことは、 (1)ユーザーフォームのテキストボックス内が空欄だったら「無視」 (2)テキストボックスの中が空欄でなければ「書き込み」 以上のことをやりたいのですが、テキストボックスが6種類あるので単純に記述すると結構長くなってしまいました。 特に問題がなければ、その旨をお願いします。 If TextBox1 = "" Then If TextBox2 = "" Then If TextBox3 = "" Then If TextBox4 = "" Then If TextBox5 = "" Then If TextBox6 = "" Then MsgBox ("得点が入力されていません。") ElseIf TextBox6 <> "" Then Sheets("総合(得点)").Cells(t + 9, u) = TextBox6.Value End If ElseIf TextBox5 <> "" Then Sheets("総合(得点)").Cells(t + 8, u) = TextBox5.Value ElseIf TextBox6 <> "" Then Sheets("総合(得点)").Cells(t + 9, u) = TextBox6.Value End If End If ElseIf TextBox4 <> "" Then Sheets("総合(得点)").Cells(t + 7, u) = TextBox4.Value If TextBox5 <> "" Then Sheets("総合(得点)").Cells(t + 8, u) = TextBox5.Value If TextBox6 <> "" Then Sheets("総合(得点)").Cells(t + 9, u) = TextBox6.Value End If End If End If ElseIf TextBox3 <> "" Then Sheets("総合(得点)").Cells(t + 6, u) = TextBox3.Value If TextBox4 <> "" Then Sheets("総合(得点)").Cells(t + 7, u) = TextBox4.Value If TextBox5 <> "" Then Sheets("総合(得点)").Cells(t + 8, u) = TextBox5.Value If TextBox6 <> "" Then Sheets("総合(得点)").Cells(t + 9, u) = TextBox6.Value End If End If End If End If ElseIf TextBox2 <> "" Then Sheets("総合(得点)").Cells(t + 5, u) = TextBox2.Value If TextBox3 <> "" Then Sheets("総合(得点)").Cells(t + 6, u) = TextBox3.Value If TextBox4 <> "" Then Sheets("総合(得点)").Cells(t + 7, u) = TextBox4.Value If TextBox5 <> "" Then Sheets("総合(得点)").Cells(t + 8, u) = TextBox5.Value ・ ・ ・ こんな感じで規則的に記述しただけです。(文字数が多いので最後は省略しました) 段差がなくて見づらいですが、宜しくお願いします。

  • VBA  コードをスマートに

    下記のコードをスマートにしたいのですが どのようにすれば いいですか? アドバイスをお願いします。 Worksheets("20年5月").Cells(2, 6).Value = Worksheets("20年4月").Cells(i, 6).Value Worksheets("20年6月").Cells(2, 6).Value = Worksheets("20年5月").Cells(i, 6).Value Worksheets("20年7月").Cells(2, 6).Value = Worksheets("20年6月").Cells(i, 6).Value Worksheets("20年8月").Cells(2, 6).Value = Worksheets("20年7月").Cells(i, 6).Value Worksheets("20年9月").Cells(2, 6).Value = Worksheets("20年8月").Cells(i, 6).Value Worksheets("20年10月").Cells(2, 6).Value = Worksheets("20年9月").Cells(i, 6).Value Worksheets("20年11月").Cells(2, 6).Value = Worksheets("20年10月").Cells(i, 6).Value Worksheets("20年12月").Cells(2, 6).Value = Worksheets("20年11月").Cells(i, 6).Value Worksheets("21年1月").Cells(2, 6).Value = Worksheets("20年12月").Cells(i, 6).Value Worksheets("21年2月").Cells(2, 6).Value = Worksheets("21年1月").Cells(i, 6).Value Worksheets("21年3月").Cells(2, 6).Value = Worksheets("21年2月").Cells(i, 6).Value

  • ユーザーフォームをWorksheet上で表示

    数日前、このカテゴリで相談した事の続きです。 以前の相談は、次の通りです。 http://okwave.jp/qa/q8892460.html この相談の中で出来たことは 1 ユーザーフォームを保存終了 2 Worksheet上にボタンを作成、そのボタンをクリックでユーザーフォームを表示 以上のことはできました。 作成したコードは次のとおりです。   '// Private Sub UserForm_Initialize() With Worksheets("Sheet1")  TextBox1 = .Cells(1, 1).Value  TextBox2 = .Cells(2, 1).Value TextBox3 = .Cells(3, 1).Value TextBox4 = .Cells(4, 1).Value TextBox5 = .Cells(5, 1).Value ).Value End With End Sub Private Sub UserForm_Terminate() With Worksheets("Sheet1")  .Cells(1, 1).Value = TextBox1  .Cells(2, 1).Value = TextBox2 .Cells(3, 1).Value = TextBox3 .Cells(4, 1).Value = TextBox4 .Cells(5, 1).Value = TextBox5 End With End Sub '// Private Sub cmdsyuuryo_Click() Unload Me End Sub Private Sub UserForm_Click() Myform.Show vbModeless End Sub そこで質問です。 現在Worksheet上にボタンを作成、クリックしてユーザーフォームを表示しているの を、WorksheetのセルA1(名前を記述してある)をクリックするだけでユーザーフォー ムを表示する方法はありませんか? ユーザーフォームの保存先は「Sheet1」のA1からA5までです。 できれば、この設定で具体的なコードの記述をお願いします。 Excel2013です。 よろしくお願いします。

  • vba変数のファイル名

    Cells(2, 3)にjを変数として、j.txtと書きたいのですが上手くいきません。 わかる方教えてください。 コードは以下のようになっています。よろしくお願いします。 Dim j As Integer For j = 1 To 8760 a = ThisWorkbook.Worksheets("Sheet2").Cells(j, "A").Value Worksheets("Sheet1").Range("1:26").Insert Worksheets("Sheet1").Cells(1, 1) = "void brightdata sky_dist" Worksheets("Sheet1").Cells(2, 1) = 7 Worksheets("Sheet1").Cells(2, 2) = "corr" Worksheets("Sheet1").Cells(2, 3) = " & j & ".txt” Next j