プロが教える店舗&オフィスのセキュリティ対策術

エクセルでタブ区切りのデータを開き編集・保存すると、データ
内にカンマが入ってる部分が" "で囲まれます。なんらかの設定
でこのダブルコーテーションをなくすことは可能でしょうか?

現在は保存後エディタで開いて、置換しております。

エクセルのシートをコピー→エディタに貼り付けて、エディタから
保存する方法も考えましたが、何か単純な設定でいけるのかな…?
と思い、質問した次第ですm(__)m

頻繁にする作業なので(1日10回以上)、何とか簡単な方法は
ないかと考えております。

A 回答 (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のテンプレートとグローバルプロジェクトの検索するために使っています。
    • good
    • 0

こんにちは。



>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 :リモートへファイルを送信します。複数ファイルの送信ができます。
    • good
    • 1
この回答へのお礼

>For Each c In Cells(i, 1).Resize(, Cells(i, 256).End(xlToLeft).Column)
>レコード = レコード & vbTab & c.Value
>Next c

う… 美しい!!

自分ではいくら調べてもここまでキレイになりませんです。
自由自在に動かせるよう勉強したいと思っておりますので、
まずは頂いたコードを解析&自分で確認しながら打ち込む
ところから始めたいと思います。

一点、今になってミスっているところを発見しまして、
実は、ファイル名が「今開いているブックと同じ」で保存したいため
そのまま出力できないのでした…。
そりゃそうですよね、開いてるんですから^^;

現在開いているブックの名前を最初に変更してしまい、
(仮ファイルに保存する)今回のテキスト出力するマクロ
を実行するという方法で避けようと思います。

また、文字化け等を防ぐため、皆さん変数はアルファベットで
宣言してらっしゃるんですねー。私は自分しか使わないマクロ
なので、自由自在に思いつく言葉を打ってしまっておりました^^;;
これも定番の表記で慣れていきたいです。
どうもありがとうございました。

あ、BASP21についても調べてみます!

お礼日時:2007/05/23 18:48

#3 です。


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

この回答への補足

× Print #ファイル, strREC
○ Print #ファイル, レコード

でした。訂正しまーす!

補足日時:2007/05/23 14:38
    • good
    • 0
この回答へのお礼

そのようなわけで、エクセルで保存の方法についてお力添え
頂けませんでしょうか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行まで行っちゃっていいですか?^^;;;

それとも何か華麗な方法があるのでしょうか…。
誠にずうずうしいのですが、ご教示ください。

お礼日時:2007/05/23 14:22

こんにちは。



>エクセルでタブ区切りのデータを開き編集・保存すると、データ内にカンマが入ってる部分が" "で囲まれます。

それは、そういう仕様ですから仕方がないのですが、エディタの代わりに、以下のような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
    • good
    • 0
この回答へのお礼

ありがとうございます!勉強になります。実際に使ってみました。
データというのがWEBサーバ上の商品レコードでして、従来

・EXCELで編集→エディタで「""」除去→FTP転送

という手順を踏んでいたのですが、エクセルでできれば

・EXCELで編集&「""」除去&FTP転送

とボタン一発でできる様になり、大変に手間が省ける&ミスが
減るんじゃないかなぁと思っております。

お礼日時:2007/05/23 14:11

》 データ内にカンマが入ってる部分が" "で囲まれます



CSV(カンマ区切り)ファイルを作成するときだけと思ってましたが、タブ区切りファイル作成時にもそうなるのですね、必然性は全くなさそうなのに。
面倒だけど、テキスト・エディタに頼るしかないと思います。
    • good
    • 2
この回答へのお礼

そうなんですよね!必然性は無いですよね!
カンマ区切りなら、データ区切りと文字列としての「,」を区別
しなければなりませんが、なぜタブ区切りのデータで??と
不思議で仕方ありません(TーT)

VBAでデータ変換・保存をするようにシートを作ったにも関わらず、
最後にダブルコーテーションを取り除くためだけにエディタを
介すのが何とも不細工で、苦心している次第です。

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

お礼日時:2007/05/23 12:16

初心者です。



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

「なし」や「’」にしていると「”」でくくられますね。
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/05/23 12:10

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A