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のテンプレートとグローバルプロジェクトの検索するために使っています。
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 :リモートへファイルを送信します。複数ファイルの送信ができます。
>For Each c In Cells(i, 1).Resize(, Cells(i, 256).End(xlToLeft).Column)
>レコード = レコード & vbTab & c.Value
>Next c
う… 美しい!!
自分ではいくら調べてもここまでキレイになりませんです。
自由自在に動かせるよう勉強したいと思っておりますので、
まずは頂いたコードを解析&自分で確認しながら打ち込む
ところから始めたいと思います。
一点、今になってミスっているところを発見しまして、
実は、ファイル名が「今開いているブックと同じ」で保存したいため
そのまま出力できないのでした…。
そりゃそうですよね、開いてるんですから^^;
現在開いているブックの名前を最初に変更してしまい、
(仮ファイルに保存する)今回のテキスト出力するマクロ
を実行するという方法で避けようと思います。
また、文字化け等を防ぐため、皆さん変数はアルファベットで
宣言してらっしゃるんですねー。私は自分しか使わないマクロ
なので、自由自在に思いつく言葉を打ってしまっておりました^^;;
これも定番の表記で慣れていきたいです。
どうもありがとうございました。
あ、BASP21についても調べてみます!
No.4
- 回答日時:
#3 です。
もし、#3 のコードでは逆に面倒だという場合は、ツールボタンを作って、個人用マクロブック用のマクロを考えてみます。(#3 のコードは、あくまでもエディタの代わりで、Excelでは使えません)
そのようなわけで、エクセルで保存の方法についてお力添え
頂けませんでしょうか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行まで行っちゃっていいですか?^^;;;
それとも何か華麗な方法があるのでしょうか…。
誠にずうずうしいのですが、ご教示ください。
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
ありがとうございます!勉強になります。実際に使ってみました。
データというのがWEBサーバ上の商品レコードでして、従来
・EXCELで編集→エディタで「""」除去→FTP転送
という手順を踏んでいたのですが、エクセルでできれば
・EXCELで編集&「""」除去&FTP転送
とボタン一発でできる様になり、大変に手間が省ける&ミスが
減るんじゃないかなぁと思っております。
No.2
- 回答日時:
》 データ内にカンマが入ってる部分が" "で囲まれます
CSV(カンマ区切り)ファイルを作成するときだけと思ってましたが、タブ区切りファイル作成時にもそうなるのですね、必然性は全くなさそうなのに。
面倒だけど、テキスト・エディタに頼るしかないと思います。
そうなんですよね!必然性は無いですよね!
カンマ区切りなら、データ区切りと文字列としての「,」を区別
しなければなりませんが、なぜタブ区切りのデータで??と
不思議で仕方ありません(TーT)
VBAでデータ変換・保存をするようにシートを作ったにも関わらず、
最後にダブルコーテーションを取り除くためだけにエディタを
介すのが何とも不細工で、苦心している次第です。
レスありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/08/03 11:27
- Visual Basic(VBA) VBAコードを張り付け後のエクセルの進め方 2 2023/02/07 18:24
- Excel(エクセル) 【困っています】VBA 追加処理の記述を教えてください。 1 2022/08/25 22:54
- Java javaのCSVデータ読込についてです 6 2022/07/02 10:58
- Visual Basic(VBA) 【前回の続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/16 16:44
- Excel(エクセル) 更新前と更新後の差分をVBAを使って抜き出したい 5 2023/06/01 14:35
- Excel(エクセル) 単価シートから単価をエクセル関数で自動取得する方法 1 2023/07/02 22:00
- Excel(エクセル) エクセルに詳しい方 よく読んでからのご回答お願いします 外部からデータが来ますが、日付が202201 7 2022/06/29 16:15
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/08/03 12:30
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
このQ&Aを見た人はこんなQ&Aも見ています
-
カンパ〜イ!←最初の1杯目、なに頼む?
飲み会で最初に頼む1杯、自由に頼むとしたら何を頼みますか? 最初はビールという縛りは無しにして、好きなものを飲むとしたら何を飲みたいですか。
-
あなたにとってのゴールデンタイムはいつですか?
一週間の中でもっともテンションが上がる「ゴールデンタイム」はいつですか? その逆で、一週間でもっとも落ち込むタイミングでも構いません。 よかったら教えて下さい!
-
これ何て呼びますか Part2
あなたのお住いの地域で、これ、何て呼びますか?
-
牛、豚、鶏、どれか一つ食べられなくなるとしたら?
牛肉、豚肉、鶏肉のうち、どれか一種類をこの先一生食べられなくなるとしたらどれを我慢しますか?
-
とっておきの「まかない飯」を教えて下さい!
飲食店で働く方だけが食べられる、とっておきの「まかない飯」。 働いてらっしゃる方がSNSなどにアップしているのを見ると、表のメニューには出てこない秘密感もあって、「食べたい!!」と毎回思ってしまいます。
-
Excelでcsvやtxtで保存する時にダブルクォートが勝手に付く
Excel(エクセル)
-
エクセルで文字列をtxtファイルに変換すると"がつく
Excel(エクセル)
-
Excelの保存で "を付けないように保存できる?"
Excel(エクセル)
-
-
4
CSVファイルからダブルクォーテーションを削除したい。VBS使用で。
Word(ワード)
-
5
カンマ区切りのCSVファイルから"を削除したい
その他(プログラミング・Web制作)
-
6
【VBA】ExcelマクロでCSVファイルに保存したデータが"で囲まれてしまう
Visual Basic(VBA)
-
7
マクロから出力されるcsvのダブルコーテーションをなくしたい。
Visual Basic(VBA)
-
8
エクセルの"の削除方法を教えてください。
その他(Microsoft Office)
-
9
VBAで””なしのタブ区切りで出力する方法
Excel(エクセル)
-
10
CSVデータの(ダブルクォーテーション)をとりたい!"
その他(プログラミング・Web制作)
-
11
Excelで、空白を表示したい
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?
- ・お風呂の温度、何℃にしてますか?
- ・とっておきの「まかない飯」を教えて下さい!
- ・2024年のうちにやっておきたいこと、ここで宣言しませんか?
- ・いけず言葉しりとり
- ・土曜の昼、学校帰りの昼メシの思い出
- ・忘れられない激○○料理
- ・あなたにとってのゴールデンタイムはいつですか?
- ・とっておきの「夜食」教えて下さい
- ・これまでで一番「情けなかったとき」はいつですか?
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【CSVファイル】先頭の文字列に...
-
100万行のCSVを10万行ずつのフ...
-
Access2007のエキスポートについて
-
TXTで作成したファイルをDATフ...
-
sqlldrのフィールドの属性について
-
ThunderbirdのメールをCSVでま...
-
Access インポート
-
ファイル名が同じ場合自動的に...
-
カンマがデータとして入ってるC...
-
アクセスでcsvに出力した際、頭...
-
Access95のエクスポートで教え...
-
Accessでdatファイルのインポート
-
csvファイルをAccessに取り込む...
-
accessで項目内の文字を自動改...
-
csvファイルが保存すると数...
-
タブ区切りデータからダブルコ...
-
PL/SQLで文字列を分割
-
アクセスがインポートできる容...
-
SQLPLUSで結果を画面に表示しない
-
【Excel】[Expression.Error] ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【CSVファイル】先頭の文字列に...
-
100万行のCSVを10万行ずつのフ...
-
TXTで作成したファイルをDATフ...
-
ThunderbirdのメールをCSVでま...
-
Access インポート
-
アクセスでcsvに出力した際、頭...
-
タブ区切りデータからダブルコ...
-
カンマがデータとして入ってるC...
-
Access2007のエキスポートについて
-
accessで項目内の文字を自動改...
-
csvファイルが保存すると数...
-
Access95のエクスポートで教え...
-
アクセスがインポートできる容...
-
txtをemlに変換したい!
-
CSVファイルのセルに「01」と入...
-
エクセルデータをテキストファ...
-
Accessでdatファイルのインポート
-
VBAでMSアクセスに、Tab区切り...
-
sqlldrのフィールドの属性について
-
複数のテキストファイルをエク...
おすすめ情報