• ベストアンサー

タブ区切りデータからダブルコーテーションを外したい

エクセルでタブ区切りのデータを開き編集・保存すると、データ 内にカンマが入ってる部分が" "で囲まれます。なんらかの設定 でこのダブルコーテーションをなくすことは可能でしょうか? 現在は保存後エディタで開いて、置換しております。 エクセルのシートをコピー→エディタに貼り付けて、エディタから 保存する方法も考えましたが、何か単純な設定でいけるのかな…? と思い、質問した次第ですm(__)m 頻繁にする作業なので(1日10回以上)、何とか簡単な方法は ないかと考えております。

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.6

こんばんは。 >実は、ファイル名が「今開いているブックと同じ」で保存したいため それは、自然のままにすれば、別のText ファイルになりますね。 >Open exPath & cnsFILENAME For Output As #FileNo それ自体は、アペンドモードではありませんし、新しいテキストファイル生成になっていますけれど。それに、拡張子は、TXT か、TSV としますね。それと、いずれにしても、これを出力するマクロ自体は、どこかのExcel標準/アドインスタイルのブックにおいておかなくてはなりませんよね。 だから、元のファイル名を生かしたいのでしたら、   Dim exPath As String   Dim cnsFILENAME As String   exPath = "保存先パス\" 'Application.DefaultFilePath & "\"   cnsFILENAME = Mid$(ActiveWorkbook.Name, 1, InStrRev(ActiveWorkbook.Name, ".") - 1) & ".txt" 'ここで、拡張子抜きのベース名が取れます。      ・   ・   ・ こんな感じにしてしまえば、Excelブックとは、分離してしまうと思います。 つまり、  Close #FileNo '←ここで、開放されますね。 >これも定番の表記で慣れていきたいです。 この話は、説明するとややこしくなるのですが、今は、.Net の影響もあるのだろうと思いますが、私の知っている限りでは、昔のVBのハンガリアン表記法などとは、暗黙のルール自体が、変わってきているようなのですね。(そんなことは覚える必要はないのですけれど)早い話、自由は自由でよいのです。 ただ、私のVBEの2バイト文字検索が調子が悪いことと、デベロッパーツールを使わない代わりに、ドイツのVBAアドインツール(Mz-Tools=フリー)を使うこともあって、2バイト文字表記がツールではまったく利かないという理由もあるのです。このツールは、おもに、VBAのテンプレートとグローバルプロジェクトの検索するために使っています。

その他の回答 (5)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.5

こんにちは。 >VBAは大変ヨワいんで、 見た限りでは、そんなことはないですよね。ちょっと経験した人にアドバイスされただけで、できれば、もう何も問題ないと思います。もう自力で可能なレベルだと思います。 >保存→ダブルコーテーションを置き換えるという考えでなく、最初からダブルコーテーションのないデータを書き出せば良かったんですね…お恥ずかしいです。 TRX850-MDJ様は、ご自身でじっと考えれば、たぶん、自力ではできただろうにね。 ちょっと直してみました。私としては、操作に直接関わる部分は、アルファベットにしました。実は、私のVBAは、日本語は、文字化けすることがあるからです。 それと、Excel → Text は、あまりすっきりした方法がないのです。理由は、Excel側が2次元になってしまうからです。 Sub SepTabTextOut()   Dim exPath As String      exPath = "保存先パス\" ' Application.DefaultFilePath & "\"   Const cnsFILENAME As String = "ファイル名.txt"   '-----------------------------   Dim レコード As String   Dim c As Variant   Dim i As Long   Dim 最終行 As Long   Dim FileNo As Integer   '-----------------------------      最終行 = Range("A65536").End(xlUp).Row   FileNo = FreeFile()   i = 1   Open exPath & cnsFILENAME For Output As #FileNo   Application.ScreenUpdating = False '気休め   Do Until i > 最終行     For Each c In Cells(i, 1).Resize(, Cells(i, 256).End(xlToLeft).Column)       レコード = レコード & vbTab & c.Value     Next c     Print #FileNo, Mid$(レコード, 2)     レコード = ""     i = i + 1   Loop   Close #FileNo   Application.ScreenUpdating = True '//ここから、FTP に送る// End Sub 私はやったことがないのですが、知っている範囲では、BASP21 を使うのが定番と聞きます。中には、API関数を使う人がいますが、BASP21 のほうが、生で使うのではないので、やりやすいのではないか、と思っています。 http://www.hi-ho.ne.jp/babaq/basp21f.html PutFile :リモートへファイルを送信します。複数ファイルの送信ができます。

TRX850-MDJ
質問者

お礼

