- ベストアンサー
エクセルのマクロでセル内改行を設定する方法
XP・Excel2003使用のマクロ素人です。 エクセルのマクロを使って、ある特定の文字の手前でセル内改行する方法を教えてください。 例えば「■」の手前で改行したいのですが・・・ ■今日は■あたたかい■日でした ↓ ■今日は ■あたたかい ■日でした 宜しくお願い致します。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。#2 のWendy02です。 >例えば、マクロを使わなくても自動的にこのような結果が得られる方法があるのですか?ご存知でしたら教えてください。 たぶん、その「自動的」というのは、元の質問とあわせると、そういう印が入ったら自動的に、改行コードが入るという意味と解釈してよいのでしょうか? 半分は可能ですが、反面、いくつかマイナス要因があります。 VBAの言葉で、「明示的」と「暗黙的」というものに別れますが、「暗黙的」といって、自分が意図しないにも関わらず、行える、というのは理想的なのですが、限定した範囲ならともかく、ワークシート全体を補佐するものだとすると、負荷が大きいので、あまり賛成できないのです。 #2 のコードは、「明示的」といって、ユーザーが範囲を選択し、マクロコマンドを選ぶ、ユーザーの意図して行うものです。 シートモジュールの中に、以下のようなスタイルでマクロを挟んで少し細工してやれば、文字を入力すれば自動的に変更にはなりますが、少し、使用感を試してもらう必要はあるかと思います。あまり、私は、闇雲に、これが良いとはお勧めできません。 '(イベント・ドリブン型マクロ) 'シートモジュール(Sheet1 は、Sheet1 のモジュール) Private Sub Worksheet_Change(ByVal Target As Range) Dim c As Range Const MYMARK As String = "■" '区切り文字 Const START_FLG As Boolean = False '先頭も改行を入れる? With Target 'マウス選択の範囲 (ここだけ変わる) For Each c In .Cells If InStr(c.Value, vbLf) = 0 Then c.Value = Replace(c.Value, MYMARK, vbLf & MYMARK) End If If START_FLG Then c.Value = Mid$(c.Value, 2) Next End With End Sub もう少し、手直しする要素はあります。Excelはソフトウェアといっても、ある程度は、ユーザーの組み込みプログラムで変更は出来ます。その段階によって、レベルが変わってきます。その中のイベント・ドリブン型マクロは、初級の設定方法だと申すことは出来ます。
その他の回答 (2)
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 マクロがご希望だということでしたので、こんな風にしたらどうでしょうか? >ある特定の文字の手前でセル内改行する方法を教えてください。 ですが、最初の「■」のところで、改行を入れるかどうかは、以下のように選択にします。 START_FLG が、False なら、そのまま入れてしまいます。True なら、先頭は入りません。ただし、False で行った後に、もう一度、True に換えて行えば、先頭の部分だけ、Chr(10) =vbLF は、削除できます。 Sub EnterLf() Dim c As Range Const MYMARK As String = "■" '区切り文字 Const START_FLG As Boolean = False '先頭も改行を入れる? With Selection 'マウス選択の範囲 For Each c In .Cells If InStr(c.Value, vbLf) = 0 Then c.Value = Replace(c.Value, MYMARK, vbLf & MYMARK) End If If START_FLG Then c.Value = Mid$(c.Value, 2) Next End With End Sub
お礼
回答ありがとうございます。 例えば、マクロを使わなくても自動的にこのような結果が得られる方法があるのですか?ご存知でしたら教えてください。
- siddhaartha
- ベストアンサー率25% (45/175)
「■」を「改行+■」に置換してやれば出来ます。 ※Replace(Cells(1, 1), "■", vbLf & "■", 2) の部分。 ただし、それだけでは先頭1文字が「■」だった場合、先頭に空白行が出来てしまうので、一文字目だけは置換せずにそのままにしておきます。 ※Left(Cells(1, 1), 1) の部分 よって、求める式は以下になります。 Cells(1, 1) = Left(Cells(1, 1), 1) & Replace(Cells(1, 1), "■", vbLf & "■", 2)
お礼
ありがとうございます。希望通りの結果が得られました。
お礼
ご丁寧にありがとうございます。 今回は、マウス選択の範囲にした方がよさそうですので、2番目の回答を参考にさせていただきました。 とても助かりました、ありがとうございます。