[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『セル内の空白行を削除』(てつ)
他からエクセルに取り込んだデータについて 多くのセルの中に空白行がたくさんあるので、削除したいと思います。 改行を全て取り除くことは、簡単にできるのですが、 空白行のみ取り除くことができません。 どのようなマクロを使えば、良いのでしょうか。 Excel2010 XPで利用しています。 よろしくお願いいたします。
文字があかさたなはまやらわ順になるのでよければ使えますよ。 Sub 並び替え() Range("A1:A30").Select Selection.Sort Key1:=Range("A1"), Order1:=xlAscending, Header:=xlNo, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _ :=xlPinYin, DataOption1:=xlSortNormal Range("A1").Select End Sub (めろんぱん)
わかりにくい書き方ですいません。 それぞれのセルの中で、 例えば 「○○○ ○○○
○○○ ○○」 というようにあるのを セル内の空白行を取り除きたいと思っているのです。 よろしくお願いします。 (てつ)
◆マクロではありませんが、こんな方法はいかがでしょう 1)「Ctrl+H」を押して、「検索と置換のダイアログボックス」の 2)「検索する文字列」に「Ctrl+J」を2回入力して(表示はされません) 3)「置換後の文字列」に「Ctrl+J」を1回入力して、「すべて置換」をクリックします (Maron)
このようなものはいかがでしょう? Maronさんが書いたように、改行「chr(10)」が2個連続するときは 1個に置き換えるという方法です。 (Hatch) Sub test() Dim myRange As Range Dim r As Range Set myRange = Range("A1:A10") For Each r In myRange r.Value = Replace(r.Value, Chr(10) & Chr(10), Chr(10)) Next r End Sub
時間が空いたので出てきました。。 Maronさん、Hatchさんを参考にさせて頂き、、 空白行が連続したり、先頭や最後尾にあった時を考慮して、、
Sub test_2() Dim myRange As Range Dim r As Range
Set myRange = Range("A1:A10") For Each r In myRange Do Until InStr(1, r, Chr(10) & Chr(10), vbTextCompare) = 0 r.Value = Replace(r.Value, Chr(10) & Chr(10), Chr(10)) Loop If Left(r, 1) = Chr(10) Then r.Value = Right(r, Len(r) - 1) If Right(r, 1) = Chr(10) Then r.Value = Left(r, Len(r) - 1) Next r End Sub (kei)
みなさんに教えていただいた方法でやってみたのですが、 なかなかうまくいきません。 メールの本文を取り込んだデータですので、 規則性がありません。 空行が2つ以上続いていたり、 途中の行頭に空白の全角や半角の文字があったり 教えていただいたことをもとに 少し換えてやってみるのですが、今のところ目途が立ちません。 改行が2つ続くところでは、改行が1つになるはずなのですが、 それもうまくできないところがあります。 メールを取り込んだデータというところに何か問題があるのでしょうか。 (てつ)
なお、(Maron)さんに教えていただいた 置換を使った場合、 一致するデータが見つかりません という表示が出てきます。 でも確かにテキストに貼り付けると、 改行が2つ続いているところがあるのですが。 (てつ)
半角や全角の空白を無くしてから処理すると良いのでしょうが、必要な空白まで無くなるかも。。 それで良いのなら原本を保存してから、下記で実行してみて。
Sub test_3() Dim myRange As Range Dim r As Range
Set myRange = Range("A1:A10") With myRange .Replace what:=" ", Replacement:="" .Replace what:=" ", Replacement:="" End With For Each r In myRange Do Until InStr(1, r, Chr(10) & Chr(10), vbTextCompare) = 0 r.Value = Replace(r.Value, Chr(10) & Chr(10), Chr(10)) Loop If Left(r, 1) = Chr(10) Then r.Value = Right(r, Len(r) - 1) If Right(r, 1) = Chr(10) Then r.Value = Left(r, Len(r) - 1) Next r End Sub (kei)
keiさんに教えていただいたマクロを実行しました。 確かに、空白文字はなくなるのですが、 空白行は、そのままになっています。 空白文字をなくしてから、マクロを実行しても、 やはり空白行は残っています。 (てつ)
どうしてもできないのなら、何か特殊な文字が混入していると思います。。 そのセルを他のシートのA1にコピペして、 B1=IF(LEN($A$1)>=ROW(A1),CODE(MID($A$1,ROW(A1),1)),"") この数式をずーと下までコピペしてみて。。 うまくいけば、文字コードが分かるかも。。 (kei)
文字コードの解析は、どうでしたか? 悪名高い^^; CHR(160)だったら、下記のコードで処理できるかなぁ。。 作業列をZ列にしていますが、問題なら他の範囲に書き換えて実行してください。
Sub test_3() Dim myRange As Range Dim r As Range
Set myRange = Range("A1:A10") '←データ範囲のセル範囲を修正してね。 With Range("Z1:Z10") '←この場合Z列を作業列にしています。セル範囲の修正を。。 .Value = "=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A1,CHAR(160),""""),"" "",""""),"" "","""")" End With myRange.Value = Range("Z1:Z10").Value '←セル範囲の修正を。。 Range("Z1:Z10").Value = "" '←セル範囲の修正を。。 For Each r In myRange Do Until InStr(1, r, Chr(10) & Chr(10), vbTextCompare) = 0 r.Value = Replace(r.Value, Chr(10) & Chr(10), Chr(10)) Loop If Left(r, 1) = Chr(10) Then r.Value = Right(r, Len(r) - 1) If Right(r, 1) = Chr(10) Then r.Value = Left(r, Len(r) - 1) Next r End Sub (kei)
keiさん 文字コード解析は、うまくいきませんでした。 改行コードをネットで調べていて、 vbCrLf となる場合があることが分かり、 Chr(10)の部分を、これに入れ替えて、教えていただいた マクロを次のようにしました。 Do Until InStr(1, r, vbCrLf & vbCrLf, vbTextCompare) = 0 r.Value = Replace(r.Value, vbCrLf & vbCrLf, vbCrLf) Loop 無事、これによって、うまくいきました。 ありがとうございました。 (てつ)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.