>For Each c In Cells(i, 1).Resize(, Cells(i, 256).End(xlToLeft).Column) >レコード = レコード & vbTab & c.Value >Next c う… 美しい!! 自分ではいくら調べてもここまでキレイになりませんです。 自由自在に動かせるよう勉強したいと思っておりますので、 まずは頂いたコードを解析&自分で確認しながら打ち込む ところから始めたいと思います。 一点、今になってミスっているところを発見しまして、 実は、ファイル名が「今開いているブックと同じ」で保存したいため そのまま出力できないのでした…。 そりゃそうですよね、開いてるんですから^^; 現在開いているブックの名前を最初に変更してしまい、 (仮ファイルに保存する)今回のテキスト出力するマクロ を実行するという方法で避けようと思います。 また、文字化け等を防ぐため、皆さん変数はアルファベットで 宣言してらっしゃるんですねー。私は自分しか使わないマクロ なので、自由自在に思いつく言葉を打ってしまっておりました^^;; これも定番の表記で慣れていきたいです。 どうもありがとうございました。 あ、BASP21についても調べてみます!

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

#3 です。 もし、#3 のコードでは逆に面倒だという場合は、ツールボタンを作って、個人用マクロブック用のマクロを考えてみます。(#3 のコードは、あくまでもエディタの代わりで、Excelでは使えません)

TRX850-MDJ
質問者

お礼

そのようなわけで、エクセルで保存の方法についてお力添え 頂けませんでしょうかm(__)m >Excelのマクロでテキスト出力という方法もあります。 というのを拝見してやっと気づいたんですが、 保存→ダブルコーテーションを置き換えるという考えでなく、 最初からダブルコーテーションのないデータを書き出せば 良かったんですね…お恥ずかしいです。 VBAは大変ヨワいんで、晒すのもお恥ずかしい限りですが 以下のようなコードを作成してみました。 (色々検索して作ったので、自分でも良く意味わかっておりません) ・ファイル名と保存先は変更されることがありません ・データは40列×5,000行ほど、行数が増えていきます。 ******************************************************** Const cnsFILENAME = "ファイル名" Path = "保存先パス" '----------------------------- Dim レコード As String Dim 行数 As Long Dim 最終行 As Long '----------------------------- 最終行 = Range("A65536").End(xlUp).Row ファイル = FreeFile Open Path & cnsFILENAME For Output As #ファイル 行数 = 1 Do Until 行数 > 最終行 レコード = Cells(行数, 1) _ + Chr(9) + Cells(行数, 2) + Chr(9) + Cells(行数, 3) _ + Chr(9) + Cells(行数, 4) + Chr(9) + Cells(行数, 5) _ + Chr(9) + Cells(行数, 6) + Chr(9) + Cells(行数, 7) _ + Chr(9) + Cells(行数, 8) + Chr(9) + Cells(行数, 9) _ + Chr(9) + Cells(行数, 10) + Chr(9) + ~略(笑) Print #ファイル, strREC 行数 = 行数 + 1 Loop Close #ファイル ******************************************************** ループ部分が何ともそのままな感じになっております。 このまま40行まで行っちゃっていいですか?^^;;; それとも何か華麗な方法があるのでしょうか…。 誠にずうずうしいのですが、ご教示ください。

TRX850-MDJ
質問者

補足

