Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 11 Home : Excel 2016)
ListBoxで左寄せの文字の桁を合わせたい
投稿日時: 24/05/24 14:49:14
投稿者: shimoichimabu

ListBoxの文字列を
 
5%   →  5 %
10%  → 10 %
12%  → 12 %
      ↑数字の桁を合わせ、数字と%の間に半角スペース1つ付ける
のようにしたいです。
 
Format(数字,"00 %") だと 05 % となり見えづらいです。
どのようにしたらよろしいでしようか?
 

投稿日時: 24/05/24 14:58:28
投稿者: shimoichimabu

追伸
 
数字は2桁の整数です。値は文字列です。
例. 5% 15% 99% ・・・・

回答
投稿日時: 24/05/24 15:26:49
投稿者: hatena
投稿者のウェブサイトに移動

下記でどうでしょう。
 

Format(Format("数字,"0 %"),"@@@@")

投稿日時: 24/05/24 16:05:17
投稿者: shimoichimabu

hatenaさん回答ありがとうございます。
 
後出しで申し訳ないですが、
ListBoxが等幅フォントですと、hatenaさんが提言されたFormat(Format("数字,"0 %"),"@@@@")で
ピッタリ揃いました。
実は現在、私がしようしているListBoxのフォントは Meiryo UI を使用しているため、
当然ですが、ピッタリと揃わないです。
「数字と%の間に半角スペース1つ付ける」と申しましたが、
半角2つ付けると、何とか揃います。
そこで、"@@@@" → "@@@@@" にしましたが、変化がなく揃いません。
どのようにしたら宜しいでしようか?
 
 
 

回答
投稿日時: 24/05/24 16:21:55
投稿者: hatena
投稿者のウェブサイトに移動

shimoichimabu さんの引用:
「数字と%の間に半角スペース1つ付ける」と申しましたが、
半角2つ付けると、何とか揃います。

 
そういうことなら、下記でどうですか。
 
Format(Format(数字, "0 %"), "@@@@@")

投稿日時: 24/05/24 16:36:13
投稿者: shimoichimabu

hatenaさん回答ありがとうございます。
 
>そういうことなら、下記でどうですか。
Format(Format(数字, "0 %"), "@@@@@")
 
すでに
「"@@@@" → "@@@@@" にしましたが、変化がなく揃いません。」
と、申しあげましたが、@を4つから@を5つにしましたが、@が4つの時と
同じでした。

回答
投稿日時: 24/05/24 17:17:12
投稿者: hatena
投稿者のウェブサイトに移動

あら、修正前の式をコピーしてしまいました。
 
下記でどうですか。
 
Format(Format(数字, "0 %"), "@@@@@")
 
0と%の間に半角スペースを2つ挿入してください。

投稿日時: 24/05/24 20:45:38
投稿者: shimoichimabu

hatenaさん回答ありがとうございます。
 
下記のコードで確認しました。
              ↓半角スペース2つ
MsgBox Format(Format("5%", "0 %"), "@@@@@") & vbCr & Format(Format("15%", "0 %"), "@@@@@")
 
揃わなかったです。
 

投稿日時: 24/05/24 21:28:53
投稿者: shimoichimabu

今回、投稿する前は
 
For N = 1 To ListBox.ListCount
 
    値引率 = Trim(ListBox.List(N - 1, 7))
               
    If Len(値引率) = 2
        ListBox.List(N - 1, 7) = Space(2) & Format(値引率, "0 %")
    ElseIf Len(値引率) = 3 Then
        ListBox.List(N - 1, 7) = Format(値引率, "0 %")
    End If
Next
 
で行っていました。とりあえずは、見た目にも揃っていました。
ただ、あまりにもコードが冗長なので、もっとスッキリしたコードがないものかと
思い、投稿させてもらいました。

回答
投稿日時: 24/05/24 21:56:08
投稿者: hatena
投稿者のウェブサイトに移動

> 「数字と%の間に半角スペース1つ付ける」と申しましたが、
> 半角2つ付けると、何とか揃います。
 
と言われたので、それに合わせて回答しました。
 
等幅でないプロポーショナルフォントで、スペースできっちり揃えるのは難しいですね。
 
きっちり揃えたいなら、等幅フォントを使えばいいのでは。
Meiryo UIに似た等幅フォントを探してみてはどうですか。
 
下記のようなものを見つけました。
 
令ラボ | 等幅メイリオ「MeiryoKe_Console」フォントをWindows10にインストールしました
https://rei-labo.com/meiryo-console/

回答
投稿日時: 24/05/24 22:03:18
投稿者: WinArrow

プロポーショナルフォントh、
文字によって、文字幅が異なる仕様になっています。
半角スペースの文字幅が数字より少ないようです。
 
特に先頭の1桁目を全角スペースにすることで対応できると思います。
 
試してみてください
 

With Me.ListBox1
    .AddItem Right(" " & Format("1%", "0 %"), 4)
    .AddItem Right(" " & Format("10%", "0 %"), 4)
    .AddItem Right(" " & Format("25%", "0 %"), 4)
End With
 
 

投稿日時: 24/05/24 22:49:56
投稿者: shimoichimabu

hatenaさん回答ありがとうございます。
 
>「数字と%の間に半角スペース1つ付ける」と申しましたが、
> 半角2つ付けると、何とか揃います。
 
失礼しました。先頭に半角スペース2つの間違いでした。
 
WinArrowさん回答ありがとうございます。
 
With Me.ListBox1
    .AddItem Right(" " & Format("1%", "0 %"), 4)
    .AddItem Right(" " & Format("10%", "0 %"), 4)
    .AddItem Right(" " & Format("25%", "0 %"), 4)
End With
 
うまくいきました。
Right関数を使うこと、思いつかなかったです。
これですと、If文を使うことなく、すっきりしたコードになりました。