dポイントプレゼントキャンペーン実施中!

初めて質問します。
 VBAを4月から始めました。
 ネットでいろんな関数を見ましたが全然わかりません。
 VBAの勉強と編集するセルが多いので一括でどうしてもやりたいので質問します。

sheet1(参照元のシート)
sheet2(印刷出力用のシート)

 sheet1のあるセル内(結合なしの1セル内)にこのような文章があります。
目次
○○○○○○○○○○○○○○○○○○です。
目次
○○○○○○○○○○○○○○○○○○です。
目次
○○○○○○○○○○○○○○○○○○です。




 sheet2は、印刷用でセルの幅が違うので下記のよう出力したいです。
 試しにsplit関数でvbLfを目印に使って、変数.variantに代入、for nextで複数のセルに分割して出力することでこの形にすることができました。
目次
○○○○○○○○○○○○
○○○○○○です。
目次
○○○○○○○○○○○○
○○○○○○です。
目次
○○○○○○○○○○○○
○○○○○○です。




 問題点としては、目印になる改行コードの挿入ができていないことです。
 sheet1は、指定の文字数でvbLfを挿入、vbLfがあれば次の文字から指定の文字数をやり直す。
 このような形にできればいいです。
目次vbLf
○○○○○○○○○○○○vbLf○○○○○○です。vbLf
目次vbLf
○○○○○○○○○○○○vbLf○○○○○○です。vbLf
目次vbLf
○○○○○○○○○○○○vbLf○○○○○○です。vbLf




1セル毎に手作業で改行をしていく以外に手はないでしょうか?
皆様のお知恵をお貸しください。

A 回答 (3件)

こんなので、参考になりますか?


半年やっていれば、このくらいのコード、読めますよね?

Sub sample()
Dim A As Variant
Dim B As Variant
Dim i As Long
Dim j As Long

A = Range("A1").Value
For i = 1 To Len(A)
B = B & Mid(A, i, 1)
If Mid(A, i, 1) = vbLf Then
j = 0
Else
j = j + 1
End If
If j >= 12 Then
B = B & vbLf
j = 0
End If
Next i

Range("A2").Value = B

A = Split(B, vbLf)
Range("A3").Resize(UBound(A)) = WorksheetFunction.Transpose(A)

End Sub
「VBAで文章を指定の文字数で改行コードを」の回答画像1
    • good
    • 2
この回答へのお礼

ご解答ありがとうございます。
参考になります。
空き時間に試しにしてみます。

お礼日時:2020/09/29 13:10

こんにちは



直接の回答ではありませんが・・・

>sheet2は、印刷用でセルの幅が違うので下記のよう出力したいです。
要は、Sheet1では長く1行になっている文を、Sheet2ではセル幅におさめて改行(=折返し)表示にしたいということと解釈しました。

原稿データは全てSheet1にあるものと推測しますので、Sheet2の各セルには書式で「折り返して全体を表示する」を設定しておきます。
その上で、値を参照する際に、コピペで行っているのであれば「形式を選択して~」から「値」でペースト。
あるいは、(多分)Sheet1と対応するセルが決まっているのでしょうから、あらかじめ「=Sheet1!A1」のような参照式を設定しておけば良さそうに思います。

このような仕組みにしておくことで、VBAなどを利用せずとも、常にSheet1の内容がSheet2に反映されるようになりますので、そのままで印刷が可能になるものと想像します。
ただし、正確に10文字とか12文字で改行されるというわけにはいかないとは思いますが…
(エクセルの折返し制御依存なので)
また、Sheet1の文章が長すぎて、Sheet2のセルの表示範囲に収まり切らないケースが生じ得ますが、それに関してはVBAの場合でも同様と思います。
    • good
    • 2
この回答へのお礼

ご回答ありがとうございます。
参考にします。

お礼日時:2020/09/29 13:17

正規表現でなんとかなりそう

    • good
    • 3
この回答へのお礼

ご回答ありがとうございます

お礼日時:2020/09/29 13:11

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A