× Print #ファイル, strREC ○ Print #ファイル, レコード でした。訂正しまーす!

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんにちは。 >エクセルでタブ区切りのデータを開き編集・保存すると、データ内にカンマが入ってる部分が" "で囲まれます。 それは、そういう仕様ですから仕方がないのですが、エディタの代わりに、以下のようなVBScript を使ったらいかがでしょうか? 以下を、メモ帳に貼り付けて、名前は何でもよいのですが、拡張子を、VBS にしてあげます。 例:[CSVCHG.VBS] 後は、そのスクリプトプログラムに、Excelで出力したファイル(拡張子は Txt に限る)にドラッグしてあげれば、「""」のない内容に変わっています。 でなければ、Excelのマクロでテキスト出力という方法もあります。本来は、そのほうが簡単です。 そうでないなら、以下のコードのスクリプトを参考にして、テキストエディタの正規表現置換をすればよいです。 Set objFso = CreateObject("Scripting.FileSystemObject") fname = WScript.Arguments.Item(0) If objFso.GetExtensionName(fname) = "txt" Then Set objTxIn = objFso.OpenTextFile(fname) path = objFso.GetParentFolderName(fname) & "\" txOut = path & "@_" & objFso.GetFileName(fname) Set objTxOut = objFso.CreateTextFile(txOut) Set objRegexp = New RegExp With objRegexp .Pattern ="""([^""]+)""" .Global=True End With Do Until objTxIn.AtEndOfStream =True txTmp = objTxIn.ReadLine() Set Matches = objRegexp.Execute(txTmp) For Each Match in Matches txOut = objRegexp.Replace(txTmp, "$1") ' txOut = Replace(txOut, ",",",'") Next objTxOut.WriteLine(txOut) Loop objTxOut.Write(txOut) objTxIn.Close() objTxOut.Close() MsgBox("終了") Else 'txtファイル以外の場合 MsgBox("txtVファイルをドロップダウンしてください") End If

TRX850-MDJ
質問者

お礼

ありがとうございます!勉強になります。実際に使ってみました。 データというのがWEBサーバ上の商品レコードでして、従来 ・EXCELで編集→エディタで「""」除去→FTP転送 という手順を踏んでいたのですが、エクセルでできれば ・EXCELで編集&「""」除去&FTP転送 とボタン一発でできる様になり、大変に手間が省ける&ミスが 減るんじゃないかなぁと思っております。

noname#204879
noname#204879
回答No.2

》 データ内にカンマが入ってる部分が" "で囲まれます CSV(カンマ区切り)ファイルを作成するときだけと思ってましたが、タブ区切りファイル作成時にもそうなるのですね、必然性は全くなさそうなのに。 面倒だけど、テキスト・エディタに頼るしかないと思います。

TRX850-MDJ
質問者

お礼

そうなんですよね!必然性は無いですよね! カンマ区切りなら、データ区切りと文字列としての「,」を区別 しなければなりませんが、なぜタブ区切りのデータで??と 不思議で仕方ありません(TーT) VBAでデータ変換・保存をするようにシートを作ったにも関わらず、 最後にダブルコーテーションを取り除くためだけにエディタを 介すのが何とも不細工で、苦心している次第です。 レスありがとうございました。

  • ka_na_de
  • ベストアンサー率56% (162/286)
回答No.1

初心者です。 タブ区切りのデータを開こうとすると、 テキスト ファイル ウィザードのウィンドウが表示されると思います。 2番目のウィンドウの「文字列の引用符」を「”」にしていますか? 「なし」や「’」にしていると「”」でくくられますね。

TRX850-MDJ
質問者

お礼

EXCELの画面表示ではなく、テキストデータ上から消したいという 意味でした。私の説明不足で申し訳ございませんでした。

関連するQ&A

  • ダブルクォーテーションカンマ区切りのcsv形式ファイルへの変換方法

    Excelファイルをダブルクォーテーションカンマ区切りのcsv形式ファイルへ変換する方法を教えてください。 "●●","○"○,"◆◆"

  • SQL文のダブルクォーテーションを取りたい。

    SQL2008を使用しております。 2つのDBを統合したいのですがユニークIDがかぶっているデータが あるのでIDを変更したいのですが フリーソフトでINSERT文をTab区切りで出力してIDを変更してINSERT文を 作成するといらない箇所に「"」ダブルクォーテーションが入ってしまします。 もちろんその状態ではクエリ実行できないので困っています。 順序はINSERT文をTab区切りで出力→出力されたTab区切りのcsvのIDを変更→テキストで保存(csvでも保存)→拡張子をsqlに変更するといらない箇所に「"」ダブルクォーテーションが入ってしまします。 変更保存の問題でしょうか? どうしたら「"」ダブルクォーテーションが入らない方法はありませんか? 以上、わかるかた教えてください。 よろしくお願いします。

  • シングルコーテーションをダブルコーテーションに置換

    エクセルで シングルコーテーションを ダブルコーテーションに置換することは出来ないのですか? セルに「'aaa」がはいってるのですが これを「''aaa」にする方法を教えてください。 置換だとなぜかできません。

  • Excelに、ダブルクォーテーションで始まる文字列を貼り付けると、ダブルクォーテーションが消えること

    Excelで、ダブルクォーテーションで始まる文字列をセルに貼り付けたときに ダブルクォーテーションが消えるのですが、 Excelってもともと(標凖的な動作として)そういうものですか。 (F2キーを押すなりして)編集状態にして貼り付ければ、ダブルクォーテーションのついたまま貼り付くのですが、 私はセルを選択して貼り付けただけでも大丈夫だと思っていました。 「文字列を貼り付ける」というのは、例えばテキストエディタ上にあるものを手作業でコピーして貼り付ける、ということです。 「ダブルクォーテーションで始まる文字列」と言っても、 ダブルクォーテーションが3つ以上あったときに消えるのは、最初の1組(2つ)ですね。 しかし、 "AAAA"""BBBB のような場合には、なぜか AAAA"BBBB になるのです。 (ちなみに、この文字列を、質問直前の質問内容確認の画面(IE)でコピーしてExcelに貼り付けたときは、違います。) どのような規則に基づいてダブルクォーテーションが消えるのかも疑問です。 このような仕様になっている理由はなんでしょうか。 また、Excelに文字列を貼り付けるという操作を頻繁に行うため、 できれば、編集状態にしなくても、 セルを選択して貼り付けするだけで、そのままダブルクォーテーションも貼り付いてほしいのですが、 そのためにはどうすればよいのでしょうか。 「セルの書式設定」で、表示形式を文字列にすればよいと思ったのですが、だめでした。 セルには文字列を入れるだけで、数式を入れたりしません。 (数式としては扱ってほしくない、という意味です。) Excelは2000です。

  • ダブルクォーテーション囲いカンマ区切り形式で保存したい

    お願いします。 エクセル2000使用してます。 【質問1】 "名前A","ナマエA","09011111111","aaa@docomo.ne.jp" "名前B","ナマエB","09011111112","bbb@docomo.ne.jp" "名前C","ナマエC","09011111113","ccc@docomo.ne.jp" このように、ワークシートをダブルクォーテーション囲いカンマ区切り形式で保存するにはどうすればよいでしょうか。 【質問2】 上記のデータを読み込むときに電話番号部分の先頭の0が取れてしまうの防ぐために、ファイルの拡張子をtxtにリネームしておいて、エクセルから開くときにウィザードで列のデータ形式を文字列と指定しています。もっと簡単な方法が教えてください。(頻繁にファイルを開くので。。。)

  • CSVでタブ区切り

    はじめまして。エクセル2003を使用中です。 データのやり取りをする際に 「エクセルのデータをCSVでタブ区切り」に変換して送って欲しい と言われました。 保存時に 「名前を付けて保存」→「ファイルの種類」で「CSV」を選択すると「カンマ(,)」で区切られますよね? これを簡単にタブ区切りにしたいのですが・・そんな方法はありますでしょうか? 現在、試作の段階では一旦TXT形式で保存し、ファイル名を直接「CSV」に変更しています。 実は常時この作業を行う者が私よりPCに詳しくない為、この手順だと不安だと言います。 出来る限りわかりやすく作業を行いたいのです。 不明点があれば補足させていただきますので アドバイス等ございましたらどうぞよろしくお願いします。

  • データ書き出し時の、データ区切りについて

    初心者ですが、ご教授ください。 Perlなどで、データを書き出す時に、よく、<>とか、,(カンマ)とか使うと思うのですが、その他の区切り文字として何がオススメなのでしょうか?アフィリエイトなどのリンク先URL内で、<>とか、,(カンマ)とか、"(ダブルクォーテーション)などが使われているため、これに換わる、区切り文字は、何がよいのか教えてもらいたいです。

  • Excel2007でのCSV保存 ダブルクオーテーション

    CSVファイルの加工について 「ダブルクオーテーション」をつけたままの保存を希望しています。 ,"a","s","d"のように""で区切られたデータ(CSV)を エクセルで開いて編集保存すると 通常では ,a,s,d,のデータになってしまいます。 Excel2000では""のついたデータのままで保存できたようなのですが Excel2007でそれを可能にする方法はないのでしょうか? マクロでも構いません。 よろしくお願いいたします。

  • テキスト(タブ区切り)で保存したデータに""が付いてしまう

    Excel上で S(1,1) S(2,1) S(1,2) S(2,2) と書いたデータをテキスト(タブ区切り)で保存し、そのファイルをテキストエディタで表示させると "S(1,1)" "S(2,1)" "S(1,2)" "S(2,2)" といった感じでデータに""が追加されてしまいます。 恐らく()がある事で数式なのか文字なのかを判別する意味でExcelが勝手に付けたものだと思われるのですが、この""を無くす方法はありませんでしょうか?

  • CSVファイルのダブルクォーテーションについて

    ショッピングカート WebCart 2.31 http://www.cgis.biz/ と言うフリーのPHPスクリプトを試しているのですが、商品一覧データをcsv形式でダウンロード出来き、アップロード出来る機能があります。 ダウンロードしたcsvデータをExcel2003で開き、そのまま上書き保存してアップロードすると意図しない表示となります。 ダウンロードしたデータを何もせずアップロードすると正常表示となります。 ダウンロードしたcsvデータをテキストエディタで開くとカンマで区切られたデータが全て「"」で括られていて文字列として扱われていました。 Excel2003で開くときに各データにダブルクォーテーションで括られた形式に出来ないものでしょうか。 よろしくお願い致します。

専門家に質問してみよう