はじめまして。
仕事でエクセルデータをカンマ区切り、ダブルコーテーション囲みのテキストデータにする必要があります。
例)
”111”,"222","","","","666""
このように空白のセルもあり、そのセルもダブルコーテーションで囲みたいです。
VBAで変更する方法をどこかで見かけましたが、張り付けてみましたが、上手く動きませんでした。
超初心者ですので、わかりやすく教えていただけると有り難いです。
お手数をおかけしますが、宜しくお願い致します。
No.6ベストアンサー
- 回答日時:
Unicode 出力の件ですが、せっかく、個人用マクロブックに納められる(つもり)ので、それを、書き換えるよりも、後づけマクロのほうがよいかもしれません。
一緒にしてしまうと、Unicodeのみになってしまいますから、それも望まないし……とあれこれ考えて、単独マクロで、Unicodeファイル判別するプログラムもつけました。BigEndien も LittleEndienも別けますが、出力は、BigEndienだけです。
こういうのは、余計なものかもしれません。
'//
Public Sub Convert2UNICODE()
'シフトJISをUnicodeに替えるマクロ
Dim stream As Object
Dim stream2 As Object
Dim fname As Variant
Dim buf As Variant
Dim b() As Byte
Dim i As Long
fname = Application.GetOpenFilename _
("File (*.*), *.*", 1, "ファイルオープン")
If VarType(fname) = vbBoolean Then Exit Sub
Open fname For Binary As #1
ReDim b(1 To 6)
Get #1, , b
Close #1
For i = 1 To 6
buf = buf & Hex(b(i))
Next
If buf Like "FFFE*" Or buf Like "FEFF*" Then
MsgBox "ファイルはすでにUnicodeです。", vbExclamation
Exit Sub
End If
'-------変換プログラム-----------
On Error GoTo ErrHandler
Set stream = CreateObject("ADODB.Stream")
stream.Open
stream.Type = 2
stream.Charset = "shift_jis"
stream.LoadFromFile fname
Set stream2 = CreateObject("ADODB.Stream")
stream2.Open
stream2.Charset = "unicode"
stream.CopyTo stream2
stream2.SaveToFile (fname), 2
stream2.Close
stream.Close
Set stream2 = Nothing
Set stream = Nothing
Exit Sub
ErrHandler:
If Err.Number <> 0 Then
Msgbox Err.Number & " :" & Err.Description
End If
End Sub
No.8
- 回答日時:
>こちらは、そのマクロの後に追加で付けたらいいんでしょうか?
この件については、私は迷いました。どうしたものかと。
私のほうが言い出した話ですし、ノウハウを公開しても、その価値と需要とは比例していません。
CSVの出力に組み込んでしまえばよいのですが、必ずしも、UNICODE CSVが必要とは限らないわけです。オプションで切り分けるには、UserFormなどで作った方がよいけれども、それほどにはないかもしれません。それが、必要なときは、Windowsをやっている時で、年に1度の頻度もないかもしれません。
例えば、テキストエディタのNotePad ++ でも、変換が利きます。
私の持論なのですが、個人用マクロブックに入れるものは、本当に厳選したものしかいれないように、また頻繁に使うものだけにする、ということにしています。あまり詰め込むと、Excelの起動が遅くなるからです。
参考にするだけで、テキストファイルにしておいて、何か思い出した時にでも、コードを貼り付けて使っていただいてもよろしいのではありませんか?
もし、Unicode CSVなどが、よく使うようでしたら、もう一度、コードを練り直すべきかもしれません。VBAでは、考えている以上の自由なことは出来ますが、汎用性がありません。新しい技術で、Excel DNAアドインなどにすれば、メモリ負担も少なく便利なのですが、未だ、私の技術は、新しい技術には伴わないのです。
なお、Excelは、Access の代わりのデータベースになります。
データベースのJet で、ADODB が使えます。
もうひとつは、本来のExcelの機能のひとつ、Ms Query です。
他にも、MySQL がありますね。
なかなか、全部が万能だとはいきませんが、新しい技術も古い技術も、使えるようになっていれば、新しい表計算スタイルの時代が来ても乗り越えられるような気がします。
初心者の私には、難しいことはわかりませんが、教えていただいたマクロで自分が思い描いていた通りにテキストファイルができ、感激しております。
時間を割いていただき、長い時間お付き合いいただいたこと、感謝いたします。
お陰で仕事がはかどります。
ありがとうございました(*´ω`*)
マクロを書いていただいたアンサーをベストアンサーにさせていただきますね。
ありがとうございました。
No.5
- 回答日時:
#3の回答者です。
まず、このマクロは、Excel2003の時に開発されたもので、当時は、Unicodeなど問題にならなかった時代です。Unicodeの話は後にさせていただいて、私個人としては、なかなか使えるマクロだなって思っています。
(本来は、文字には、「" "」 が付き、数字には、つかないというものだったのです。)
「個人用マクロブック」は、
ここらにも書かれてありますが……
https://allabout.co.jp/gm/gc/297809/
1.記録マクロ(左下の帯の部分-準備完了や開発タブを開いて記録マクロをクリック)
2.「マクロの記録」というダイアログで、保存先を個人用マクロブックにします。
3.画面のどこでもよいので、マウスを一回クリックします。
4.マクロ終了■ で止めます。
5.Alt-F11 で、VBA Editor で画面が開きます。
6.プロジェクトエクスプローラーという画面があります。なければ、
Ctrl + R のショートカットキーで出てきます。
7.VBAProject(PERSONAL.EXLB )あるはずですから、ダブルクリックで開いてみます。
8.標準モジュールというものがあるはずで、そこに、Module1 をクリックします。
9.
Sub Macro1()
Range(**).Select
End Sub
先程の命令は、ここに記録されました。
10.後は、前回のコードをSub ~ End Sub まで、コピー&ペーストしてあげます。
ひとまず、ここで、Ctrl +S で保存
VBA Editor の右上[×]をクリックしても、Excelは終了しません。
右上[×]をクリックして閉じてください。
------------------------
クィックアクセスツールバーの絵は以下を参考にしてください。
https://allabout.co.jp/gm/gc/297722/
1.オプションから設定からです。
2.Excel のオプションの中で、[クイックアクセスツールバー]という項目がありますが、それをクリックして開けます。
3.左側に 右側に
コマンドの選択 クイックアクセスツールバーのユーザー設定
とあります。
4.左側で、マクロを選択すると、個人用マクロブック(PERSONAL.XLSB!Sub CsvOutWithQuatation()) がありますので、それを画面の真ん中のボタンで
「追加→」で右側に表示させます。
5.右側に入ったマクロ名を選択し、右側の画面の下に「変更」がありますので、それをクリックするとダイアログが出てきます。アイコンと名称を選んでつけてあげます。画像は、そのダイアログボックスです。
このアイコンは、本来は、全部で5000以上もあるのですが、このダイアログで選べるのは限定されています。
------------------------
なぜ、個人用マクロブックをおすすめするかというと、使っているブックの拡張子などには影響されずに可能だからです。
Unicode の件については、あったほうがよいかとは思いますが、今、少し長くなりすぎたので、後にさせてください。(今、PCが故障中で直りませんが、なんとか持たせられると思います)
---------------------------
お体お大事に。
No.3
- 回答日時:
こんにちは。
できれば、以下は、個人用マクロブックに入れて、クイックツールバーのアイコンに登録すると便利かと思います。
特に中身はいじる必要性はないと思いますが、この出力は、SJISです。
UNICODE出力になれば、また、少し手を加えなくてはなりません。
'//標準モジュール
Sub CsvOutWithQuatation()
Dim Rng As Range
Dim r As Range
Dim buf As String
Dim fNo As Integer
Dim fn As Variant
Dim c As Variant
'*******設定欄 *********
Const QT As String = """" 'クォーテーション
Const sep As String = "," 'コンマ切り
Const Ext As String = ".csv" '拡張子
'*********************
If TypeName(Selection) = "Range" Then
Set Rng = Selection
If Rng.Count < 3 Then
MsgBox "3セル以上の範囲を選択してください。", vbExclamation
Exit Sub
End If
Else
MsgBox "セルの範囲を選択してください。", vbExclamation: Exit Sub
End If
fn = Application.GetSaveAsFilename _
(Format$(Date, "yy-mm-dd"), "CSV File (*" & Ext & "),*" & Ext & "", 1, "CSV保存")
If VarType(fn) = vbBoolean Or fn = "" Then Exit Sub
If Dir(fn) <> "" Then
If MsgBox(Dir(fn) & "はすでにあります。上書きしますか?", vbExclamation + vbOKCancel) = vbCancel Then
Exit Sub
End If
End If
fNo = FreeFile()
Open fn For Output As #fNo
'********Start Export ************
For Each r In Rng.Rows
For Each c In Range(r.Cells(1), Cells(r.Row, Columns.Count).End(xlToLeft))
buf = buf & sep & QT & c.Value & QT
Next
Print #fNo, Mid(buf, 2)
buf = ""
Next
Close #fNo
Beep
End Sub
No.2
- 回答日時:
関数で作る方法なら下記の内容で如何でしょうか?
前提として例に書かれているデータがA列からF列にあるとして関数を組んでます.
=""""&IF(A1<>"",A1,"""")&""","&IF(B1<>"",B1,"""")&""","&IF(C1<>"",C1,"""")&""","&IF(D1<>"",D1,"""")&""","&IF(E1<>"",E1,"""")&""","&IF(F1<>"",F1,"""")&""""
教えていただいた通りやったら出来ました!!
ご親切に考えてくださり、本当にありがとうございました。
皆様の温かさに感動しております。
ありがとうございました(*´▽`*)
No.1
- 回答日時:
VBAじゃないとダメでしょうか?
いちよう簡単な方法ですが、
①CSV(カンマ区切り)で名まえを付けて保存します。
②保存したデータをテキストエディタで開きます。
③「,」カンマ → 「","」ダブルコーテーションカンマダブルコーテーション 置き換えます。
④「^」正規表現で行の先頭 → 「"」ダブルコーテーション 置き換えます。
⑤「$」正規表現で行の行末 → 「"」ダブルコーテーション 置き換えます。
以上です。正規表現で置き換えが可能なテキストエディタがあれば出来ると思います。
教えてくださり、ありがとうございます。
この方法を試したら、できました!!!!
本当にご親切に教えてくださり感謝です。
ありがとうございました(≧▽≦)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) CSVファイルがカンマ区切りにならない。対処法を教えていただきたいです。 仕事でSMS一斉送信ができ 2 2022/07/01 21:24
- Java javaのCSVデータ読込についてです 6 2022/07/02 10:58
- Excel(エクセル) VBA セルの値と同じ名前のシートにデータを貼り付けするやり方を教えてください 2 2022/05/17 16:26
- Excel(エクセル) VBA 特定の列に入っているテキストをコピペ 2 2023/06/14 11:24
- Excel(エクセル) Excel あらかじめ予定表があり、その月毎のセルに、リストの連続データを入れたい 2 2022/04/07 14:20
- Visual Basic(VBA) vba 等間隔の列に対しての計算 6 2022/05/17 20:15
- Excel(エクセル) エクセルの数式で教えてください。 1 2023/02/02 10:20
- Excel(エクセル) エクセルVBA、ファイル名をセルの値で保存の方法を教えてください。 おそれいります。こちらで数々のエ 6 2023/06/30 22:17
- Excel(エクセル) 【エクセル」 特定のセルで条件抽出した列を、別シートに上から詰めて表示したい。 8 2022/04/08 16:00
- Visual Basic(VBA) Excel VBA 書式変更で困ってます。 オートフィルターの日付フィルターを用いて データの絞り込 2 2022/07/26 22:16
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excel マクロの編集がグレーに...
-
WPSOffice_マクロの有効化について
-
Excelのマクロでボタンを押すと...
-
エクセル ボタンに設定したマク...
-
エクセルで、「いいね」のよう...
-
エクセルの、記録を終了したマ...
-
複数のマクロボタンをまとめて...
-
エクセルマクロで、別のブック...
-
エクセルの表を複数枚印刷した...
-
Excelのマクロ名の並び順の法則...
-
Excelマクロで、稼働中のマクロ...
-
エクセルでマクロ(Excel 4.0)...
-
エクセル マクロ名にブック名...
-
Excel:マクロを消す方法教えて...
-
エクセルで明日の日付を表示す...
-
EXCELのマクロが他のパソコンで...
-
強制的にマクロを有効にするVBA
-
エクセル ボタンを押すと色が変...
-
Excelで、マクロが含まれ...
-
【マクロ】スクショ印刷がうま...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
WPSOffice_マクロの有効化について
-
Excel マクロの編集がグレーに...
-
Excelのマクロでボタンを押すと...
-
エクセルの表を複数枚印刷した...
-
エクセルの、記録を終了したマ...
-
エクセル マクロ名にブック名...
-
複数のマクロボタンをまとめて...
-
エクセルで、「いいね」のよう...
-
エクセルマクロで、別のブック...
-
エクセル ボタンに設定したマク...
-
エクセルでマクロ(Excel 4.0)...
-
別シートのマクロボタンをマク...
-
Excelマクロで、稼働中のマクロ...
-
マクロをマクロを使ってコピー...
-
(Excel VBA)シートコピー時マ...
-
エクセルで明日の日付を表示す...
-
なぜマクロの記録がなくなって...
-
エクセルでマクロを確認できな...
-
Excelのマクロ名の並び順の法則...
-
マクロ実行ボタンを自動削除したい
おすすめ情報
皆様、沢山の方法を丁寧に教えてくださり、本当にありがとうございます(≧▽≦)
ご親切に感動しています。
体調不良で寝ておりましたので、試すことができておらず、申し訳ございません。
皆様から頂いた方法を一つ一つ試していきたいと思っています。
また、ご質問をするかもしれませんので、申し訳ございませんがもうしばらくお付き合いお願い致します。
こんばんは。
丁寧に教えてくださり、本当にありがとうございます。
こんなことができるなんて尊敬です!
だだ、初めからやり方がわかりません 汗)
「できれば、以下は、個人用マクロブックに入れて、クイックツールバーのアイコンに登録すると便利かと思います。
特に中身はいじる必要性はないと思いますが、この出力は、SJISです。
UNICODE出力になれば、また、少し手を加えなくてはなりません。」
ここからわからないので、手順を教えていただけますでしょうか。
お手数をお掛けして申し訳ございません。
先回、教えてくださった通りにやったら出来ました。
本当にありがとうございます。
こちらは、そのマクロの後に追加で付けたらいいんでしょうか?
こんな初心者で、世話がかかり本当に申し訳ありません。
教えていただけると助かります。
よろしくお願いいたします。