[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『改行文字の入ったセルを分割する』(超EXCEL初心者)
教えてください。 『sheet1のA列のセル内に複数行で書かれているものをがあったらsheet2のA列にあげ、 それを隣のセルに1行ずつに分割する。』という作業を自動的に行えないでしょうか?
【sheet1】
A [1] 07 SPRING&SUMMER [2] NO COLLECTION [3] 2005-2006 FALL/WINTER (01-56) ・ ・ ・
【sheet2】
A B C D E F G H [1] 1行目 2行目 3行目 4行目 5行目 6行目 7行目 [2] 07 07 SPRING&SUMMER SPRING&SUMMER [3] 2005-2006 2005-2006 FALL/WINTER (01-56) FALL/WINTER (01-56) ・ ・ ・
※sheet1のA列のデータ数は100以上あり、それも必ずしも複数行というわけではなく、 1行のものも混在しています。(でも最大は7行です。)
良い方法をご存知の方、よろしくお願いします。
A列を選択して、データ→区切り位置で、カンマやタブ・・・選択、次へ 区切り文字にその他を選び、入力欄に「Ctrl+J」(表示は何も表示されません。) で、完了。 BJ
衝突しましたがそのままアップ。
改行文字は char(10) です。
FIND LEFT MID RIGHT
の組み合わせて出来ると思います。 (MARBIN)
改行無しを考えると、 ISERROR も必要ですね。 (MARBIN)
ExcelVBAを使用してできないでしょうか?
(超EXCEL初心者)
マクロの自動記録が参考になりませんか? (MARBIN)
自動記録では"コピーまたは移動先を置き換えますか?というメッセージ"前までの処理が記録されます。 [[20050614145654]]『改行文字の入ったセルを分割する方法』(HT) を参考(というか真似て)
Sub test() Dim i As Long Dim Ary Ary = Split(Range("A2").Value, Chr(10)) For i = 0 To UBound(Ary) Range("B2").Offset(, i).Value = Ary(i) Next i End Sub
というのができました。 Offset(, i). で横方向に書くように変えただけなんですが、かなりの時間がかかりました・・・
そして更に問題が・・・ これはA3のみのじゃないですか。 A3から下のセルすべてを指定するにはどうすればいいのでしょう? わかりません。 教えてください。お願いします。
(超EXCEL初心者)
Sub test()
Sheets("Sheet1").Select Range("A1:A100").Select Selection.copy
Sheets("Sheet2").Select Range("A2").Select ActiveSheet.Paste
Selection.TextToColumns Destination:=Range("B2"), DataType:=xlDelimited, _ Other:=True, OtherChar:=Chr(10), Fieldinfo:=Array(1, 1) End Sub
実行後の"コピーまたは移動先を置き換えますか?"というメッセージが出ないようにするにはどうすれば良いでしょうか? (超EXCEL初心者)
かういう事でっか? (弥太郎) '------------------------ Sub test() Dim i As Long, j As Integer, x, data, tbl '正式には x As Variant,data As Variant,tbl As Variantと宣言 Sheets("sheet1").Range("A1:A100").Copy Sheets("sheet2").Range("a2") tbl = Sheets("sheet2").Range("a2:a100") 'sheet2のA2からA100まで変数tblに格納 ReDim x(1 To UBound(tbl, 1), 1 To 10) '配列変数xにメモリー再割り当て For i = 1 To UBound(tbl, 1) '格納した変数tblの一行目から最終行まで走りまっせぇ
On Error Resume Next 'エラーが出ても無視して作業続けなはれ data = Split(tbl(i, 1), Chr(10), -1) 'データを改行で分けます m = data(1) '分けられないデータ、つまり1行のデータはここでエラーがでる If Err.Number = 9 Then 'もしそのデータのエラー番号が9やったら x(i, 1) = Empty '変数xのi階1号室は入居者なし Else 'エラーでなければ(複数行のデータがあれば) For j = 0 To UBound(data) '分割して格納した変数dataを一行目から最終行までループ 'この変数のIndexは0から割り当てられてる x(i, j + 1) = data(j) '変数xのi階j+1(この変数はindex1から始まる)に分割したj番目を格納 Next j End If Next i Sheets("sheet2").Cells(2, 2).Resize(UBound(tbl, 1), UBound(x, 2)) = x 'sheet2のrange("b2")から最終行の列方向の最も飛び出た列まで '格納した変数xを一気に吐き出しなさい On Error GoTo 0 'エラー無視はここまでですヨ
End Sub
すごいです! やりたいことができました!!!
ヘルプを見てもチンプンカンプンなのでVBA入門サイト(Let's Excel VBA)で 勉強しているのですが、それでもやはりチンプンカンプンです。
Dim i As Long, j As Integer, x, data, tbl ↑ すでに最初の時点でつまずいています。 Dim 変数名 As データ型という基本文法を学びました。 疑問なのはDim i As Longのあとに何やらいっぱいあるけどこれって何? こう書かれている意味がわからないのです。
わかったのはコピペするこの部分だけでした。 Sheets("sheet1").Range("A1:A100").Copy Sheets("sheet2").Range("a2")
教えてください。お願いします。
(超EXCEL初心者)
↑にかきこんどきました。 これは変数同士のやりとりにしとりますけど、下の様に書いても同じ結果が得られる と思います。 只まぁ、セルにいちいちアクセスするやり方ですから、処理速度は2,3十倍遅く なります。 コードの左にグレーのゾーンがある筈ですから、そこをクリックしてブレークポイント を設置し(そこでマクロがストップする)F8でを押下するとどんな作業を繰り返しとる か良くお分かりになると思います。 (弥太郎) '------------------------ Sub test2() Dim i As Long, j As Integer Sheets("sheet1").Range("A1:A100").Copy Sheets("sheet2").Range("a2") For i = 2 To 100 On Error Resume Next data = Split(Cells(i, 1), Chr(10), -1) If UBound(data) > 0 Then For j = 0 To UBound(data) Cells(i, j + 2) = data(j) Next j End If Next i On Error GoTo 0 End Sub
解説していただいてありがとうございます。 もうただただすごい!と感心するばかりです。 それから羨ましくも思います。
正直、自分にはまだちょっと難しいです。 日々勉強ってことですかね? がんばります!
ありがとうございました。
(超EXCEL初心者)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.