ワークシート上の数値をメッセージボックスで表示させるため、下記のようなVBAを書きました。
Sub 金額表示()
Dim a As Long, b As Long, c As Long
a = Sheets("logic").Range("P39").Value
b = Sheets("logic").Range("O46").Value
d = Sheets("logic").Range("O44").Value
MsgBox "合計の金額は、" & Format(d, "##,###万円") _
+ Chr(&HD) + Chr(&HA) + "○○は、" & Format(a, "##,###万円") _
+ Chr(&HD) + Chr(&HA) + "○○○○は、" & Format(b, "##,###万円"), vbInformation, "確認"
End Sub
○○部分の文字数や、金額の桁数により、表示される数字の位置ははかなりずれがあります。
これを円で後ろでそろえ統一するような方法はないでしょうか?
出来れば後ろでそろえても○○の部分も頭をそろえておきたいですが、それが無理なら後揃えだけでも結構です。
よろしくお願いします。
A 回答 (6件)
- 最新から表示
- 回答順に表示
No.6
- 回答日時:
> ならば、セル内での右寄せ同様に後ろだけ揃えることは不可能でしょうか?
今までのことは、全て後ろを揃えることについて言っているのです。
MsgBox関数の第一引数であるpromptについての右揃え等の表示位置の機能は
無いのです。全て左から順に表示です。TABが使えるぐらいです。
従って、後ろを揃えるには、等幅フォントを用いて全体の字数合わせるより
方法は無いのです。 「MS ゴジック」だと全角は半角の2倍幅になります。
何故、MsgBox関数に固執するのですか?
後ろをキチット揃えたい気持ちは解りますが・・・
前に言ったようにユーザーフォームを使えば、自由自在になると思いますが、
何故ダメなのですか?
何が何でも、ゼッ~~~ッタイ MsgBoxを使って目的を達成しようとするので
あれば、Win32APIを勉強されたら良いかと思います。
MsgBox関数を実行する前に、当方が最初に書いたようにシステム(OS)における
「メッセージボックス」の「フォント」の種類を取得した後に、「MS ゴジック」
等の「等幅フォント」に変更し、MsgBox を使用後に元のフォント種に戻す
ということをAPIを使ってVBAで実行することだと思います。
しかし、当方の持っている安物のAPIの参考書には、該当する関数は、記載されて
おりません。 出来るかどうかも解りません。 いずれにしても可也難しいです。
繰り返しますが、すんなり諦めてユーザーフォームをお使いになることを
お勧めします。
この回答への補足
何故、MsgBox関数に固執するのか。
理由1.ユーザーの中に未だoffice95を使用している人間が少数ですが存在するのです。したがってユーザーフォームは使えません。
理由2.
私自身がoffice95でマクロを学んだためコントロールツールボックス系はよくわかっていないのです。
どうしても無理であればユーザーフォームではないですがDialogSheetを挿入して作って見ようかと考えています。
いろいろ勝手を申しすみませんでした。
ありがとうございました。
No.5
- 回答日時:
前にも言ったように「文字幅等間隔フォント」でないと無理ですよ。
Web上、連続スペースは、削られてしますますので代わりに、I と H が10個ずつ
ですが、下記を実行してみてください。
数字10個とカンマ10個でもいいですよ。
これでもう カンマの数が違うとそれだけでも、もう右端は揃わないことが
お解りでしょう。
桁数が違う金額に、桁数が同じになる分だけ数字の左側にスペースを補って
テストしてみてください。
Sub test()
MsgBox "IIIIIIIIII" & vbLf & "HHHHHHHHHH"
End Sub
何度もありがとうございます。
なるほど理屈は良くわかりました。
ならば、セル内での右寄せ同様に後ろだけ揃えることは不可能でしょうか?「文字幅等間隔フォント」の設定も自分のPCだけでの設定では無意味なのです。
No.4
- 回答日時:
#2です。
半角の数字にしたいなら
(1)a = "0123456789" を半角のテーブルに
a="0123456789"に変える
(2)台紙的な
k = " " '10桁に設定
を半角のスペースに変える。下記では」Space関数を使用した。
Mid(k, p, 1) = "," をMid(k, p, 1) = ","
と半角に変える。
だけで
他はそのままで動くと思います。やって見てください。
幸いMid関数は、全角ばかりの時は全角で数えた文字数を、半角ばかりの文字列の場合は半角の文字数を返すようですから。
数を10桁まで対応するため
If p = 7 Or p = 3 Then
の7と3のところを修正しました。
Function edt(n)
a = "0123456789"
k = Space(15) '12桁+カンマ3桁に設定
s = n
p = Len(k)
For i = Val(Len(s)) To 1 Step -1
If p = Len(k) - 3 Or p = Len(k) - 7 Or p = Len(k) - 11 Then
Mid(k, p, 1) = ","
p = p - 1
End If
q = (s Mod 10) + 1
'MsgBox Mid(a, q, 1)
Mid(k, p, 1) = Mid(a, q, 1)
p = p - 1
s = Int(s / 10)
Next i
edt = k
' MsgBox k
End Function
'------
Sub test01()
MsgBox "*" & edt(123456788) '頭部スペースを見るため*を添えた
End Sub
この回答への補足
ありがとうございました。
下記のようにやりましたが、数字がすべて同じ桁数ならきちんと後ろもそろうのですが、桁違いだとずれが発生しました。どこが悪いのでしょうか?
Function edt(n)
a = "0123456789"
k = Space(15) '12桁+カンマ3桁に設定
s = n
p = Len(k)
For i = Val(Len(s)) To 1 Step -1
If p = Len(k) - 3 Or p = Len(k) - 7 Or p = Len(k) - 11 Then
Mid(k, p, 1) = ","
p = p - 1
End If
q = (s Mod 10) + 1
'MsgBox Mid(a, q, 1)
Mid(k, p, 1) = Mid(a, q, 1)
p = p - 1
s = Int(s / 10)
Next i
edt = k
' MsgBox k
End Function
Sub test02()
Dim a As Long, b As Long, c As Long
a = Sheet1.Range("A1").Value
b = Sheet1.Range("A2").Value
d = Sheet1.Range("A3").Value
MsgBox "○○○○○は" & edt(a) & "円" _
+ Chr(&HD) + Chr(&HA) + "○○○○○は" & edt(b) & "円" _
+ Chr(&HD) + Chr(&HA) + "○○○○○は" & edt(d) & "円", vbInformation, "確認"
End Sub
No.3
- 回答日時:
後ろを揃えるということは、前後を揃えることになると思いますよ。
フォント種類を等間隔文字(全角が半角の2倍で、スペースも文字と同幅)にしないと
キチ~ット揃えることは、出来ないと思います。
プロポーショナル等フォントはスペースと文字で字幅がそれぞれ違いますので、
右端を揃えるのは出来ないでしょう。
このようなときは、ユーザーフォームを使いましょう。
色も使えるし、配置も自由自在です。
No.2
- 回答日時:
(1)コメントの部分をまず揃えましょう
"合計の金額は、" 7字だから
"○○は、" も"○○は、 " と7字に
"○○○○は、" も"○○○○は、 "と7字にする。
(2)数字を10桁に右揃えにそろえる。
右詰め、3桁ごとカンマ付きの全角文字列にします。
下記コードを参考に。
Function edt(n)
a = "0123456789"
k = " " '10桁に設定
s = n
p = Len(k)
For i = Val(Len(s)) To 1 Step -1
If p = 7 Or p = 3 Then
Mid(k, p, 1) = ","
p = p - 1
End If
q = (s Mod 10) + 1
'MsgBox Mid(a, q, 1)
Mid(k, p, 1) = Mid(a, q, 1)
p = p - 1
s = Int(s / 10)
Next i
edt = k
' MsgBox k
End Function
'------
Sub test01()
MsgBox "*" & edt(12345)
End Sub
(1)と(2)の両者を、Msgboxの文字列の中で組み合わせてください。
夜遅いので省略で失礼。
No.1
- 回答日時:
コントロールパネルの中の「画面」を開き、「デザイン」タブで、「指定する部分」を
「メッセージボックス」にして、「フォント」を「MS ゴジック」にし、[適用]、[OK]
します。
これで、下記コードを実行すると前後が、キチット揃うと思います。
中間の間隔は、27の値で調整します。
これで如何でしょうか。
Sub 金額表示()
Dim a As Long, b As Long, c As Long
Dim x As Integer, y As Integer, z As Integer
Const xm = "合計の金額は、" ' <--- 全部全角
Const ym = "○○は、" ' <--- 〃
Const zm = "○○○○は、" ' <--- 〃
a = Sheets("logic").Range("P39").Value
b = Sheets("logic").Range("O46").Value
c = Sheets("logic").Range("O44").Value
x = 27 - LenB(xm) - LenB(StrConv(Format(c, "##,###万円"), vbFromUnicode))
y = 27 - LenB(ym) - LenB(StrConv(Format(a, "##,###万円"), vbFromUnicode))
z = 27 - LenB(zm) - LenB(StrConv(Format(b, "##,###万円"), vbFromUnicode))
MsgBox xm & String(x, " ") & Format(c, "##,###万円") & vbLf & _
ym & String(y, " ") & Format(a, "##,###万円") & vbLf & _
zm & String(z, " ") & Format(b, "##,###万円"), vbInformation, "確認"
End Sub
この回答への補足
ありがとうございました。
これで自分のPCではちゃんと揃いましたが、他人のPCではダメですよね?
他人のPCのせっていによらず、そろえたいのです。
頭と後ろの両方をそろえられなくとも後ろだけでもかまいません。よろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) VBAの指示の内容 昨日こちらでご教示頂いたのですが初心者な為、一つ一つの指示が何をやっているのかわ 2 2022/10/25 18:08
- Excel(エクセル) Excel VBAどこが間違ってますか? 4 2023/07/17 10:04
- Visual Basic(VBA) VBA処理追加 こちらでご教示頂いたのですが回答完了させてしまいましたのでこちらからまた質問させてく 2 2022/10/27 09:57
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 2 2023/05/23 16:28
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 4 2023/05/26 10:43
- Visual Basic(VBA) 稀に1円合いません? Sheet1から金額と個数を貼り付ける下記コードで、金額を切り上げるコードを何 3 2022/09/05 15:11
- Excel(エクセル) マクロで行を追加、削除すると行位置がずれますが、解決方法はありませんか?。 5 2022/05/28 16:03
- Visual Basic(VBA) Excel VBA キーワードから列を取得して、さらに空欄行を非表示にする 3 2022/10/21 22:49
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 6 2022/06/08 12:55
- Visual Basic(VBA) excel vbaでvlooupの変数がわかりません。 7 2022/05/30 09:35
このQ&Aを見た人はこんなQ&Aも見ています
-
好きな人を振り向かせるためにしたこと
大好きな人と会話のきっかけを少しでも作りたい、意識してもらいたい…! 振り向かせるためにどんなことをしたことがありますか?
-
一番最初にネットにつないだのはいつ?
ネットユーザーもいろんな世代が生まれていますが、始めて接続したときのワクワクは同じはず! 人生で一番最初にネットに接続したときの思い出を教えて下さい。
-
2024年に成し遂げたこと
今年も残すところわずか。 皆さんが今年達成したことを教えていただきたいです。 どんな小さなものでも構いません。
-
【選手権お題その1】これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
「出身中学と出身高校が混ざったような校舎にいる夢を見る」「まぶたがピクピクしてるので鏡で確認しようとしたらピクピクが止まってしまう」など、 これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
-
「黒歴史」教えて下さい
若気のいたりでやってしまったけれど、いまとなっては封印したい… そんなあなたの黒歴史を教えて下さい。
-
エクセルVBAで、MsgBox やInputBox は、画面の中央以外に表示させたい。
Excel(エクセル)
-
vbs 文字位置を中央に
Visual Basic(VBA)
-
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
-
4
vbaでmsgboxの位置を指定
PowerPoint(パワーポイント)
-
5
ユーザーフォームを表示中にシートの操作をさせるには
Excel(エクセル)
-
6
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
7
フォントの大きさ
Visual Basic(VBA)
-
8
EXCEL VBAで全選択範囲の解除
Excel(エクセル)
-
9
数式による空白を無視して最終行を取得するマクロ
Excel(エクセル)
-
10
メッセージボックスで1025文字以上を扱う
Visual Basic(VBA)
-
11
VBAでファイルを開くときにファイル名でワイルドカードを使用したいです
その他(プログラミング・Web制作)
-
12
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
13
VBAで既に開いている別アプリケーションのオブジェクトを得る
Visual Basic(VBA)
-
14
エクセルVBAで、条件に一致するセルへ移動
Excel(エクセル)
-
15
msgboxの表示位置
Visual Basic(VBA)
-
16
VBA(エクセル)で自動的にボタンをクリックさせるには
その他(プログラミング・Web制作)
-
17
メッセージボックスを前面に表示させるには?
Visual Basic(VBA)
-
18
メッセージボックスに表示する文字を大きくしたい
Excel(エクセル)
-
19
【VBA】計算結果に小数点第2位までを表示させる方法
Visual Basic(VBA)
-
20
特定の文字を含むシートだけマクロ処理をしたい
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・「みんな教えて! 選手権!!」開催のお知らせ
- ・漫画をレンタルでお得に読める!
- ・「黒歴史」教えて下さい
- ・2024年においていきたいもの
- ・我が家のお雑煮スタイル、教えて下さい
- ・店員も客も斜め上を行くデパートの福袋
- ・食べられるかと思ったけど…ダメでした
- ・【大喜利】【投稿~12/28】こんなおせち料理は嫌だ
- ・前回の年越しの瞬間、何してた?
- ・【お題】マッチョ習字
- ・モテ期を経験した方いらっしゃいますか?
- ・一番最初にネットにつないだのはいつ?
- ・好きな人を振り向かせるためにしたこと
- ・【選手権お題その2】この漫画の2コマ目を考えてください
- ・2024年に成し遂げたこと
- ・3分あったら何をしますか?
- ・何歳が一番楽しかった?
- ・治せない「クセ」を教えてください
- ・【大喜利】【投稿~12/17】 ありそうだけど絶対に無いことわざ
- ・【選手権お題その1】これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
- ・集合写真、どこに映る?
- ・自分の通っていた小学校のあるある
- ・フォントについて教えてください!
- ・これが怖いの自分だけ?というものありますか?
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・10代と話して驚いたこと
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
℃の半角表示
-
半角の『°(単位の度)』
-
お名前(姓)」には「カタカナ(...
-
文章を縦書きにしたとき、数字...
-
半角の×(かける)は?
-
EXCELで、セル内の半角カ...
-
ローマ数字 IV
-
テプラは半角数字が使えますか?
-
2ちゃんねるでアンカーのつけ方
-
エクセルで、JIS関数、ASC関数...
-
TeXで半角中点を入れたいのですが
-
半角の漢字の入力方法
-
隅付き括弧に半角はありますか...
-
小さい「ノ」
-
amazonでのクレジットカード入...
-
英語で「全角」・「半角」、何...
-
メールアドレスの上ハイフン入...
-
エクセルvba カタカナは全角、...
-
エクセル関数で文字列の中のス...
-
EXCEL95 VLOOKUP関数で半角と全角
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
半角の『°(単位の度)』
-
契約書や 公文書・私文書などに...
-
℃の半角表示
-
半角の×(かける)は?
-
EXCELの文字列操作で文字数不足...
-
EXCELで、セル内の半角カ...
-
エクセル関数で文字列の中のス...
-
半角スペース
-
EXCEL95 VLOOKUP関数で半角と全角
-
お名前(姓)」には「カタカナ(...
-
テプラは半角数字が使えますか?
-
問2 次の文中の空欄にあてはま...
-
メールアドレスの上ハイフン入...
-
【VBA】ファイルパスに半角スペ...
-
エクセルで、JIS関数、ASC関数...
-
Excel 文字列の中から数字だけ...
-
Excel2016 検索の窓を常時表示...
-
エクセルで 全角の空白を含む...
-
エクセルでひらがな・漢字はそ...
-
文章を縦書きにしたとき、数字...
おすすめ情報