- ベストアンサー
エクセルのデータ変換について
エクセルのセル内データ全て(空白セルも含め)をダブルクォーテーションで囲みたいと思っています。 そして、CSVファイルとして保存したいのです。 何か良い方法をお知りの方、ご教示お願い致します。 例えば、、、 |3|aaa|bbb|aa333|ccccc|ab| | | |あああ|いいい|222| | |aう4| を |"3"|"aaa"|"bbb"|"aa333"|"ccccc"|"ab"|""|""|""|"あああ"|"いいい"|"222"|""|""|"aう4"| と言う様に変換したいのです。 よろしくお願い致します。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
>セル内データ全て(空白セルも含め)をダブルクォーテーションで囲みたい・・・・ っと言う事は、 |3|aaa|bbb|aa333|ccccc|ab| | | |あああ|いいい|222| | |aう4| このデータは一つのセルに入っているのではなく、 3 がA1セルで aう4 が o1セル の様に個々のセルに入っているわけですよね。 ならば、任意の空きセルに関数式で =""""&A1&"""" っと入力してやれば "3" っと言う表示にできますよね。 あとはその任意のセルを横方向へ14セルだけフィルしてやれば |"3"|"aaa"|"bbb"|"aa333"|"ccccc"|"ab"|""|""|""|"あああ"|"いいい"|"222"|""|""|"aう4"| になりますよね。 その関数式をを一旦コピー&ペーストで値にして切り取って、値にして張り付ける。 この作業をデータがあるだけ分でやればいいのでは? たとえばデータが A1~o1セルに入っていて、それが下方向へ Ax~oxセル まであるとしたら、 A列のコピーを取り任意の列(たとえばQ列)に張り付ける。 その任意の列の先頭セル(たとえばQ1セル) に関数式 =""""&A1&"""" を入力してやり、右方向へフィルしてやる(AE1セルまで) そのままコピーを取り、Shift+Ctrl+↓キーでx行目(Q1~AExセル)まで選択して貼り付ける。 そのままコピーを取りコピー&ペーストで値にしてやればいいでしょう。 こうすれば手作業だけで可能だし、VBAの詳しい事が分からなくても、"マクロの記録"の機能を使えばマクロ化も可能です。 ちなみに↓こんな感じ Sub MacroX() ' ' MacroX Macro ' Columns("A:A").Select Selection.Copy ActiveCell.Offset(0, 16).Range("A1").Select ActiveSheet.Paste Application.CutCopyMode = False ActiveCell.Select ActiveCell.FormulaR1C1 = "=""""""""&RC[-16]&""""""""" ActiveCell.Select Selection.AutoFill Destination:=ActiveCell.Range("A1:O1"), Type:= _ xlFillDefault ActiveCell.Range("A1:O1").Select Selection.Copy ActiveCell.Select Range(Selection, Selection.End(xlDown)).Select ActiveSheet.Paste Application.CutCopyMode = False Selection.Copy Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Selection.Cut '※ Range("A1").Select '※ ActiveSheet.Paste '※ Range("A1").Select '※ End Sub 下側の'※印の4行分は、元のデータに上書きする場合なので、無くても可能です。
その他の回答 (4)
- mt2008
- ベストアンサー率52% (885/1701)
CSVを作ってからテキストエディタで「"」を付ける方が手っ取り早いかもしれません。メモ帳は改行を置換できないので他のテキストエディタ(私はTeraPadを愛用)を用意してください。 1.作成したCSVをテキストエディタで開く。 2.「,」を「","」に置換。 3.改行「\n」を「"\n"」に置換。 4.CSVの先頭に「"」を付け、最終行の余計な「"」を削除。 こんな感じでいかがですか?
お礼
早速のご教示誠に有難う御座います。 いろいろな方法があるのですね。 早速試してみます。
- mitarashi
- ベストアンサー率59% (574/965)
#1です。 簡単には、下記のように関数を書き換えると実現できます。(井上治先生ご容赦下さい) Private Function FP_EDIT_COLUMN(GYO As Long, COL As Long) As String If IsEmpty(Cells(GYO, COL)) Then FP_EDIT_COLUMN = """""" Else FP_EDIT_COLUMN = """" & Cells(GYO, COL).Text & """" End If End Function 上記コードはは、Cells(i,j).Textを用いて、横着をしています。セルの値が実数の時は、表示状態で丸められます。それが嫌な時は、Cells(i,j).Valueを文字列に変換して、真面目に組んでください。
お礼
再度のご教示誠に有難う御座います。 こんな私のために、お時間を割いて頂き恐縮です。 はっきり申し上げますと、一体何をおっしゃっているのかが判らない状況です。 まずは、VBAの基礎から勉強してみます。 本当に有難う御座います。
- imogasi
- ベストアンサー率27% (4737/17069)
エクセルの操作、設定ではできないでしょう。 VBAを使うと旧Basic系のステートメントで、Write #があるが、文字列は””で囲むが、数値は囲まない。 これがCSVファイルの標準であったのです。その後の経験では ””で囲まないCSVファイルなどもあった。 ーー VBAで数値にも””で囲むコードを作ることはたやすいが、 なんでまたこんな必要があるのかな。 ーーー 例データ aa 123 www bb 2345 dddf ーー 結果 メモ帳で表示 "aa","123","www" "bb","2345","dddf" ーー コード 3列のデータの例 Sub test01() retusu = 3 Open "C:\Documents and Settings\xxxx\My Documents\test17.csv" For Output As #1 d = Range("A65536").End(xlUp).Row MsgBox d For i = 1 To d For j = 1 To retusu Select Case j Case retusu If IsNumeric(Cells(i, j)) Then Print #1, """" & Cells(i, j) & """" & "," Else Write #1, Cells(i, j) End If Case Else If IsNumeric(Cells(i, j)) Then Print #1, """" & Cells(i, j) & """" & ","; Else Write #1, Cells(i, j); End If End Select Next j Next i Close #1 End Sub こうなるとPrint #一本やりの方がすっきりするかも。
お礼
早速のご教示誠に有難う御座います。 私的に非常に高度な作業となりそうです。 まずはVBAの基礎からお勉強したいと思います。 全くの素人で申し訳ありません。 ご教示頂いたコードをどう利用するのかさえ、、、、 がんばってみます。 有難う御座いました。
- mitarashi
- ベストアンサー率59% (574/965)
マクロ・VBAで良ければ、参考URLを参考にして、File System Objectを使った方のコードで、セルの値が何でも、""""で挟む、セルが空の時は""""を書き出すという様に改造されてはいかがでしょうか。
お礼
早速のご教示誠に有難う御座います。VBAと言う言葉はよく聞き目にするのですが、実際に触ったこともなく、、、、これから勉強したいと思います。 エクセルのデフォルト機能では難しい変換なのですね。 がんばってみます。
お礼
お礼が遅れてしまい申し訳御座いません。なんとか解決できました。 有難う御座いました。