[[20100521154050]] 『CSVのカンマと改行コードの削除』(みっこ)  ページの最後に飛ぶ

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

 

『CSVのカンマと改行コードの削除』(みっこ)

ショッピングカートの注文履歴をダウンロードすると、稀に電話番号の最後に改行が入っていたり、住所の最後に改行が入っていたり、また、備考欄の顧客からのコメントに文章の途中で改行が入っていたりします。

この改行がある事で、受注管理ソフトに取り込む際に、正常に取り込まれなかったりしてしまいます。

文章の途中で改行がある場合は、その改行を削除して文章を繋げ、電話番号が住所等の最後に改行があるデータは削除するようなマクロを組みたいのですが、どのように記述するか教えて頂けないでしょうか。また、データ中にカンマを含む場合、カンマはドットに変更したいです。


 単に置換でCtrl+Jを空白に置換するのではダメですか?
 マクロならそれを記録で。

 もしダメでしたら、元のCSVデータがどのようなデータなのかと
 現在の取り込み方法を教えてください。

 (momo)

ご回答ありがとうございます。
エクセル上でCtrlを押しながらJキーを押すという事でしょうか?
やってみましたが、エラー音が鳴って何もなりませんでした。

置換でできるのですか?
改行コードだと検索する値を何にしたら検索できますでしょうか?
(みっこ)


すみません!ネットで検索したら、やり方がわかりました!!ありがとうございました!!!

 衝突の上に、解決したようですが一応

 検索する文字の所にカーソルを置いた状態でCtrlとJを同時押しします。
 見た目には何もないですが改行コードが入っていますので
 置換する文字は空白のまま置換してみてください。
 (momo)


度々すみません、教えていただいた方法ですと、コメント欄の改行は削除されるものの、電話番号や住所データの最後にある改行は削除されませんでした。
何故でしょうか?(><)
(みっこ)

 質問を追加する場合は「返信・編集」で書き換えずに下にあるコメント欄から行ってください。
 (独覚)

 最後ですよね?
 A1に文字があるとすると
 =CODE(RIGHT(A1,1))
 のような数式で数字はいくつが返りますか?
 (momo)

09012345678

のような電話番号(最後に改行あり)は10

和歌山県○○市○○○39-1

のような
住所データ(最後に改行あり)は32

となりました。(みっこ)


 10はLFで改行なのでCtrl+Jで置換できるはずです。
 32はスペースなので半角スペースを""に置換すれば出来ると思いますが。
 (momo)

試しにもう一度やってみたところ、Ctrl+Jで置換できました。

ここで操作を一度戻して、改行ありの状態で(操作を戻した時に改行があるのをちゃんと確認しました)マクロの記録からマクロを作成しようと思ったのですが今度は以下のエラーが出ました。

置換対象のデータが見つかりません。検索対象のデータの書式と条件が正しく指定されているかどうか確認して下さい。このブックに一致するデータがあることが予め分かっている場合は、シートが保護されてないかどうか確認して下さい。保護されたシートのデータは置換できません。

さっきはできたのに、今度はできなくなってしまって…どうしてでしょうか???

(みっこ)


 たぶん記録コードですとSelectionの範囲に対して実行するコードになってると思います。
 対象範囲内に改行が無い場合にエラーになります。

 対象範囲を選択して動作させるようにするか
 範囲があらかじめ決まっているのでしたら

 with columns("A:B") 'A〜B列が対象の場合
     .Replace What:=Chr(10), Replacement:="", LookAt:=xlPart, SearchOrder:=xlByRows, _
              MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
 end with

 のように範囲指定してやってみてください。
 (momo)

AからZ列までを範囲してやったところ、できました。

が、ちゃんと正常に動くかをもう一度試してみたくて操作をまた戻してからマクロを実行すると上記と同じエラーがでます。

マクロではなく手作業で検索置換ではどうかなとやってみたところ、またしても同じエラーが出て置換できないのです(><)
出来るときとできない時があるのは何故なのでしょうか?

(みっこ)


 えっと、手作業で置換したものはアンドゥ(元に戻す)機能で元に戻せますが
 マクロで置換したものはアンドゥできませんので元に戻ってないのではないかと推測します。
 実際に改行が無いのではないでしょうか?

 (momo)

それが、一度マクロ実行によって削除された改行が、操作を戻した時にはまた戻っていて改行がある状態なのを確認したんです(><;)すみません私の勘違いなのでしょうか。。。

