質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

Q&A

解決済

1回答

303閲覧

フォントサイズを変更しても縦書きテキストボックスの左右の中央に文字が来るようにしたい

退会済みユーザー

退会済みユーザー

総合スコア0

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

0グッド

0クリップ

投稿2023/08/09 05:32

実現したいこと

可能な限りWidthの値をフォントサイズギリギリのままで、タイトルの要望を実現したい

前提

ハガキの宛名面をレポートで作成しています。文字数や他のフィールドの有無によってテキストボックスのフォントサイズ・高さ・上位置・左位置を変更するコードを記述しています。
社名+御中がフィールドは文字数によってフォントサイズが27~17まで増減します。
Widthは可能な限り余白が発生しないように、各フォントサイズギリギリに設定しています。

発生している問題・エラーメッセージ

Leftを固定すると、フォントサイズが小さくなればなるほど左にずれてしまいます。
イメージこんな感じです。
27Ptの時
17Ptの時

試したこと

こちらのサイトを参考に、縦書きをいいえにしたテキストボックスを配置しましたが、文字配置が不自由になるため断念しました。
フォントサイズによってLeftまたはWidthを変更することで思い通りの配置に出来ましたが、コード短縮の為、可能であればLeft・Widthは固定したい(Left・Topはテキストボックスの初期位置として固定しておきたい、Widthは文字がテキストボックスをはみ出した時に2行になることを避けるために広げたくない)ので、別の方法をご存じであればご教示願います。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

テキストボックスは詳細セクションに配置されている。
テキストボックス名は「txt社名」とする。
上記の仕様だとして、詳細セクションのフォーマット時のイベントプロシージャに下記のコードを記述すればいいでしょう。

vba

1Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer) 2 Dim ctlW As Long, txtW As Long 3 With Me.txt社名 4 Me.FontName = .FontName 5 Me.FontSize = .FontSize 6 ctlW = .Width 7 txtW = Me.TextWidth("株") 8 .RightMargin = (ctlW - txtW) / 2 9 End With 10End Sub

投稿2023/08/09 06:33

hatena19

総合スコア34053

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2023/08/09 07:38

回答ありがとうございます。 (テキストボックスの幅+実際の文字の幅の差)/2の分だけ、テキストボックスの左側に余白を作る、という考えであっていますでしょうか? この場合、最初に設定したLeft、Widthはフォントサイズに合わせて変更しない方がよいでしょうか?
hatena19

2023/08/09 08:20

「左側に余白を作る」ではなく「右側に余白を作る」ですね。 「縦書き」は「はい」に設定してあるのですよね。 フォントサイズを変更しても、テキストボックスの中央に配置するコードになります。 > この場合、最初に設定したLeft、Widthはフォントサイズに合わせて変更しない方がよいでしょうか? 質問では「可能であればLeft・Widthは固定したい」とのことでしたので、そのつもりで回答しましたが。 何か不都合がありましたか。
退会済みユーザー

退会済みユーザー

2023/08/16 00:20

返信が遅くなってしまい申し訳ありません! rightmarginなので右余白ですね、失礼致しました。 Widthを固定したい、というのは例えばフォントサイズが27ならWidthは1.16cm、フォントサイズが20なら1cmというように、フォントサイズ毎のWidthの数値を予め決めておきたい、という意味でした!でもこれだとLeftを動かさざるを得ないはずなので矛盾していますね。混乱させてしまい申し訳ありません。 hatena様の回答はWidthが2cmのテキストボックスがあったとして、フォントサイズが30でも10でもWidthは2cmのまま変わらず、テキストボックスの幅-文字自体の幅÷2 を右余白として設定する、という考えで合っておりますでしょうか?
hatena19

2023/08/16 01:01

> hatena様の回答はWidthが2cmのテキストボックスがあったとして、フォントサイズが30でも10でもWidthは2cmのまま変わらず、テキストボックスの幅-文字自体の幅÷2 を右余白として設定する、という考えで合っておりますでしょうか? はい、そうです。 もし、テキストボックスのWidthを変更したらそれに合わせてLeftも変更する必要があるので、いろいろ面倒になります。また、変更前のWidthやLeftの値を保存しておく必要もあります。 それに比べて余白を調整する方法はシンプルになります。
退会済みユーザー

退会済みユーザー

2023/08/16 04:00 編集

返信ありがとうございます。理解しました。 もう一つ質問なのですが、このコードでは txtW = Me.TextWidth("株") で株という文字の幅を測っていると思うのですが、社名に株が含まれていない場合を想定するならどのように記述すればよいでしょうか?特定の文字ではなく、一番大きい文字の幅を取るといったことは可能でしょうか?
退会済みユーザー

退会済みユーザー

2023/08/16 07:33

"株"ではなく、幅を調べたい文字列であれば何でも良いのでしょうか?
hatena19

2023/08/16 15:10

フォントにもよると思いますが、全角文字ならたいてい同じ幅だと思います。 気になるなら、ループ処理で一文字ずつ幅を調べて最大のものを採用する処理を追加することになりますが、そこまでする必要性はないと思います。
退会済みユーザー

退会済みユーザー

2023/08/16 23:27

提示のコードの"株"の部分はデータに含まれていない文字でも問題ないですか?
hatena19

2023/08/17 02:13

プロポーショナルフォントだと文字によって幅がかわる可能性があるので、等幅フォントを使うようにすればいいでしょう。 例えば、 「MS P明朝」はプロポーショナルフォント 「MS 明朝」は等幅フォント
退会済みユーザー

退会済みユーザー

2023/08/17 03:52

ありがとうございます。 等幅フォントでやってみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問