
ワークシート上の数値をメッセージボックスで表示させるため、下記のような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も見ています
-
見学に行くとしたら【天国】と【地獄】どっち?
みなさんは、一度だけ見学に行けるとしたら【天国】と【地獄】どちらに行きたいですか? 理由も聞きたいです。
-
おすすめの美術館・博物館、教えてください!
美術館・博物館が大好きです。みなさんのおすすめをぜひお聞きしたいです。
-
今の日本に期待することはなんですか?
目まぐるしく、日本も世界も状況が変わる中、あなたが今の日本に期待することはなんですか?
-
コーピングについて教えてください
皆さんはストレスを感じたとき、どのような方法や手段、テクニックで対処していますか?
-
泣きながら食べたご飯の思い出
泣きながら食べたご飯の思い出を教えてください。
-
エクセルVBAで、MsgBox やInputBox は、画面の中央以外に表示させたい。
Excel(エクセル)
-
vbs 文字位置を中央に
Visual Basic(VBA)
-
vbaでmsgboxの位置を指定
PowerPoint(パワーポイント)
-
-
4
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
5
ユーザーフォームを表示中にシートの操作をさせるには
Excel(エクセル)
-
6
msgboxの表示位置
Visual Basic(VBA)
-
7
フォントの大きさ
Visual Basic(VBA)
-
8
メッセージボックスで1025文字以上を扱う
Visual Basic(VBA)
-
9
ExcelVBAのユーザーフォームの中に線を引きたい
Visual Basic(VBA)
-
10
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
11
メッセージボックスを前面に表示させるには?
Visual Basic(VBA)
-
12
VBAでファイルを開くときにファイル名でワイルドカードを使用したいです
その他(プログラミング・Web制作)
-
13
MsgBoxの中にある数字や日付の書式指定をしたい
Visual Basic(VBA)
-
14
VBAのコマンドボタンの文字列の改行方法は?
Visual Basic(VBA)
-
15
VBAでメモ帳にコピペをしたいのですが…
PowerPoint(パワーポイント)
-
16
VBA(エクセル)で自動的にボタンをクリックさせるには
その他(プログラミング・Web制作)
-
17
EXCEL VBAで全選択範囲の解除
Excel(エクセル)
-
18
Excelのセルにユーザー名を表示する方法
Excel(エクセル)
-
19
エクセルVBAで5行目からオートフィルタモードに設定したいたい
Excel(エクセル)
-
20
EXCEL VBA セルに既に入力されている文字に文字を追加する
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・「これはヤバかったな」という遅刻エピソード
- ・初めて自分の家と他人の家が違う、と意識した時
- ・いちばん失敗した人決定戦
- ・思い出すきっかけは 音楽?におい?景色?
- ・あなたなりのストレス発散方法を教えてください!
- ・もし10億円当たったら何に使いますか?
- ・何回やってもうまくいかないことは?
- ・今年はじめたいことは?
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
℃の半角表示
-
契約書や 公文書・私文書などに...
-
EXCELの文字列操作で文字数不足...
-
エクセル関数で文字列の中のス...
-
半角の『°(単位の度)』
-
半角の×(かける)は?
-
EXCELで、セル内の半角カ...
-
エクセルでひらがな・漢字はそ...
-
Excel 文字列の中から数字だけ...
-
テプラは半角数字が使えますか?
-
エクセルで、JIS関数、ASC関数...
-
EXCEL95 VLOOKUP関数で半角と全角
-
メールアドレスの上ハイフン入...
-
ビジネスの文書における、数字...
-
Excel2016 検索の窓を常時表示...
-
半角スペース
-
エクセルでセルの連結の逆
-
お名前(姓)」には「カタカナ(...
-
隅付き括弧に半角はありますか...
-
【VBA】ファイルパスに半角スペ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
℃の半角表示
-
契約書や 公文書・私文書などに...
-
半角の『°(単位の度)』
-
半角の×(かける)は?
-
EXCELの文字列操作で文字数不足...
-
Excel 文字列の中から数字だけ...
-
EXCELで、セル内の半角カ...
-
半角スペース
-
エクセル関数で文字列の中のス...
-
EXCEL95 VLOOKUP関数で半角と全角
-
テプラは半角数字が使えますか?
-
お名前(姓)」には「カタカナ(...
-
メールアドレスの上ハイフン入...
-
【VBA】ファイルパスに半角スペ...
-
Excel2016 検索の窓を常時表示...
-
エクセルでひらがな・漢字はそ...
-
ヘッダー(フッター)の全角・...
-
エクセルで、JIS関数、ASC関数...
-
隅付き括弧に半角はありますか...
-
エクセルで 全角の空白を含む...
おすすめ情報