また、今また改行のある状態でマクロを実行したところ、「置換対象のデータが見つかりません。検索対象のデータの書式と条件が正しく指定されているかどうか確認してください。・・・・・シートが保護されていないかどうか確認してください。」といったエラーメッセージが出てしまいました。

マクロの記録を使って作ったものですが、記述されてあったコードを貼り付け致します。

Sub Macro1()
'
' Macro1 Macro
'

'

    Range("K6").Select
    ActiveWindow.SmallScroll Down:=-15
    Range("C:C,H:H,I:I").Select
    Range("I1").Activate
    ActiveWindow.SmallScroll Down:=-6
    Range("C:C,H:H,I:I,M:M,N:N").Select
    Range("N1").Activate
    ActiveWindow.ScrollColumn = 2
    ActiveWindow.ScrollColumn = 3
    Range("C:C,H:H,I:I,M:M,N:N,Z:Z").Select
    Range("Z1").Activate
    ActiveWindow.ScrollColumn = 2
    ActiveWindow.ScrollColumn = 1
    Range("C:C,H:H,I:I,M:M,N:N,Z:Z,E:E,J:J").Select
    Range("J1").Activate
    Selection.Replace What:="" & Chr(10) & "" & Chr(10) & "" & Chr(10) & "", Replacement:="", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Range("I14").Select
    ActiveWindow.SmallScroll Down:=-12
    Range("F6").Select
    ActiveWorkbook.Save
End Sub

(みっこ)


 問題は
 >What:="" & Chr(10) & "" & Chr(10) & "" & Chr(10) & ""
 ここだと思います。
 1つのセルに改行コードが3つ入っていないと対象になりません。
 Chr(10)を1つにしてみてください。

 また、上のコードを手で書くと

  Sub Macro1()
  Range("C:C,E:E,H:H,I:I,J:J,M:M,N:N,Z:Z") _
      .Replace What:=Chr(10), Replacement:="", LookAt:=xlPart, SearchOrder:=xlByRows, _
               MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
  ActiveWorkbook.Save
  End Sub

 だけで済むと思います。
 (momo)

ご回答ありがとうございます。
マクロの記録でやると、無駄なコードが増えてしまうのでしょうか?(それとも記録中に私が無駄な動きをしてしまっているのでしょうか^^;)
とてもすっきりしたコードにまとめて頂きありがとうございます。

さて、コードを書き換え実行したのですが、何故だか改行が消えていませんでした。。
実行後、互換性に関するメッセージが表示されましたが、今後は表示しないにチェックをしてOKしました。

そこで確認しましたが、改行はとれておらず…再度実行してもやはり改行が残っています。。

何度も申し訳ないです…!

2007を使っていますが改行のあるデータは 折り返して全体を表示する の部分がオレンジに光っているのですが、実行後もこのオレンジの状態で、改行のあるデータの末尾にカーソルをあわせて矢印で左に移動させたところ、電話番号のデータに関しては一度押しただけで1文字分左に移動したので、改行がとれているという事でしょうか?( 折り返して全体を表示する の部分がオレンジのままにはなっていますが)

また、住所データも同じように確認したところ、3回矢印ボタンを押して初めて1文字分左に移動しました。ということは改行が2つ分ついているという事になりますでしょうか?

改行がとれたかどうかの確認はこの方法で良いでしょうか?

(みっこ)


 ん〜 本当に改行コードなのかどうか?という所でしょうか
 下のようなコードだとどうなりますか?

  Sub Macro1()
  With Range("C:C,E:E,H:H,I:I,J:J,M:M,N:N,Z:Z")
      .Replace What:=Chr(10), Replacement:="", LookAt:=xlPart, SearchOrder:=xlByRows, _
               MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
      .Replace What:=Chr(13), Replacement:="", LookAt:=xlPart, SearchOrder:=xlByRows, _
               MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
      .Replace What:=Chr(32), Replacement:="", LookAt:=xlPart, SearchOrder:=xlByRows, _
               MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
      .WrapText = False
  End With
  ActiveWorkbook.Save
  End Sub

 (momo)

momoさんの最後に教えて頂いたコードに書き換え、試したところ、見事に消えました!

という事は、改行コードではなかったのでしょうか??

いずれにしても解決できたので、大変感謝しています!

何度もご回答頂き、本当にありがとう御座いました。

(みっこ)


 改行コード(LF)とキャリッジリターン(CR)とスペースを削除しています。
 そのうちのどれかだったか
 セル書式の折り返して全体を表示が設定されていたか
 のいずれかだと思います。
 (momo)

コメント返信:

[ 一覧(最新更新順) ]


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