自動的に「改行」するマクロ

Pocket

世の中には器用な人がいて、Excelをワープロ風に使う人がいます。
セルA1に文を入力し、ある文字数を超えると、続きをセルA2に入力します。
例えば次のような感じです。

X A
1 どこで生れ
2 たかとんと
3 見当がつか
4 ぬ。何でも
5 薄暗いじめ
6 じめした所
7 でニャーニ
8 ャー泣いて
9 いた事だけ
10 は記憶して
11 いる。吾輩

これを手作業でやっているわけです。後から文字を挿入するときは一つ一つずらします。

面白そうなのでマクロを作ってみました。特定のセルが変わったときにマクロを実行する方法を使います。
セルA1:A50の範囲で文字を入力します。
5文字を超えると自動的に5文字でカットし、超えた部分を下のセルにセットします。

Private Sub Worksheet_Change(ByVal Target As Range)
    Application.EnableEvents = False
    If Target.Row <= 50 And Target.Column = 1 Then
        Call 改行
    End If
    Application.EnableEvents = True
End Sub
Sub 改行()
    c = 1
    mojisu = 5
    a = Range("a1:a50")
    For r = 1 To UBound(a)
        t = a(r, c)
        If Len(t) > mojisu Then
            a(r, c) = Left(t, mojisu)
            a(r + 1, c) = Mid(t, mojisu + 1) & a(r + 1, c)
        End If
    Next r
    Range("a1:a50") = a
End Sub

使うことはないと思いますが何かに応用できるかもしれないので貼っておきます。

2016年1月7日追記
「シート全体でできないか」というコメントをいただきました。
シート全体は無理ですが複数の列を対象に処理することができると思います。
上の例ではA列(1列)だけを対象にしていますが、次の例ではJ列(10列)までを対象にしています。

Private Sub Worksheet_Change(ByVal Target As Range)
    Application.EnableEvents = False
    If Target.Row <= 50 And Target.Column <= 10 Then
        Call 改行
    End If
    Application.EnableEvents = True
End Sub
Sub 改行()
    mojisu = 5
    a = Range("a1:j50")
    For c = 1 To UBound(a, 2)
        For r = 1 To UBound(a, 1)
            t = a(r, c)
            If Len(t) > mojisu Then
                a(r, c) = Left(t, mojisu)
                a(r + 1, c) = Mid(t, mojisu + 1) & a(r + 1, c)
            End If
        Next r
    Next c
    Range("a1:j50") = a
End Sub

[ 2015年5月1日 | カテゴリー: Excel | タグ: , ]

« | »

コメント

  1. 匿名 より:

    教えてください。
    自動的に「改行」するマクロを使用させていただきたいですが、シート全体を全て改行出来るようにするには、マクロのどの部分を変更したら良いですか?

  2. stabucky より:

    >匿名さん
    本文に追記しました。
    ご期待に添えるかどうか。

  3. 匿名 より:

    ありがとうございます!

  4. stabucky より:

    >匿名さん
    お役に立てて何よりです。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

送信してください。


タグ

カテゴリー

最近の投稿

最近のコメント

固定ページ

アーカイブ

stabucky

写真

メタ情報