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

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

ただいまの
回答率

89.12%

vba Space関数について

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 2,206

pipi

score 189

あけましておめでとうございます。pipiでございます。
本年も宜しくお願い致します。

リストボックス内の数字を右揃えにするため、Space()関数を使い自作の関数を作成したが、
綺麗に右揃えになってくれません。微妙に中央揃えになっている気がします。。。

'Space挿入関数

'<引数について>
'strName:対象となる文字列
'intMojiCount:スペース挿入後の全体の文字数
'isTop:先頭から処理する(true)

Public Function FormatAddSpace(ByVal strName As String, ByVal intMojiCount As Integer, _
    Optional ByVal isTop As Boolean = True) As String

    Dim n As Integer

    n = intMojiCount - Len(strName) '全体の文字数から対象となる文字列を引いた数分、スペース挿入
    If isTop = True Then
        strName = Space(n) & strName '先頭にスペース挿入
    End If

    FormatAddSpace = strName
End Function
'リストボックス設定抜粋コード

With ListBox1
        .Font.Size = 10
        .ColumnCount = 7
        .ColumnWidths = "50;100;80;80;100;30;70"
        .TextAlign = fmTextAlignLeft
        .Font.Name = "MS ゴシック"

        Dim i As Long
        Dim LastRow As Long

        LastRow = Range("A600").End(xlUp).Row
        For i = 2 To LastRow
            If Cells(i, 8).Value <> 1 Then
                .AddItem FormatAddSpace(Cells(i, 1).Value, 4) '商品ID、全体の文字数を4としてFormatAddSpace関数を呼び出す。
                .List(.ListCount - 1, 1) = Cells(i, 2).Value
                .List(.ListCount - 1, 2) = Cells(i, 3).Value
                .List(.ListCount - 1, 3) = Cells(i, 4).Value
                .List(.ListCount - 1, 4) = FormatAddSpace(Cells(i, 5).Value, 7) '単価、全体の文字数を7としてFormatAddSpace関数を呼び出す。
                .List(.ListCount - 1, 5) = Cells(i, 6).Value
                .List(.ListCount - 1, 6) = Cells(i, 7).Value
            End If
        Next
    End With

イメージ説明

どなたか、アドバイス、ご教授願います。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+1

        .Font.Name = "MS ゴシック"
で"MS ゴシック"を有効に等幅フォントにしてますが、メーカー名の”KOKOYO”半角6文字が全角4文字の巾と同じになっており等幅フォントになってないようです。
        .Font.Name = "Arphic Kanteiryu JIS"
等、特徴的なフォントを使い、フォントの変更が全画面に有効になってるか確認してみたらいかがでしょうか。

       strName = Space(n) & strName '先頭にスペース挿入

       strName = Left(”............”,n) & strName '先頭に.挿入

に変えるとどこが原因で文字ずれが出てるか判るかもしれません。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/01/02 09:48

    アドバイスありがとうございます。

    一体、等フォントとは一体なんなのでしょうか?
    初めて聞いた言葉です。

    キャンセル

  • 2016/01/02 10:16

    等フォントでなく等幅フォントです。
    https://ja.wikipedia.org/wiki/%E7%AD%89%E5%B9%85%E3%83%95%E3%82%A9%E3%83%B3%E3%83%88
    にも出てますので正式な言葉のはずですが。
    プロポーショナルフォントですと”IIII”と”ZZZZ”で文字の巾が違ってきますが、等幅フォントですと同一になります。
    等幅フォントにしないと文字数をそろえても見た目が揃いません。
    例として
    MS ゴシック  等幅フォント
    MS Pゴシック プロポーショナルフォント

    キャンセル

0

単に、等幅フォントを使っていないからではないでしょうか。
プロポーショナルフォントだと、文字数を合わせても駄目です。

見た目を右揃えにしたいのなら、HorizontalAlignmentプロパティをxlRightにセットするのが良いかと。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 89.12%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる