エクセルVBAでテキストデータ書き出し方法を解説

このQ&Aのポイント
  • エクセルVBAを使用して、データをテキストに書き出す方法について解説します。
  • A列だけでなく、複数列のデータをテキストにコピーする方法も紹介します。
  • シート名が「メール」で、テキスト名が「テキスト」の場合のコード例も示します。
回答を見る
  • ベストアンサー

エクセル VBA テキストデータ書きだし

お世話になっております。 エクセルのデータに記入したデータをテキストに書き出したいのですが、検索した結果、 A列だけテキスト化には成功したのですが、複数列(A-U)までコピーしたいのです。 シート名"メール" テキスト名"テキスト" 申し訳ございませんが、よろしくお願いします。 Sub テキスト() Dim StrFN As String StrFN = ActiveWorkbook.Path & "\テキスト.txt" Dim i As Long, LngLoop As Long Dim IntFlNo As Integer Worksheets("メール").Activate LngLoop = Range("a65536").End(xlUp).Row IntFlNo = FreeFile Open StrFN For Output As #IntFlNo For i = 1 To LngLoop Print #IntFlNo, Cells(i, "A") Next i Close #IntFlNo End Sub

質問者が選んだベストアンサー

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.2

わざわざテキストファイルを直接書き出さなくても,名前を付けて保存でcsvやタブ切りテキスト形式なり,prn形式で保存する(という操作を新しいマクロの記録でマクロにとって利用してみる)ことでも,テキストファイルを書き出せます。 これは言い換えると,複数列に渡るデータを「いったいどういうフォーマットでテキストにしたいのか」,ご質問では具体的に説明されていない(考えてない?)ということです。 考えてない前提で: sub macro1()  dim r as long  dim a as variant  worksheets("メール").select  open thisworkbook.path & "\テキスト.txt" for output as #1  for r = 1 to range("A65536").end(xlup).row   a = application.transpose(range("A1:U1").offset(r-1))   print #1, join(application.transpose(a),"")  next r  close #1 end sub

nightquest
質問者

お礼

早速のご返信ありがとうございます。 こちらで一発解決しました!! やってみたかったことは、エクセルで複数行、複数列の数字や文字などをメールにコピーするだけなのですが、全くやりかたがわからず検索してみたらこのような方法があったのでテキストに保存でやってみました。 テキスト保存する必要はないのですが、これ方法以外私には検討もつかなかったので・・・ 的確なご返答ありがとうございました。

その他の回答 (1)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.1

Print #IntFlNo, Cells(i, "A") ではA列だけのアウトプットになる。こんなのすぐ判るだろう。 そこでFor Next をネストして s=”” For j=1 to 4 ’D列までの例 s = s & Cells(i,j) & ”,” Next i s = Left(s,Len(s)-1) '最後の列の後のカンマを省く sをアウトプットする。 出できるだろう。

nightquest
質問者

お礼

ご返信ありがとうございます。 とても参考になりました。 勉強不足なものでご迷惑をおかけしました。 今後ともよろしくお願いします。

