EXCELにcsv形式の外部データを取り込む際にカンマ区切りで取り込もうとした場合、csvデータの同一セル内に改行データがあると、ずれて表示されてしまいます。
改行を取り除くのはclean関数があることは知っていますが、マクロを利用して、EXCELのデータ→外部データの取り込みの選択だけで取り込む方法はないでしょうか?ご教示ください。

このQ&Aに関連する最新のQ&A

A 回答 (7件)

Sub try()


  Dim WRK As String '一時作業ファイル名。削除するので既存ファイル名と重複させないように。
  Dim buf As String
  Dim tmp As String
  Dim n  As Long
  Dim f

  '読込みファイルを選択
  f = Application.GetOpenFilename("csv,*.csv")
  If VarType(f) = vbBoolean Then Exit Sub
  '作業ファイル名設定
  WRK = Application.DefaultFilePath & "\temporary.csv"
  '読込みファイルOpen
  n = FreeFile
  Open f For Input As #n
  buf = StrConv(InputB(LOF(n), #n), vbUnicode)
  Close #n
  '置換(セル内改行を半角スペースに)
  With CreateObject("VBScript.RegExp")
    .Global = True
    .Pattern = "([^\r])(\n+)"
    buf = .Replace(buf, "$1 ")
  End With
  '作業ファイルOpen
  n = FreeFile
  Open WRK For Output As #n
  Print #n, buf
  Close #n
  '[外部データの取り込み]
  With Sheets.Add
    With .QueryTables.Add(Connection:="TEXT;" & WRK, _
               Destination:=.Range("A1"))
      .AdjustColumnWidth = False
      .TextFileParseType = xlDelimited
      .TextFileTextQualifier = xlTextQualifierDoubleQuote
      .TextFileCommaDelimiter = True
      .Refresh BackgroundQuery:=False
      .Delete
    End With
  End With
  '作業ファイル削除
  Kill WRK
End Sub

Excelで作成したcsvファイルで、セル内改行が含まれている場合は上記で読み込めるはずです。
そのcsvファイルをテキストエディタで編集してしまった場合は、うまくいかなくなるかもしれません。

'[外部データの取り込み]...以降、 Kill WRK までのコードは、無くても構いません。
取り込み前にセル内改行を置換してしまえば、
あとは手作業ででも[外部データの取り込み]ができます。
    • good
    • 2
この回答へのお礼

ありがとうございました。
標準モジュールに上記を貼りつけて、うまく読み込むことができました。
VBAの知識が乏しいので頼ってしまいましたが、これを機に勉強して習得したいと思います。
本当にありがとうございました。

お礼日時:2010/06/17 09:28

何年後しのせっかくの回答だったのに、そのままにしてしまうのは残念ですから、私なりの解釈で回答を入れておきます。



VBAのポイントは、
 '*ここで、Lf を抜く(Excelのセル内改行-Chr(10))
 buf = Replace(buf, vbLf, "")

この部分です。もし、該当するものがありましたら、ここに加えてください。
ここで、ひとつずつ不要コードを抜きますが、vbLf かvbCr のどちらかは残してください。

Clean 関数ですと、改行コードもなくなって一行になってしまいますので、それは使えません。

私の記憶では、Binary でインポートすると、StrConv の変換が必要になるということだったと思いますので、
それを省きました。元のファイル名の末尾に、ファイル名$.csv というのが、変換されたファイルです。
本当は、QueryTablesは、使わなくても出来ますが、ご要望なので、入れておきました。

ただし、ファイルの種類によっては、Cr+Lf で、Lf が落ちてしまい、内容が変わってしまう可能性がありますので、
上手くいかなかったら、その後に、
  buf = Replace(buf, vbCr, vbCrLf)
と加えることで、標準改行コードに戻るはずです。考え方は、単純だと思います。

'//
Sub MyAnswer()
Dim fName As String
Dim bkf As String
Dim fNum As Integer
Dim fbk As String
Dim buf As Variant
 fName = Application.GetOpenFilename("csvファイル(*.csv),*.csv")
 If VarType(fName) = vbBoolean Or fName = "" Then Exit Sub
 fbk = Mid(fName, 1, InStrRev(fName, ".") - 1) & "$.csv"
 fNum = FreeFile()
 
 Open fName For Input As #fNum
 buf = Input(LOF(fNum), #fNum)
 Close fNum
 
 '*ここで、Lf を抜く
 buf = Replace(buf, vbLf, "")
 
 fNum = FreeFile()
 Open fbk For Output As #fNum
 Print #fNum, buf
 Close #fNum
  'Sheet の挿入
   With Sheets.Add(After:=Sheets(Sheets.Count))
   With .QueryTables.Add(Connection:= _
    "TEXT;" & fbk, Destination:=Range("A1"))
    .RefreshOnFileOpen = False
    .RefreshStyle = xlOverwriteCells '上書き設定
    .AdjustColumnWidth = False
    .TextFilePlatform = xlWindows
    .TextFileStartRow = 1
    .TextFileParseType = xlDelimited
    .TextFileSpaceDelimiter = True
    .TextFileConsecutiveDelimiter = True
    .TextFileTextQualifier = xlTextQualifierDoubleQuote
    .TextFileTabDelimiter = True
    .TextFileCommaDelimiter = True
    .Refresh BackgroundQuery:=False
    .Delete
  End With
 End With
 ''Kill fbk 'テンポラリファイルの削除
End Sub
    • good
    • 1
この回答へのお礼

ありがとうございます。
質問を締め切ってしまった後にもかかわらず、ご投稿下さいまして感謝申し上げます。
上記のコードを標準モジュールに貼り付けましてうまく取り込むことができました。
私はVBAの基本的な用語もままならない状態ですので、用語や構造を勉強してコードを理解し、作成できるようになりたいと思っております。
締め切ってしまったためポイントを付与できない状態になってしまい申し訳なく思っております。
本当にありがとうございました。

お礼日時:2010/06/17 20:51

>csvの2つ目を取り込む前に加工して改行をなくしてから取り込むのでは手間がかかる



VBAが十分にできない状態ではこの手作業のが確実で早いのでは?と思います。

>clean関数があることは知っています

この関数を見つける時間をVBAを習得する時間に費やせたらと思います。

VBAでは
Aファイルを読み込みBファイルへ編集して出力する、
Bファイルを読み込みシート01へ値をセットする、
シート01から編集してシート02へ値をセットする、
シート02から編集してCファイルへ出力する、
などシート操作はもちろんファイル操作もできますから、
これまでの関数頼りより対応がかなり広くなり、
極論言えば質問しなくても済む程度になります。

今回はすぐできないにしても、これを機にまた取り組むと良いです。
ここの回答VBAを実行させるくらいは覚えておくべきです。
VBAを習得するにはどうしたら?という質問も出ているくらいですから。

今回の、データはどんな具合になっていますか?。

フリーソフトで「改行だけ取り除く」ものは探してみましたか?。
    • good
    • 0
この回答へのお礼

フリーソフトで探してはおりませんでした。
今回No5さんの方法でうまく取り込むことができましたが、これを機にVBAをきちんと勉強したいと思います。
ありがとうございました。

お礼日時:2010/06/17 09:32

#3の回答者です。


>マクロの作成後にコードを編集するという方法しかできない程度のレベルで

それで十分だと思います。掲示板の回答者の人たちの対応は、それぞれでも、ある程度のことは、それなりに満足させるまで、付き合うはずです。今まで、VBAの質問は、途中で分からなくなって、投げ出していたのではありませんか?そのようにお見受けしているからです。

VBAは、基本的に、Alt + F11 で開いたら、標準モジュールを挿入して、そこに貼り付けて、画面を締めて、フォーム・ツールボタンをつけるなり、Alt + F8 で、選んで実行すれば良いということさえすればよいのですね。分からないことは、分からないで、ここを教えて欲しいと、具体的に聞けばよいのですが、あまり漠然としたものは、回答には難しいです。いままで、VBAの質問は、こちらのチェックでは、どれも成功していないように思ったからです。投げ出さないで成功に結びつけてください。

今回の場合は、

------
もとの、CSV が、

123,456,"bb
b"

こうなっているのではないでしょうか?

それを、

123,456,bbb

このように直す、というように理解いているけれども、それはどうなんでしょうか?ということで、それをVBAのコードで作るというわけです。
-------
それ自体は、VBAでは大したことがありませんが、Clean 関数はあくまでも、ワークシートの関数ですから、それなりに方法がある、ということです。
    • good
    • 0
この回答へのお礼

>今まで、VBAの質問は、途中で分からなくなって、投げ出していたのではありませんか?そのようにお見受けしているからです。
★おっしゃる通りです。ですので私でもできそうな回答を選んで使用させていただいておりました。
VBAのコードを見ても自分のファイルにあてはめた時にどこをどう直せばよいのかわからず諦めていたのです。

今回ご質問させていただいた理由は複数のcsvファイルデータをA4サイズ縦1枚の表示にしたいからです。
仕事でこちらからお客様に提示した項目に入力していただいたものをcsv形式で媒体に保存して頂き、提出していただいております。それを見やすいようにしたいと思っております。csvファイルは1行目に項目名、2行目に内容が入っております。csvファイルは2つです。
しかし、その状態では見づらいし内容確認に時間がかかるので見やすくするためにexcelで取り込んで(sheet1にはcsvの1つ目、sheet2にはcsvの2つ目を取り込む)、sheet3にレイアウトして表示しようと考えました。
csvの1つ目は文章的なものがないので同一セル内に改行がないため、excelにとりこんでも同じレイアウトで表示されます。しかしcsvの2つ目をexcelにとりこんだところ、文章を入力するセルで改行されたものが、改行以降から別の場所(A列)に表示されてしまったため目的が達成できないでおります。検索したところclean関数で改行をなくすことができるところまではわかったという状況です。外部データの取り込みはマクロの記録で自動的にできるようになったのですが、改行によって分断されるところが解決されればと思いました。csvの2つ目を取り込む前に加工して改行をなくしてから取り込むのでは手間がかかるし、私以外の複数の人間が簡単に作業ができればと思ったのです。
それは業者に頼めば済むことではないかと思われるかもしれませんが予算の関係か後回しにされてシステム化の目処が立っていないのです。ご質問のcsvの構造がどうなっているかは明日にならないとわかりませんので確認いたします。

お礼日時:2010/06/16 22:10

もとの、CSV が、



123,456,"bb
b"

こうなっているのではないでしょうか?

それを、

123,456,bbb

にするということですか?確認してください。Clean 関数は使っても、除去できないと思います。

>マクロを利用して、EXCELのデータ→外部データの取り込みの選択だけで取り込む方法はないでしょうか?
マクロなら、外部データの取り込みの選択自体を、メニューからの取り込みでしたほうが楽です。外部データの取り込みは、テーブルオブジェクトを残してしまいます。

それと、ご質問者さんの過去の質問で、VBAの質問をしながら、私に対する返事を含めて、VBAの回答はきちんと対応がなされていませんが、今回は、VBAの回答は大丈夫なのですか?今度、ダメでしたというのでは、一部の人には覚えられてしまいます。2年も3何年も前とは言いながらも、どこかでご自身のVBA(マクロ)の質問に対してはケジメは必要だと思います。
    • good
    • 0
この回答へのお礼

申し訳ございません。
VBAの構造というのがほとんど分かっておらず、マクロの作成後にコードを編集するという方法しかできない程度のレベルで安易に質問をしてしまいました。
VBAに関する質問は勉強してわかるようになってから致します。
ありがとうございました。

お礼日時:2010/06/16 20:10

想定した形式でない以上、何かプログラムするかデータ補整しないとできないと思った方が良いです。



VBAで取り込みとする方法はどうですか。これならできると思います。


こうなるとCSVをどう作ったかも怪しいしTABとかも気になりますね。
    • good
    • 0

>EXCELのデータ→外部データの取り込みの選択だけで取り込む方法


そこまでMSのエクセルの機能を利用するなら、セル内改行(のコード文字)だけを取り除く操作(ダイアロウグボックスなどの選択肢)が無い以上、どうしようもないのでは。
なぜそんなことを改めて聞くのかな。
(VBAでも勉強して)自前で、CSVファイルの各行(レコード)を順次読んで、セル内改行のコードは削除し、書き出し他ファイルを作ってしまうとか、
レコードを読み込んだときに、セル内改行コードを取り除き、項目(列・フィールド)ごとにセルにセットしていけば仕舞いでしょう。10数行のコードで出来ることだ。
先所のためには
Instr関数で捉えられる
そのままシートに読み込んでからChar(10)を空白に置換する方法もあるのでは。
それはChar(10)はCTRL+Jで捉えられること
http://officetanaka.net/excel/function/tips/tips …
を読むこと。Googleで「セル内改行 削除」で照会してみたらこういうのも直ぐ見つかる。
    • good
    • 0

このQ&Aに関連する人気のQ&A

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

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q*.txtをexcelで読込、""内の改行で…

年賀状の印刷のためにoutlookの顧客データを利用しています。
outlookでデータをエクスポートで*.txtファイルへ出力し、これをexcelへインポートして整理してから、accessへ渡し、年賀状宛名印刷しています。
通常、郵便番号、住所、氏名などであれば問題ないのですが、outlookのメモ欄にいろいろな過去のデータも記してあり、これに改行記号が含まれています。
今回、このメモも一緒にエクスポートし、顧客リストも合せて作成しようと思いました。
しかし、excelで*.txtファイルを読み込んだ時に、どうも、このメモ欄の中の改行記号で、excelの行が変わってしまうようです。
(秀丸で見たところ、"メモ欄内のデータ"となっているが、""内に改行記号があると、行が変わってしまう)
顧客データが沢山になり、いちいちこれを整えるのも面倒ですが、何か良い方法はあるのでしょうか。

Aベストアンサー

テキスト形式のファイルを作ってテストして見ました。
多分16進表示「0d」(jiscode13)「0a」(jiscode10)が問題なのだと思います。(改行と復帰のコード。)
    エクセル読込み・メモ帳表示
chr(13)----------OK------------改行せず     chr(10)----------OK-------------改行せず
chr(10)+chr(13)--空白行入る-------改行せず
chr(13)+chr(10)--OK-------------改行する
メモ欄を、秀丸で16進表示したとき、0a,0dの在りかたが、どうなっているのか、パターンを説明していただければ、10行ぐらいのVBAコードで修正が出来そうですが(お望みなら)。#2のご回答のように、全置換で解決すれば、結構なんですが。(範囲指定の全置換も出来ますので、要らぬ所へ影響しないように、活用する場面があるかもしれません。)

QEXCEL VBA で現在開いているブックのファイル名を取得する方法

EXCEL2003 VBAで業務を簡素化するために、現在開いているブックのファイル名を取得する方法が分かりません。
作業手順をマクロを使って処理していますが、オリジナルのワークブックをファイル名を変えて保存し、以後、このワークブックを読み込んで使用しています。
このときのVBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり、以後の業務に使用できません。
常にファイル名を取得出来るVBAをどなたか、教えて下さい。

Aベストアンサー

>現在開いているブックのファイル名
 ちょっと曖昧な表現かなぁという気もいたしますが、VBAが書いてあるブックのブック名は
ThisWorkbook.Name
で、現在 "アクティブにして" 操作対象になっているブックの名前は
ActiveWorkbook.Name
ですね。

 しかし、
>VBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり
というような文脈からすると、
ThisWorkbook.Name
の方ですかね。

QEXCEL VBAマクロ作成で、他のEXCELからデータを取り込みたい

メインプログラム(EXCEL VBA)より、
他のフォルダーにあるEXCELの項目の内容を取り込みたいです。
たとえば他のフォルダーのEXCELのRange("A2:A3").ValueをメインプログラムのRange("C2:C3").Valueにセットしたい時です。

・コマンドボタン押したら、どこのEXCELから取り込むかのポップアップ(?)は、表示はできてます。
・作業者が選んだパスとブックもMsgBoxで表示できてるので、もらう相手の場所も取得できてます。

・となると次はOPEN,INPUTですか?
テキストデータの取り込みですと、Inputでそのバッファを定義してるのですが、なんか違うような。。。

よろしくお願いします!

Aベストアンサー

私がやる方法です。

Dim writeSheet As Worksheet ' 自分自身の書き出し先シート
Set writeSheet = ThisWorkbook.Worksheets(1) ' Sheet1 を参照

Dim readBook As Workbook ' 相手ブック
Set readBook = Workbooks.Open(filename) ' 相手ブックを開いて参照
Dim readSheet As WorkSheet ' 相手シート
Set readSheet = readBook.Worksheets("sheetName") ' 相手シートを参照
' または Set readSheet = readBook.Worksheets(sheetIndex)

' 例えば
writeSheet.Cells(1, 1).Value = readSheet.Cells(2, 2).Value ' 相手シートの B2 の値を自分自身の A1 に書き込む

readBook.Close False ' 相手ブックを閉じる
Set readSheet = Nothing
Set readBook = Nothing

私がやる方法です。

Dim writeSheet As Worksheet ' 自分自身の書き出し先シート
Set writeSheet = ThisWorkbook.Worksheets(1) ' Sheet1 を参照

Dim readBook As Workbook ' 相手ブック
Set readBook = Workbooks.Open(filename) ' 相手ブックを開いて参照
Dim readSheet As WorkSheet ' 相手シート
Set readSheet = readBook.Worksheets("sheetName") ' 相手シートを参照
' または Set readSheet = readBook.Worksheets(sheetIndex)

' 例えば
writeSheet.Cells(1, 1).Value = readSheet.Ce...続きを読む

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

お願いします。
エクセル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にリネームしておいて、エクセルから開くときにウィザードで列のデータ形式を文字列と指定しています。もっと簡単な方法が教えてください。(頻繁にファイルを開くので。。。)

Aベストアンサー

1.マクロを使わないと出来ません。
  こんな感じです。
 Open "CsvFileName.csv" for Output as #1
 For Row = 1 to 10
  For Col = 1 to 10
   Select Case Col
    Case 1
     Print #1 Chr$(&H22) & Cell(Row, Col).Text & Chr$(&H22);
    Case 2
     Print #1 Chr$(&H22) & Cell(Row, Col).Text & Chr$(&H22);
    Case Else
     Print #1 Cell(Row, Col).Text;
   End Select
   If Col = 10 Then
    Print #1, ""
   Else
    Print #1, ",";
   End If
  Next Col
 Next Row
 Close #1

2.マクロを使えば自動化できます。
「データ」メニューの「外部データの取り込み」で「テキストファイル」を指定してCSVファイルを選択します。
テキスト取り込みウィザードで列のデータ形式を文字列と指定します。
上記の操作を「マクロの記録」でマクロにしてから
実用になるようにマクロを修正します。

1.マクロを使わないと出来ません。
  こんな感じです。
 Open "CsvFileName.csv" for Output as #1
 For Row = 1 to 10
  For Col = 1 to 10
   Select Case Col
    Case 1
     Print #1 Chr$(&H22) & Cell(Row, Col).Text & Chr$(&H22);
    Case 2
     Print #1 Chr$(&H22) & Cell(Row, Col).Text & Chr$(&H22);
    Case Else
     Print #1 Cell(Row, Col).Text;
   End Select
   If Col = 10 Then
    Print #1, ""
   Else
   ...続きを読む

Q途中で改行されたCSVをAccessに正常に取り込むには?

以下のようなCSVファイルがあり、これをAccessにインポートしようとしています。

フィールド1  数字7桁
フィールド2  数字2桁
・・・・・   
フィールド20 テキスト42桁
・・・
フィールド26 数字13桁

ただ、レコードの中には長すぎるためか途中で改行されてしまっている
レコードがあり、レコードが途中で切れてしまい、続きが次の行に
読み込まれると言う少し困った状態になっています。
(見たところ、フィールド20で切れているようです)

数箇所なら元のCSVを修正してから取り込めばいいのですが、全体が約80万件で、
そのうち200件以上はあるため、手作業でなく何か自動的に直す方法で対処したいと思っています。
(元のCSV自体が読み込みが重いため、手作業は困難です・・)

Accessに取り込むためのいい方法はないでしょうか?

OSはWinXPのSP2、Accessは2003です。

Aベストアンサー

検索や置換に正規表現を使えるテキストエディタやPerlの処理系が
あれば、対処出来ます。

フィールド1が数値なので、改行直後は数字であるのが正しいはずで
すよね。テキストの途中で手動で改行してしまったような場合は改
行直後が数字ではない可能性が高いので、そのパターンを見つけて
置換してしまいましょう。たとえば(\r)([^0-9])を\2にとかね。

CSVの処理はOffice製品以外を使うのがコツです。

QEXCELファイルのカレントフォルダを取得するには?

EXCELファイルのカレントフォルダを取得するには?

C:\経理\予算.xls

D:\2005年度\予算.xls

EXCEL97ファイルがあります。

VBAで
  カレントフォルダ名
(C:\経理\,D:\2005年度\)
を取得する事は可能でしょうか?

CURDIRでは上手い方法が見つかりませんでした。

Aベストアンサー

こんばんは。
Excel97 でも、同じですね。以下で試してみてください。

Sub test()
'このブックのパス
a = ThisWorkbook.Path
'アクティブブックのパス
b = ActiveWorkbook.Path
'Excelで設定されたデフォルトパス
c = Application.DefaultFilePath
'カレントディレクトリ
d = CurDir
MsgBox "このブックのパス   : " & a & Chr(13) & _
   "アクティブブックのパス: " & b & Chr(13) & _
   "デフォルトパス    : " & c & Chr(13) & _
   "カレントディレクトリ : " & d & Chr(13)
End Sub

QCSVファイルの中で、「 , 」カンマを使いたい

「 , 」で区切られたCSVファイルの中で、「 , 」カンマを使いたいのですが、可能でしょうか?

具体的には「これは1,500円でした。」というように、CSVファイルに収められた文章内で出てくる半角の数字(お金)の区切りに使いたいのです。
全角では代用したくないのですが、CSVファイルでデータを受け渡しする際に、困っています。

例えば、特殊文字などで対応可能でしょうか?

Aベストアンサー

受け渡しに使うと言うことは相手方のアプリケーションのことも考えなければいけないのですが・・・とりあえず対応が簡単そうな方法を。

1.各セルを""で囲む。(もちろんデータにダブルクォートがある場合はカンマと同様に困ります。
2.カンマで区切らずにタブで区切る。(比較的使われない文字ですが、やはりデータ中にタブがあるとカンマと同様です)

難しいけれど完璧に対応するためには、データ中の区切り文字は特殊な文字列に変更し、受け取り側のアプリケーションではその特殊な文字列をデータ中の区切り文字として扱うという方法が使われます。
例えば、データ中のカンマは\,にするとか。

データ作成側、受け取り側でそれぞれどこまで対応できるのか分かるともっと簡単かつ具体的な方法を回答できるかも知れません。

Qテキストファイルから改行コードを削除して読込む方法

ExcelエクセルVBAマクロについてテキストファイルから改行コードを取り除いて
変数に読み込む方法について確認させてください。

下記のVBAログラムはWordファイルをテキストファイルに落としたファイルを変数aに
読み込んでいます。
このとき、読み込んだテキストファイルはWordファイルをテキストファイルに
落とし込んだファイルなので改行コードが残ってしまいます。
この改行コードを削除したうえで変数aに読み込みたいのですが可能でしょうか。
改行コードはメモ帳では「↓」と下矢印に似た文字で表示されます。
(実際には下矢印ではないようです。)
今のところ、Replace関数で改行コードを削除するプログラムを
考えているのですが、改行コードのVBAでの表現方法が分からないので
先に進むことが出来ません。いい案があればぜひご教授下さい。
あるいはほかの方法でも改行コードが削除出来れば結構です。

またこの変数aに読み込んである文字列からかぎカッコの内部にある文字を
抽出してエクセルの行方向に出力する方法があればご教授頂ければ幸いです。
例えば
“あなたは「こんにちは」と言いました。
私は「元気ですか」と聞きました。”

が文字列aに読み込んである場合、“こんにちは”、“元気ですか”を抽出して
エクセルに順に出力という方法です。

色々と書きましたが、よろしくお願いいたします。
以下、VBAプログラム本文です。

----------------------------------
Sub sample1()

Dim a As String

a = CreateObject("Scripting.FileSystemObject").GetFile("C:\sample.txt").OpenAsTextStream.Readall
CreateObject("Scripting.FileSystemObject").GetFile("C:\sample.txt").OpenAsTextStream.Close

End Sub

ExcelエクセルVBAマクロについてテキストファイルから改行コードを取り除いて
変数に読み込む方法について確認させてください。

下記のVBAログラムはWordファイルをテキストファイルに落としたファイルを変数aに
読み込んでいます。
このとき、読み込んだテキストファイルはWordファイルをテキストファイルに
落とし込んだファイルなので改行コードが残ってしまいます。
この改行コードを削除したうえで変数aに読み込みたいのですが可能でしょうか。
改行コードはメモ帳では「↓」と下矢印に似た文字で表示されま...続きを読む

Aベストアンサー

Windowsの改行はCRLFです。#1さんの仰るとおり、chr(13)+chr(10)ですね。
あるいはvbCr,vbLf,vbCrLfなんてのもあります。

あとプログラム本文は良くないです。
最低でもこう書くべきです。
'-------------------------------------------------
dim objStream as Object
set objStream = CreateObject("Scripting.FileSystemObject").GetFile("C:\sample.txt").OpenAsTextStream
a=objStream.readall
objStream.Close
'--------------------------------------------------
もとのソースだと、...OpenAsTextStreamと書いた時点でテキストを開いてます。
1回目と2回目は別のモノ。つまり2回開いてて、1回目は開きっぱなし。

>かぎカッコの内部にある文字を抽出

これはご自分で考えてみて下さい。
例えば、crlfを除去したのなら
b=replace(a,"「",vbcr)
b=replace(b,"」",vbcr)
とでもしておいてvbcrでSplit()すれば配列の奇数番目が括弧の中身です。
括弧が閉じてない場合とか半角だったりする場合とかもあるので注意ですね。
一番良いのは正規表現を使う方法ですが、これはちょっとハードルが高いでしょう。

Windowsの改行はCRLFです。#1さんの仰るとおり、chr(13)+chr(10)ですね。
あるいはvbCr,vbLf,vbCrLfなんてのもあります。

あとプログラム本文は良くないです。
最低でもこう書くべきです。
'-------------------------------------------------
dim objStream as Object
set objStream = CreateObject("Scripting.FileSystemObject").GetFile("C:\sample.txt").OpenAsTextStream
a=objStream.readall
objStream.Close
'--------------------------------------------------
もとのソースだと、...OpenAsTextSt...続きを読む

Q【VBA】ExcelマクロでCSVファイルに保存したデータが""で囲まれてしまう

添付図のような、Excel2003で作成した表内のデータを
CSVで保存するマクロを作成したのですが、
図のように、CSVファイルに「""」で値が囲まれた状態で、
保存されてしまいます。

下記にマクロを記載しますので、
どうすれば文字列が「""」で囲まれずに、
カンマ区切りだけのデータで出力されるのか、
ご存知の方おられましたら、ご教示お願い致します。

Sub csv保存()
Dim フォルダ名 As String
Dim パス名 As String
Dim ファイル名 As String
Dim データ As Variant
Dim 行数 As Long, 列数 As Integer
Dim i As Integer, j As Long, k As Long

ファイル名 = "test.csv"
フォルダ名 = "csv"
パス名 = ActiveWorkbook.Path & "\" & _
フォルダ名

'csvフォルダが存在しなければ作成する
If Dir(パス名, vbDirectory) = "" Then
MkDir パス名
End If
ChDir パス名

Open ファイル名 For Output As #1

For i = 1 To Worksheets.Count
Worksheets(i).Activate
Worksheets(i).Cells(1, 1).Select
ActiveCell.CurrentRegion.Select
行数 = Selection.Rows.Count
列数 = Selection.Columns.Count

For j = 1 To 行数
For k = 1 To 列数 - 1
データ = Selection.Cells(j, k) _
.Value
Write #1, データ;
Next k
Write #1, Selection.Cells(j, 列数) _
.Value
Next j
Next i
Close #1
End Sub

添付図のような、Excel2003で作成した表内のデータを
CSVで保存するマクロを作成したのですが、
図のように、CSVファイルに「""」で値が囲まれた状態で、
保存されてしまいます。

下記にマクロを記載しますので、
どうすれば文字列が「""」で囲まれずに、
カンマ区切りだけのデータで出力されるのか、
ご存知の方おられましたら、ご教示お願い致します。

Sub csv保存()
Dim フォルダ名 As String
Dim パス名 As String
Dim ファイル名 As String
Dim データ As Variant
Dim ...続きを読む

Aベストアンサー

Write # は文字列を""で囲んで出力する仕様になっています。
そのまま出力したければ、Print #を利用すればよろしいかと。
ただし、Printの場合は区切り文字(カンマ)を自動で出力してくれませんので、併せて出力する必要があります。

For j = 1 To 行数
  For k = 1 To 列数 - 1
    データ = Selection.Cells(j, k) .Value
    Print #1, データ; ",";
  Next k
  Print #1, Selection.Cells(j, 列数).Value
Next j

なお、いらぬおせっかいですが、ドライブが複数ある環境下だと、
 ChDir パス名
だけでは必ずしもcvsフォルダ内に、ファイルが作成されるとは限りません。
 Open パス名 & "\" & ファイル名 For Output As #1
のように、フルパスで指定しておいた方が確実かと…

Q文字列として"(ダブルコーテーション)を表示させる方法

こんにちは。文字列として、ダブルコーテーションを表示させるには、どうすればよいのか教えてください。m(__)m


例えば、
<font size="2">あいうえお</font>

というタグの「あいうえお」の部分が、セルA1にあった場合、

="<font size="2">"&A1&"</font>"という表示にしたいのです。

"2"のダブルコーテーションも文字列として表示させるには、どうすればよろしいのでしょうか。

教えてください。よろしくお願い致します。

Aベストアンサー

こんにちは~

表示形式は 「標準」 のままで、
ダブルコーテーションを、ダブルコーテーションで囲んでください。

""2""

="<font size=""2"">"&A1&"</font>"

としてみてください。


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

人気Q&Aランキング

おすすめ情報