- 締切済み
Excelのセル内にある特定文字で改行させたい
ある汎用のシステムから出力されるテキスト(文章)をCSV形式のデータをEXCELデータに変換しています。そのEXCELに変換されたデータは、文章です。 1点問題があります。そのセル内の文章は、ある特定の記号を改行の代わりとして、連続したテキスト文章になっているため、非常に読み辛いものになっていますいます。その改行を意味する特定記号は、複数個存在し、セル内の個数は一定ではありません。 そのため、読み辛さを解消するためい、その特定記号をセル内での改行に置換させる、マクロまたはVBAでの一括処理することが出来ないでしょうか。置換処置後は、特定記号は不要です。 なお、(1)改行を意味する特定記号は、「~|」です。~と|の組み合わせで、それはそれぞれ半角表記されています。(2)1ファイルにおける対象レコード(行)は、約3,000~10,000行あり、手作業での処理は不可能です。 宜しくお願いします。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- kagakusuki
- ベストアンサー率51% (2610/5101)
回答番号ANo.2です。 >私個人では、マクロを走らせるスキルがないので、 それでは、多少の手間は掛かりますが、次の様な方法は如何でしょうか。 まず、置換専用のBookを作成し、その中に「元データ貼付け」という名前のシートと、「置換後」という名前のシートを作成して下さい。 そして、置換後シートのA1セルに次の数式を入力して下さい。 =SUBSTITUTE(INDIRECT("元データ貼付け!R"&ROW()&"C"&COLUMN(),FALSE)&"","~|",CHAR(10)) 次に、置換後シートのA1セルをコピーして、CSV形式データの貼り付け先を全てカバーするのに充分なセル範囲に、貼り付けて下さい。 ここまでが準備段階となります。 そして、CSV形式のデータをEXCELデータに変換する際には、まず、置換専用Bookの元データ貼付けシートにデータを貼り付けて下さい。 すると、置換後シートに、元の文字列データの「~|」の部分を、Excelのセル内での改行を意味するコード番号10の文字(?)に置換した文字列が表示されます。 そこで、置換専用Bookを開いたままの状態で、変換したデータを最終的に保存する、貼付け先のBookを開き、 置換専用Bookの置換後シート中で、データが表示されているセル範囲をコピーしてから、Excelの「形式を選択して貼り付け」機能を使用して「値」のみを、貼付け先のBook中の貼付け先となるセル範囲に貼り付けて下さい。 尚、上記の数式は(一般的な関数とは異なり)参照元のセルが削除されてもエラーとはなりませんから、置換専用Bookを使って、新たに別のCSV形式データを変換するために、元データ貼付けシートに貼り付けられている古いデータを消去する場合には、セル範囲や、行単位、列単位で、セルごと削除しても、エラーとなったり、セルやデータの並び方がおかしくなったりする心配はありません。
- kagakusuki
- ベストアンサー率51% (2610/5101)
「置換」では「~」が変換されない様です。 以下は、CSV形式から変換された文字列データが、Sheet1のA1~G10000の範囲内にのみ存在していて、且つ、Sheet1のコピーシートであるSheet1(2)等が存在していない場合のマクロです。 シート名やセル範囲が異なっている場合には、適時修正して下さい。 それから、このマクロを動作させると、処理のために作成したSheet1(2)シートを削除しても構わないかどうかを尋ねるダイアログボックスが、最後に現れますので、[削除]ボタンをクリックして下さい。 Sub Macro1() ' ' Macro1 Macro ' ' Sheets("Sheet1").Select Sheets("Sheet1").Copy Before:=Sheets(1) Range("A1").Select ActiveCell.FormulaR1C1 = "=SUBSTITUTE(Sheet1!RC,""~|"",CHAR(10))" Range("A1").Select Selection.Copy Application.Goto Reference:="R1C1:R10000C7" ActiveSheet.Paste Application.CutCopyMode = False Selection.Copy Sheets("Sheet1").Select Application.Goto Reference:="R1C1" Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Application.CutCopyMode = False With Selection .HorizontalAlignment = xlGeneral .VerticalAlignment = xlCenter .WrapText = True .Orientation = 0 .AddIndent = False .IndentLevel = 0 .ShrinkToFit = False .ReadingOrder = xlContext .MergeCells = False End With Sheets("Sheet1 (2)").Select ActiveWindow.SelectedSheets.Delete End Sub
お礼
回答ありがとうございます。私個人では、マクロを走らせるスキルがないので、周囲の有識者にアドバイスを受けて、できるだけ早くに試してみたいと思います。
- Cupper-2
- ベストアンサー率29% (1342/4565)
>置換処置後は、特定記号は不要です。 …「置換」すりゃ良いじゃない。 検索文字列にその特定文字 置換後の文字列に改行コード(Ctrlキーを押しながらJキーを押す) でOK。 改行コードは表示されませんが、ちゃんと入力されていますので安心してください。 (てか、他の置換をするときに消し忘れる方が怖いくらいw) ちなみにこうすると、セルの高さが足りないと開業され続けた文字列は表示されなくなります。 (行の高さには上限がある) ■そして本題(今までのは前置きです) …ですので、「区切り位置」 で複数の列に分解することをお薦めします。 区切り文字として、その特定文字を指定すれがいいです。 横方向に記入されているセルが増えるので注意してください。 必要なら、処理後に行をコピーして「形式を指定して貼り付け」から 「縦と横を入れ替えて貼り付け」る選択で貼り付け直すといいでしょう。 これなら1つのセルの高さが全て等しくなりますから見た目もすっきりします。
お礼
回答ありがとうございます。検索文字列にその特定文字置換後の文字列に改行コード(Ctrlキーを押しながらJキーを押す)は、存じませんでした。早速試してみます。
お礼
繰り返し、ご支援頂き大変ありがたく感じております。 早速明日ためしてみたいと思います。 大幅に難易度が下がったので、私にも操作出来そうな気がします。 時間の関係で、週明けの結果報告になることも想定されます。 ご容赦願います。