[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『セル内の複数行を分割したい』(べちょたれ雑炊)
お世話になります。
A1セルにセル内改行を使った複数行の文字列が入っています。これをある行以降を次のA2セルに移し、移されたA2セル内の複数行のうちのある行以降を更に次のA3セルに移しと、繰り返していくような作業をすることは可能でしょうか。最終的には、元々A1セルに入っていた文字列を複数のセルに分割したような形になります。
具体例を示しますと、
【A1セル】
あああ
いいい
ううう
えええ
おおお
とあるとすると、先ず3行目以降をA2セルに移します。その結果、
【A1セル】
あああ
いいい
【A2セル】
ううう
えええ
おおお
となりますが、次にA2セルのうち2行目以降を更にA3セルに移します。その結果、
【A1セル】
あああ
いいい
【A2セル】
ううう
【A3セル】
えええ
おおお
となるようにしたいということです。実際のデータではA1セルに入っている行数はもっと多くなります。行数は一定していませんが、ほとんどの場合に数百行単位になります。最終的に幾つのセルに分割されることになるかも一定していませんが、ほとんどの場合数十から百数十くらいになります。何行目以降を次のセルに移すかは一定していませんし、区切りの目印になるようなマークや文字列は特にありませんので、目視で区切る行を判断し、手作業で次のセルに送っていくしかないだろうと思っています。
最初の時点でのA1セルの文字列のうち3行目以降を切り取って(Ctrl+X)、それをA2セルにペーストし(Ctrl+V)、次にA2セル内の2行目以降を切り取りそれをA3セルにペースト・・・と順に繰り返していけば出来るのは存じておりますが、それをもっと簡単に短時間で出来るような方法はないかと思案しています(例えば、次のセルに送りたい行の頭にカーソルを合わせておいて、「分割」とか「次に送る」みたいな処理が出来ないかなと思っています)。
無理っぽいお願いで恐縮ですが、お知恵を拝借出来れば幸いです。よろしくお願い致します。
< 使用 Excel:Excel2013、使用 OS:Windows7 >
1)と2)はそれぞれマクロを使います
(マナ) 2018/08/04(土) 10:38
Sub test() Dim s As String
s = Join(Application.Transpose(Selection), vbLf) Cells(Rows.Count, 2).End(xlUp).Offset(1).Value = s
End Sub
(マナ) 2018/08/04(土) 10:55
早速にご回答を頂き、ありがとうございました。
せっかくご教示頂きましたが、2)マウスで範囲を選択したり、3)元のシートにコピペ したりしていると、「最初の時点でのA1セルの文字列のうち3行目以降を切り取って(Ctrl+X)、それをA2セルにペーストし(Ctrl+V)、次にA2セル内の2行目以降を切り取りそれをA3セルにペースト・・・と順に繰り返す」のと比べて、ほとんど手間的に変わらないのではないかという気がします。申し訳ありません。
(べちょたれ雑炊) 2018/08/04(土) 10:59
(マナ) 2018/08/04(土) 11:16
そうですね。そこの部分を過少評価してしまってました。次々にコピペを繰り返す方法だとコピペの回数が膨大になることをちゃんと認識出来てませんでした。
教えて頂いた方法を試してみたいと思います。ありがとうございました。
(べちょたれ雑炊) 2018/08/04(土) 12:29
<下準備> 1.当該シートのシートモジュールに後記マクロを貼り付ける。 2.Microsoft Forms 2.0 Object Libraryを参照設定する。
<通常作業> 1. A1セルを右クリックする (第一回目のみ実行する) 表面的には何も起きないが、クリップボートに"#!#"と言う文字が格納される。
2.区切りたい位置にカーソルを持って行き、Ctrl+V キーを押し、その位置に"#!#" を挿入する
3. A1のセルの下(つまりA2セル)をダブルクリックする。 以上で第一回目の分割が終了する。
上記2の作業を下のセルで順次繰り返す。(2回目はA2セル、3回目はA3セル ・・・)
<シートモジュールに貼り付けるマクロ>
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean) If Target.CountLarge > 1 Then Exit Sub
Dim buf As String, CB As New DataObject Cancel = True
With CB .SetText "#!#" .PutInClipboard .GetFromClipboard buf = .GetText End With End Sub
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Dim strApart If Not IsEmpty(Target.Value) Then Exit Sub
With Target.Offset(-1) strApart = Split(.Value, "#!#") .Resize(2, 1).Value = Application.Transpose(strApart) End With End Sub
(半平太) 2018/08/04(土) 13:05
ご教示頂き、ありがとうございます。
「Microsoft Forms 2.0 Object Libraryを参照設定する」というのがよく分かりません。ネットで調べてみましたが、説明を読んでみても残念ながらチンプンカンプンでした。もう少し勉強してみます。
ありがとうございました。
(産後の酢橘) 2018/08/04(土) 13:56
>ネットで調べてみましたが、説明を読んでみても残念ながらチンプンカンプンでした。
ここ見て、分からないですか? ↓ https://www.relief.jp/docs/017881.html
(半平太) 2018/08/04(土) 14:37
何度もお手数をおかけし、恐縮です。
いくら探しても「FM20.DLL」ファイルが見つからず、「???」状態だったのですが、気が付くといつの間にやら[参照可能なライブラリファイル]欄にチェックマークの付いたMicrosoft Forms 2.0 Object Libraryが追加されてました。
結局、ご教示頂いたとおりの手順でうまくいきました。ありがとうございました。
(産後の酢橘) 2018/08/04(土) 15:35
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.