[[20031218114734]] 『セル内の文字列を自動的に改行』(ろっしい) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『セル内の文字列を自動的に改行』(ろっしい)

セル(1,1)に110文字入力されているとします。ここからデータを取り出し、
20文字毎に改行して、セル(2,1)に代入するマクロを組みたいのですが、
ちょっと方法がわかりません。

(多分)流れで行くと

1. cells(1,1).value の値を取り出す

2.文字列の長さをカウントする ( Len が使えるような気がしますが・・・)

3.20文字ずつに文字列を分割する(この場合は最後10文字余ります)

4.最初の20文字と次の20文字の間に改行コードを入れる。以下順次。

5.文字列+改行コードが入ったデータをセル (2,2) に代入する

という感じだと思うのですが、私の技量では難しすぎてマクロを組むことができませんでした。
どなたかお知恵をお貸しいただけると幸いです。

上の流れとは関係なく、もっと簡単なマクロ、または関数でできるというのでもOK
ですので、よろしくお願いします m(__)m


 Sub Test()

    Dim s As String
    Dim i As Integer, n As Integer, myValue As Integer

    n = 1
    myValue = Int(Len(Cells(1, 1).Value) / 20)

    If Len(Cells(1, 1).Value) Mod 20 = 0 Then
       myValue = myValue - 1
    End If

    For i = 1 To myValue
       s = s & Mid(Cells(1, 1).Value, n, 20) & vbCrLf
       n = n + 20
    Next i

    s = s & Mid(Cells(1, 1).Value, n, 20)

    Cells(2, 1).Value = s

 End Sub

 作ってみました。こんな感じでいいんでしょうか  (りな)


 Sub sample()
 Dim i As Long
    For i = 1 To Len(Range("A1").Value) Step 20
        Range("A2").Value = _
        Range("A2").Value & Mid(Range("A1").Value, i, 20) & Chr(10)
    Next i
 End Sub

 かな?

  (INA)


 横から質問させてください。
ろっしいさんの質問は、下セルにという指定ですよね。
ヘルプやこの学校の講義をコピーする身としては、ろっしいさんの質問プラス
○○文字毎にセル改行?(下の行に)になると大変便利だと重い、お聞きします。
関数だと、B1に=MID($A$1,(ROW()-2)*20+1,20) を下にコピー、というイメージだと思うんですが、
マクロだと、アクティブセルから始まるとして上記コードはどう変わりますか?
       マクロわかってません (kobi)


 私も余り分かっていないのですがVBAの質問が有ると勉強の為、ついつい考えてしまいます。
 Sub sample()
  Dim i As Long
    For i = 1 To Len(Range("A1").Value)
        ActiveCell.Offset(i - 1, 0) = Mid(Range("A1").Value, (i - 1) * 20 + 1, 20)
        Next i
 End Sub
 こんな感じで良いと思いますが、他にもっと良い方法が有るかも知れません。(ケン)


 すいません、Range("A1")をアクティブセルにするとして、の間違いでした。
ケンさんのを参考に、いじってみます。 たが、早くも挫折  (kobi)


 発想を変えて、[INA]さんのコードをパクッて Function にしてみました。

 セルB1 に =inafunc(A1) で使えます。

 この方が便利かもしれません。

 (kazu)

 Function inafunc(data)
 Dim i As Long
    For i = 1 To Len(data.Value) Step 20
        inafunc = inafunc & Mid(data.Value, i, 20) & Chr(10)
    Next i
 End Function

 Sub Test2()

    Dim s As String
    Dim i As Integer, n As Integer, myValue As Integer

    n = 1

    With ActiveCell

       myValue = Int(Len(.Value) / 20)

       If Len(.Value) Mod 20 = 0 Then
          myValue = myValue - 1
       End If

       For i = 1 To myValue
          .Offset(i, 0).Value = Mid(.Value, n, 20)
          n = n + 20
       Next i

       .Offset(i, 0).Value = Mid(.Value, n, 20)

    End With

 End Sub

 kobiさんが言っているのはこういうことでしょうか?
 勘違いだったらごめんなさい  (りな)

 ろっしいさん、横から乱入してすみません。それから皆さんありがとうございました。
会社で確認やってみます。聞いておきながら寝てしまいました。
              風邪気味 (kobi) けほんけほん  


みなさん、本当にありがとうございます。朝PCを開いてこれだけ回答があり感激
しています。
幾つかの質問の中で、「セル(2,1)」に入れるかどうかというのがあったのですが、
これは話を具体的にするだけの意味で、現実的にはセル (m,k) に適宜入れるという
予定です。

とりあえずは、皆さんが書いてくださったコードをじっくり眺めて理解してみます。
取り急ぎお礼です。ありがとうございました m(__)m

p.s. また分からなかったら質問するかも知れませんが、よろしくお願いします。(ろっしい)


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.