半角チルダ

ExcelVBA、その他。
覚え書きや、補足資料などのスクラップブック。
end-u(1037781)

■[Justify メソッド]

2008-04-18 18:00:00 | VBA Tips
『対象セル範囲内の文字列を、そのセル範囲に合わせて割り付けます。』とヘルプにあります。
一般機能で言えば、[編集]-[フィル]-[文字の割付]です。
文章をシートに配置する時に、セル範囲、というかセルの列幅に合わせて(見た目の)行末を揃え、複数行に渡って配置調整してくれる。...というような機能のようです。
テキストボックスを使えばいいのでは?と思うのであまり使った事はないですが、どうなのでしょうね。

実際にはちょっとした制限があり、
・256文字以降は切り捨てられる。
・改行文字が無視される。
・行頭のスペースが無視される。
ようです。

一度このメソッドを使ってレスを入れた事がありますが、その時は上記制限について改行文字の対応しかしていませんでした。なので今回改良版を考えてみました。
経由でもいいのでForms.TextBoxを使うと、改行コードがvbCrLfになるので戻す必要がある時に便利かもしれません。

'UserForm Module
Option Explicit

Private Sub CommandButton1_Click()
  Dim flg As Boolean
  Dim chk As Boolean
  Dim s() As String
  Dim tmp As String
  Dim n  As Long
  Dim i  As Long

  On Error GoTo errHndlr
  With ActiveSheet
    n = .Cells(.Rows.Count, 1).End(xlUp).Row
    If Not IsEmpty(.Cells(n, 1).Value) Then n = n + 1
    Application.DisplayAlerts = False
    s = Split(Me.TextBox1.Text, vbLf)
    For i = 0 To UBound(s)
      Do
        flg = Len(s(i)) > 254
        '[  ]内は半角|全角スペース
        chk = s(i) Like "[  ]*"
        If flg Then
          tmp = Mid$(s(i), 255)
          s(i) = Left$(s(i), 254)
        End If
        If chk Then s(i) = "''" & s(i)
        With .Cells(n, 1)
          .Value = s(i)
          .Justify
        End With
        If chk Then .Cells(n, 1).Value = Mid$(.Cells(n, 1).Value, 2)
        n = .Cells(.Rows.Count, 1).End(xlUp).Row
        If flg Then
          s(i) = .Cells(n, 1).Value & tmp
        Else
          Exit Do
        End If
      Loop
      n = n + 1
    Next
    'vbCr消してもいいけど残しておけば戻す時に使えそう。
    '.Columns(1).Replace What:=vbCr, Replacement:="", LookAt:=xlPart
  End With
  Me.TextBox1.Text = ""
errHndlr:
  Application.DisplayAlerts = True
End Sub
'-------------------------------------------------
Private Sub CommandButton2_Click()
  Dim s As String
  Dim v

  With ActiveSheet
    With .Range("A1", .Cells(.Rows.Count, 1).End(xlUp))
      v = Application.Transpose(.Value)
      If Not IsArray(v) Then Exit Sub
      .ClearContents
    End With
  End With
  s = Join(v, "")
  Me.TextBox1.Text = s
End Sub


Comment
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする