[[20180725153916]] 『ある範囲のセルのデータを、一つにまとめテキスト』(たけ) ページの最後に飛ぶ

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

 

『ある範囲のセルのデータを、一つにまとめテキスト変換及び改行削除』(たけ)

ある範囲のセルのデータを、一つにまとめテキスト変換及び改行削除

マスターデータのアップロードするのにテキストで改行無しでアップしないといけません、
エクセルで作成したもの(約500行くらい)をいつのテキストにまとめて
改行をなくさないといけません。

複数セルを選択してテキストに張り付けても改行が残ってしまいますので
なくした状態のテキストを作成できるものを検討しています。

*例えばA6からA505までのデーターがある感じです。
もしわかる方がおられましたらお願いします。

< 使用 Excel:Excel2016、使用 OS:Windows10 >


 制御文字にも対応した置換機能のあるテキストエディタを使うことはできないのだろうか?
(ねむねむ) 2018/07/25(水) 16:11

マクロで全部連結してから、改行コードは文字列置換で消してしまえば良さそう。連結する方法は、最近、案が幾つか出ていたので、参考にしてみてください。[[20180723100727]]
(???) 2018/07/25(水) 17:07

 >*例えばA6からA505までのデーターがある感じです
 Sub tset()
     Dim txt As String
     Open ThisWorkbook.Path & "\Sample.txt" For Output As #1
         Print #1, Join(Application.Transpose(Range("a6:a505").Value), "")
     Close #1
 End Sub
(seiya) 2018/07/25(水) 17:18

seiyaさん

ありがとうございます。
試してみましてファイルが出来ていました。

Rangeを広くすることができれば
汎用性が出てきますね。
一度アップしてみて問題ないか見てみますね
(さる) 2018/07/25(水) 17:33


 単一列で行数が65536未満で1セルの文字数が255を超えない、且つエラー値がければOKのはずです。
(seiya) 2018/07/25(水) 17:46

seiyasさんすいません

やってみたのですが、1セルの文字数が255を超えていますので

 Print #1, Join(Application.Transpose(Range("a6:a505").Value), "")のところでとまってしまいます。
また、条件が増えてしまったのですが、エラーコード
(#N/A)が出ているところがありましてオートフィルターでフルターしていたのですがこの
状態だとフィルターで非表示になっているものも含まれてしまいます。
最初に言ってなくてすみません。
(たけ) 2018/07/25(水) 18:19

 それなら

 Sub test()
     Dim cn As Object, rs As Object
     Set cn = CreateObject("ADODB.Connection")
     Set rs = CreateObject("ADODB.Recordset")
     With cn
         .Provider = "Microsoft.Ace.OLEDB.12.0"
         .Properties("Extended Properties") = "Excel 12.0;HDR=No;IMEX=1;"
         .Open ThisWorkbook.FullName
     End With
     rs.Open "Select F1 From [Sheet1$A5:A50000] Where F1 Is Not Null And Not IsError(f1)", cn
     Open ThisWorkbook.Path & "\sample.txt" For Output As #1
        Print #1, rs.GetString(, , "") 
     Close #1
     Set cn = Nothing: Set rs = Nothing
 End Sub
(seiya) 2018/07/25(水) 19:21

seiyaさん有りがとうございます。

データを作成しましてアップしたのですがエラーがあったので確認しましたら、
作成したテキストをエクセルで見ると改行が削除されていないみたいでした

14562422347614 105187
14562422347621 105187
14562422347638 105187
とセルが分かれてる感じでした

以下の様に1つのセルに入るようにしたいです。
14562422347614 10518714562422347621 10518714562422347638 105187

もしよろしければまた検討お願いします。
(たけ) 2018/07/26(木) 12:04


 無理やり...

 Sub test()
     Dim cn As Object, rs As Object, txt As String
     Set cn = CreateObject("ADODB.Connection")
     Set rs = CreateObject("ADODB.Recordset")
     With cn
         .Provider = "Microsoft.Ace.OLEDB.12.0"
         .Properties("Extended Properties") = "Excel 12.0;HDR=No;IMEX=1;"
         .Open ThisWorkbook.FullName
     End With
     rs.Open "Select F1 From [Sheet1$A5:A50000] Where F1 Is Not Null And Not IsError(f1)", cn
     With CreateObject("VBScript.RegExp")
         .Global = True
         .Pattern = "[\r\t\n\f]"
         txt = .Replace(rs.GetString(2, , vbNullString, vbNullString, vbNullString), "")
     End With
     Open ThisWorkbook.Path & "\sample.txt" For Output As #1
        Print #1, txt;
     Close #1
     Set cn = Nothing: Set rs = Nothing
 End Sub
(seiya) 2018/07/26(木) 12:50

 以下のような流れでは問題あるだろうか?
 1セル読んで改行なしで書き込みをループする。
 Sub a()
    Dim FILE_NO     As Integer
    Dim ROW_CNT     As Integer
    FILE_NO = FreeFile
    Open "C:\WK\TST.TXT" For Output As FILE_NO
    ROW_CNT = 1
    Do Until Cells(ROW_CNT, "A") = ""
        Print #1, Cells(ROW_CNT, "A").Value;
        ROW_CNT = ROW_CNT + 1
    Loop
    Close #1
 End Sub

(ねむねむ) 2018/07/26(木) 13:25


横からですけど、

>以下の様に1つのセルに入るようにしたいです。
セルにいれるんですか?最初の質問ですと、テキストファイルに書き出したいというような質問だったとおもいますが・・・・

ところで、ねむねむさんや、???さんが提案されている改行コードを削除する案はダメなんでしょうか?結果が気になるので、好みでないならどんなところがダメで不採用なのか報告すると良いかもです。

また、???さんが紹介されているリンク先で、私がFor each 〜 Nextステートメント使って、結合する案を提示してますので、そちらをご覧頂いているのであれば、以下のようなコードが組めると思いますがもう実験済みでしょうか?

    Sub test()
        Dim tmp As Range
        Dim buf As String

        For Each tmp In Range("A6:A505")
            buf = buf & tmp.Value
        Next tmp

        Open ThisWorkbook.Path & "\Sample.txt" For Output As #1
            Print #1, buf
        Close #1

    End Sub

理屈でいえば、約20億文字くらいまでは、String型の変数に格納できるっぽいので事足りませんか?
http://excelvba.pc-users.net/fol5/5_2.html

(もこな2) 2018/07/26(木) 17:16


 もこな2さん、改行コードを削除は???さんとseiyaさん。
 私のは書き込み時に改行コードを入れない方法。
 だから私のはセル内に改行があればNG。
(ねむねむ) 2018/07/26(木) 17:21

>もこな2さん、改行コードを削除は???さんとseiyaさん。

あ〜ややこしくてすみません。
訳あって昼に書いた物を時間たってから投稿したので変なことになってしまいました。

自分が言いたかったのは、
・(ねむねむ) 2018/07/25(水) 16:11のテキストエディタ上で改行コードを削除する案
・(???) 2018/07/25(水) 17:07のマクロを使ってメモリ上?で改行コードを削除する案
のことを言いたかったんです。

seiyaさんのは、私のスキルだと外部オブジェクトや Evaluateメソッドを多用した複雑なコードはよく理解できないので、改行コードを削除してるのか、そうで無いのかわからず言及できなかったんです・・orz

あと、上記とは関係ないですが、ねむねむさんの2018/07/26(木) 13:25のコード、せっかく「FILE_NO = FreeFile」してるのに途中から「#1」になっちゃってる気が・・・これって「#FreeFile」じゃないですか?(勘違いだったら誠にすみません)

(もこな2) 2018/07/26(木) 19:38


 もこな2さん。
 >せっかく「FILE_NO = FreeFile」してるのに途中から「#1」になっちゃってる気が・・・
 切り貼りでテストコード組んでエラー出ないからときちんとチェックせずに書き込んでしまった。
 お言葉通り、#1は#FreeFileです。
 ご指摘ありがとうございます。
(ねむねむ) 2018/07/27(金) 09:16

seiyaさん連絡遅くなり申し訳ありません。

システムに確認に時間がかかりまして本日
確認できました。

問題なく取込がいけました。

ありがとうございました。

また何かわからないことがありましたらよろしくお願いします。

以上
(さる) 2018/08/03(金) 14:51


コメント返信:

[ 一覧(最新更新順) ]


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