関連するQ&A

  • エクセルからテキストファイルはきだし

    エクセルのひとつのシートの内容をテキスト形式で吐き出すマクロを教えてください。 エクセルでHTMLメルマガの商品名や金額を編集できるようにしたいのですが、その編集後のファイルをテキストで出すマクロのVBAの書き方を教えてください。 現在、以下で書いておりますがエクセルの中にある「$」が消えてしまいます。$が消えないような書き方を教えてください。また、""が余分についてしまう書き方は避けたいです。よろしくお願い致します。 Sub test() Dim StrFN As String StrFN = ActiveWorkbook.Path & "\data.txt" Dim i As Long, LngLoop As Long Dim IntFlNo As Integer Worksheets("HTML").Activate LngLoop = Range("a65536").End(xlUp).Row IntFlNo = FreeFile Open StrFN For Output As #IntFlNo For i = 1 To LngLoop Print #IntFlNo, Cells(i, 1) Next i Close #IntFlNo End Sub

  • エクセルVBA 行と列の取得

    ご教授下さい。 エクセルでの行と列の最初とデータの入っている最後のデータを以下のようにしてテキストで 取得しようと考えています。 Private Sub Workbook_BeforeClose(Cancel As Boolean) Dim StrFN As String StrFN = "パス.txt" Dim i As Long, LngLoop As Long Dim IntFlNo As Integer Worksheets("sheet1").Activate LngLoop = Range("a65536").End(xlUp).Row IntFlNo = FreeFile Open StrFN For Append As #IntFlNo For i = 1 To LngLoop Write #IntFlNo, Cells(i, 1), 'ログ出力範囲 Next i Close #IntFlN End Sub どうやら列の指定がうまくいってないようです。 Cells(i, 1), 'ログ出力範囲の1をどのように指定すればいいでしょうか? 取得したい範囲については添付しました。 どうかよろしくお願いいたします。

  • 「パスが見つかりません」というエラー

    data.txtにセルの入力内容を出力したくて下記のようなプログラムを書きました。 ところが Open StrFN For Output As #IntFlNo のところで パスが見つかりません というエラーが出てしまいます。原因はわかりますでしょうか。 Sub test() Dim StrFN As String Dim i As Long Dim IntFlNo As Integer StrFN = "c\data.txt" IntFlNo = FreeFile Open StrFN For Output As #IntFlNo For i = 2 To 400000 Write #IntFlNo, Cells(i, 1) & "$" & Cells(i, 2) Next i Close #IntFlNo End Sub

  • マクロでデスクトップに書き出し

    以下のスクリプトについて教えてください。 setで代入したことろはセルの内容がしっかり反映されていたのですが、 =になってからは、書き出されたテキストファイルに不備が出ました。 ググってみたところ、オブジェクト型(セルをまるごとなど)にはsetを使わないとダメとのことでした。 そこで、下記のスクリプトの IntFlNo = FreeFile Open StrFN For Output As #IntFlNo s = Replace(Worksheets("Sheet2").Range("A171").Text, "<br />", vbCrLf) Print #IntFlNo, s s = Replace(Worksheets("Sheet2").Range("B171").Text, "<br />", vbCrLf) Print #IntFlNo, s Close #IntFlNo の部分で、 sの変数を使っている箇所を setで表現したスクリプトを教えてください。 ==================================================== Sub Test() Range("E3").CurrentRegion.Select Selection.Replace What:="" & Chr(10) & "", Replacement:="<br />", LookAt:=xlPart, _ SearchOrder:=xlByRows, MatchCase:=False Application.Wait Now + TimeValue("00:00:01") Dim s As String, IntFlNo As Integer Dim StrFN As String, myObj As Object Set myObj = CreateObject("WScript.Shell") StrFN = myObj.SpecialFolders("Desktop") Set myObj = Nothing StrFN = StrFN & "\d.txt" IntFlNo = FreeFile Open StrFN For Output As #IntFlNo s = Replace(Worksheets("Sheet2").Range("A171").Text, "<br />", vbCrLf) Print #IntFlNo, s s = Replace(Worksheets("Sheet2").Range("B171").Text, "<br />", vbCrLf) Print #IntFlNo, s Close #IntFlNo End Sub

  • エクセルのデータを大量のテキストファイルに書き込みたい。

    エクセルの縦のセルのデータ(下のCells( 4 * j + i, 4))を繰り返しで、400個のテキストファイルに書き込みたいのですが、 下の""内のjは繰り返しせずに、j.txtとなって入力されてしまいます。なにかいい方法がありませんでしょうか。 ご協力お願いします。(ちなみにvbaは初心者です。) Private Sub CommandButton2_Click() Dim n As Long n = FreeFile Dim j As Integer For j = 0 To 399 For i = 1 To 4 a = Cells( 4 * j + i, 4) f2 = ActiveWorkbook.Path & "\j.txt" Open f2 For Append As #n Print #n, a Close #n Next i Next j End Sub 例. 1 2 3 4 5 6 7 8 9 10 12 13 1,2,3,4→1.txt 5,6,7,8→2.txt 9,10,11,12→3.txt

  • 新規テキストファイルを作成して日付名で保存したい。

    すみません誰か、教えて下さい。 新規でテキストファイルを作成して、日付名で保存を しようとしたのですが、ファイル名が不正とのエラーが出ます。 どうすればいいか、教えて頂けませんでしょうか。 また、保存先の指定方法も分かりません。保存先の指定方法も あわせて教えて頂けませんでしょうか。 宜しくお願いします。 Sub 保存() Dim myFileNo As Integer Dim i As Long Dim myLastRow As Long Dim IMA As String IMA = Now & ".txt" Worksheets("内容").Activate myLastRow = Range("A1").CurrentRegion.Rows.Count myFileNo = FreeFile Open IMA For Output As myFileNo For i = 1 To myLastRow Write #myFileNo, Cells(i, 3) Next i Close #myFileNo End Sub

  • エクセル VBA テキストファイル書き出す応用?

    以下のページより、 http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_110_040.html Option Explicit ' テキストファイル書き出すサンプル(2) Sub WRITE_TextFile2() Const cnsFILENAME = "\SAMPLE.txt" Dim intFF As Integer ' FreeFile値 Dim strREC As String ' 書き出すレコード内容 Dim GYO As Long ' 収容するセルの行 Dim GYOMAX As Long ' データが収容された最終行 ' 最終行の取得 GYOMAX = Range("A65536").End(xlUp).Row ' FreeFile値の取得(以降この値で入出力する) intFF = FreeFile ' 指定ファイルをOPEN(出力モード) Open ThisWorkbook.Path & cnsFILENAME For Output As #intFF ' 2行目から開始 GYO = 2 ' 最終行まで繰り返す Do Until GYO > GYOMAX ' A列内容をレコードにセット(先頭は2行目) strREC = Cells(GYO, 1).Value ' レコードを出力 Print #intFF, strREC ' 行を加算 GYO = GYO + 1 Loop ' 指定ファイルをCLOSE Close #intFF End Sub ------------------------------------------------------------- これを参考にしてテキストファイル書き出すのは出来たのですが、 今回は、ちょっと応用で以下のようにしたいです。 Sheet1のA2~A20までテキストファイル名が書いてあるとします。 また、Sheet2~Sheet20ぐらいまで、各Sheetに文章が入っているとします。 テキストファイルに書きだしたいのですが、 Sheet2の内容は、Sheet1のA2のファイル名 Sheet3の内容は、Sheet1のA3のファイル名 Sheet4の内容は、Sheet1のA4のファイル名 このようにしたいのですが、どのようにすればいいのか教えてください。 よろしくお願います。

  • VBAでのテキストデータ追記

    VBAを使ってデータをテキストファイルに追記したいのですが、 A列だけじゃなく A列からF列までのデータを追記させたいと 考えているのですが、 どうやるのか理解できません。 教えていただけますでしょうか? -------------------------------------------------------------- Option Explicit ' テキストファイル書き出すサンプル Sub WRITE_TextFile() Const cnsTitle = "テキストファイル出力処理" Const cnsFilter = "テキストファイル (*.txt;*.dat),*.txt;*.dat" Dim xlAPP As Application ' Applicationオブジェクト Dim intFF As Integer ' FreeFile値 Dim strFileName As String ' OPENするファイル名(フルパス) Dim vntFileName As Variant ' ファイル名受取り用 Dim strREC As String ' 書き出すレコード内容 Dim GYO As Long ' 収容するセルの行 Dim GYOMAX As Long ' データが収容された最終行 Dim lngREC As Long ' レコード件数カウンタ ' Applicationオブジェクト取得 Set xlAPP = Application ' 「名前を付けて保存」のフォームでファイル名の指定を受ける xlAPP.StatusBar = "出力するファイル名を指定して下さい。" ' (1) vntFileName = xlAPP.GetSaveAsFilename(InitialFilename:="SAMPLE.txt", _ FileFilter:=cnsFilter, _ Title:=cnsTitle) ' キャンセルされた場合はFalseが返るので以降の処理は行なわない If VarType(vntFileName) = vbBoolean Then Exit Sub strFileName = vntFileName ' 収容最終行の判定(Excel認知の最終行から上に向かってデータがある行を探す) With ActiveSheet If .FilterMode Then .ShowAllData ' オートフィルタ解除 End With GYOMAX = Cells(65536, 1).End(xlUp).Row ' (2) If GYOMAX < 2 Then xlAPP.StatusBar = False MsgBox "テキストをA列2行目から入力してから起動して下さい。", , cnsTitle Exit Sub End If ' FreeFile値の取得(以降この値で入出力する) intFF = FreeFile ' 指定ファイルをOPEN(出力モード) Open strFileName For Output As #intFF ' (3) ' 2行目から開始 GYO = 2 ' 最終行まで繰り返す Do Until GYO > GYOMAX ' A列内容をレコードにセット(先頭は2行目) strREC = Cells(GYO, 1).Value ' (4) ' レコード件数カウンタの加算 lngREC = lngREC + 1 xlAPP.StatusBar = "出力中です....(" & lngREC & "レコード目)" ' レコードを出力 Print #intFF, strREC ' (5) ' 行を加算 GYO = GYO + 1 Loop ' 指定ファイルをCLOSE Close #intFF xlAPP.StatusBar = False ' 終了の表示 MsgBox "ファイル出力が完了しました。" & vbCr & _ "レコード件数=" & lngREC & "件", vbInformation, cnsTitle End Sub -----------------------------------------------------------------------------

  • 【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

  • エクセルVBAにてテキスト出力がうまくいきません

    エクセルシートの1列に以下のような文字列を打ち込みました。 - a aa aaa aaaa aaaaa - b bb bbb bbbb bbbbb - c cc ccc cccc ccccc - 「-」の2行後をテキストを出力した際のファイル名とし、ファイル名を含んだ次の「-」までの文字列をそのテキストの中に出力したいです。なお、全体の行数は分かっています。 例えば上の文字列に対して実行すると、 a.txt b.txt c.txt というファイルができ、それぞれの中には a aa aaa aaaa aaaaa などがそれぞれ出力されるようにしたいです。 Sub tepa() Dim strFilename As String Dim FileNumber As Integer Dim strREC As String j = 1 For i = 1 To 70 If Cells(i, 1) = "-" Then strFilename = Cells(i + 2, 1) & ".txt" Do While Cells(i + j, 1) <> "-" If i > 70 Then Exit Sub End If FileNumber = FreeFile strREC = Cells(i + j, 1) Open strFilename For Append As FileNumber Print #FileNumber, strREC Close j = j + 1 Loop End If i = i + j Next End Sub さきほど初めてVBAなるものを知り、見よう見まねで書いてみましたが・・・ループに陥ったりテキストファイルが1つめしか出力されなかったりとうまくいきません。 改善点など教えていただけたら嬉しいです。 よろしくお願いします。

専門家に質問してみよう