Office関連

[VBA]桁を揃えてDebug.Printする。

@CallMeKoheiさんのブログの記事に「Excel VBA イミディエイトウインドウで整列!」という記事がありました。

たしかに、イミディエイト ウィンドウで桁を揃えてDebug.Printできたら見やすくて便利かもしれません。

というわけで、早速簡単な処理を考えてみました。

Option Explicit

Public Sub Sample()
  Dim v As Variant
 
  v = Array("abcde", _
            "あいう", _
            "123", _
            "東京都葛飾区", _
            "a")
  DebugPrintPadRight v
  v = Array("北海道網走市稲富", _
            "", _
            "abcdefghijkl", _
            "あいうえおかきくけこ", _
            "0123456789")
  DebugPrintPadRight v
End Sub

Public Sub DebugPrintPadRight(ByVal ary As Variant, _
                              Optional ByVal max_size As Long = 30)
  Dim tmp As String, ret As String
  Dim n As Long, i As Long
 
  For i = LBound(ary) To UBound(ary)
    n = LenB(StrConv(ary(i), vbFromUnicode))
    If max_size < n Then n = max_size
    tmp = StrConv(LeftB(StrConv(ary(i) & Space(max_size - n), vbFromUnicode), max_size), vbUnicode)
    If i = LBound(ary) Then
      ret = tmp
    Else
      ret = ret & vbTab & tmp
    End If
  Next
  Debug.Print ret
End Sub

上記Sampleを実行すると、下図のように文字列の頭が揃った状態でDebug.Printされます。

DebugPrintPad_01

やっていることは単純で、文字列のお尻に空白をくっ付けて、指定したバイト数で頭から切り出すという、よくあるパディング(埋め)処理です。

ただ、日本語を扱う場合だと、半角文字と全角文字が混在になってしまう可能性があるので、「文字列の長さを取得する(Len/LenB関数):Excel VBA|即効テクニック」にあるような方法で文字列の長さを調整しています。

文字列を一つ一つ指定すると処理が面倒になってしまうため、引数として渡すのは配列にしています。

複数の配列を渡して、まとめてDebug.Printしたい場合は、下記のようにCollectionに入れてループを回せば良いかと思います。

Public Sub Sample2()
  Dim colAry As VBA.Collection
  Dim i As Long
  
  Dim ary1 As Variant
  Dim ary2 As Variant
  Dim ary3 As Variant
  Dim ary4 As Variant
  Dim ary5 As Variant
  Dim ary6 As Variant
  
  ary1 = Array("あいう", "abc", "北海道", "123456789")
  ary2 = Array("かきくけこ", "abcdefghjiklmn", "")
  ary3 = Array("", "abcdefghj", "東京都新宿区", "012")
  ary4 = Array("あいうえおかきくけこさしすせそ", "ab", "123456789")
  ary5 = Array("たちつてとなにぬねのはひふへほまみむめも")
  ary6 = Array("あかさたなはまやらわ", "aiueokakikukekosashishuseso", "沖縄県那覇市", "012345678901234567890123456789")
  
  Set colAry = New VBA.Collection
  colAry.Add ary1
  colAry.Add ary2
  colAry.Add ary3
  colAry.Add ary4
  colAry.Add ary5
  colAry.Add ary6
  
  For i = 1 To colAry.Count
    DebugPrintPadRight colAry(i), 10
  Next
End Sub

DebugPrintPad_02

シンプルな処理ですので、実際に上記コードを使う際には、自分の好みに合わせて適当に変更してお使いください。

また、Web検索したところ、海外のサイトで下記のようなWebページも見つけました。

・VBA Tips & Tricks: Aligning Text Output in Variables
http://vbadud.blogspot.jp/2007/04/aligning-text-output-in-variables.html

LSetRSetを使う方法、これもとても面白い方法ですね!

2015/02/25 追記:
お尻を空白で埋めて頭から切り出す処理を書いておいて、逆に頭を空白で埋めてお尻から切り出す処理がないのは尻切れトンボだったので、処理を追加しました。

Public Sub Sample3()
  Dim colAry As VBA.Collection
  Dim i As Long
  
  Dim ary1 As Variant
  Dim ary2 As Variant
  Dim ary3 As Variant
  Dim ary4 As Variant
  Dim ary5 As Variant
  Dim ary6 As Variant
  
  ary1 = Array("あいう", "abc", "北海道", "123456789")
  ary2 = Array("かきくけこ", "abcdefghjiklmn", "")
  ary3 = Array("", "abcdefghj", "東京都新宿区", "012")
  ary4 = Array("あいうえおかきくけこさしすせそ", "ab", "123456789")
  ary5 = Array("たちつてとなにぬねのはひふへほまみむめも")
  ary6 = Array("あかさたなはまやらわ", "aiueokakikukekosashishuseso", "沖縄県那覇市", "012345678901234567890123456789")
  
  Set colAry = New VBA.Collection
  colAry.Add ary1
  colAry.Add ary2
  colAry.Add ary3
  colAry.Add ary4
  colAry.Add ary5
  colAry.Add ary6
  
  For i = 1 To colAry.Count
    DebugPrintPadLeft colAry(i), 20
  Next
End Sub

Public Sub DebugPrintPadLeft(ByVal ary As Variant, _
                             Optional ByVal max_size As Long = 30)
  Dim tmp As String, ret As String
  Dim n As Long, i As Long
 
  For i = LBound(ary) To UBound(ary)
    n = LenB(StrConv(ary(i), vbFromUnicode))
    If max_size < n Then n = max_size
    tmp = StrConv(RightB(Space(max_size - n) & StrConv(ary(i), vbFromUnicode), max_size), vbUnicode)
    If i = LBound(ary) Then
      ret = tmp
    Else
      ret = ret & vbTab & tmp
    End If
  Next
  Debug.Print ret
End Sub

DebugPrintPad_03

引数を追加して、右埋め左埋めを切り替えるようにしても良いかもしれません。

Windows 10 Technical PreviewにインストールしたOffice XP DeveloperでCOMアドインを作ってみた。前のページ

2015年2月の人気記事次のページ

関連記事

  1. Office関連

    Excelのシート上で3Dグラフィックのアニメーションが再生できるようになりました。

    ※ 下記情報はInsider版のExcelを元にしています。バージョン…

  2. Office関連

    Unicodeブロックを元に指定した文字が平仮名なのかカタカナなのか漢字なのかを判別するVBAマクロ…

    以前書いた「ルビ(ふりがな)を一括設定するWordマクロ」記事で使った…

  3. Office関連

    IEサポート終了でVBAマクロはどうなるの?

    ※下記情報は2021年5月時点の情報で、今後状況が変わっていく可能性が…

  4. Office関連

    文字列を指定した文字数で分割するVBA関数

    "01234567890123456789012…"というような長い文…

  5. Office関連

    Outlookを使ってGmail送信を行うVBAマクロ

    下記G Suite アップデート ブログにある通り、今年の6月には“安…

  6. Office関連

    2つの文書を比較するWordマクロ

    先日テキスト比較ソフトの「ちゃうちゃう!」がバージョンアップされたこと…

コメント

  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

Time limit is exhausted. Please reload CAPTCHA.

※本ページはプロモーションが含まれています。

Translate

最近の記事

アーカイブ

PAGE TOP