[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『改行文字の入ったセルを分割する』(超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.