dポイントプレゼントキャンペーン実施中!

Excelマクロ制作を始めて半月たらずの初心者です。

Excelシートの内容を.txtファイルに出力するマクロを作成しております。

目標として、指定した範囲(セルD11~F20)の範囲のみの行列データを出力したいのですが、
現状では、セルD11以下の行列データを出力する方法しか分かりません。

下記の内容が現在制作中のマクロですが、どの様に変更・修正すればよろしいのでしょうか?
皆様方のご教授をお願いいたします。


Sub WriteFile_TXT2()
'
' WriteFile_TXT2 Macro
' 目標:セル範囲指定("D11:F20")してTXTファイル出力
'
Dim ws As Worksheet
'5つめのシートの内容を使用する。
Set ws = ThisWorkbook.Worksheets(5)

Dim datFile As String
datFile = ActiveWorkbook.Path & "\data.txt"

Open datFile For Output As #1

'現行:セルD11からシートの終わりまで1行ずつ繰り返す
Dim i As Long, j As Long

i = 11
Do While ws.Cells(i, 4).Value <> ""
j = 4
Do While ws.Cells(i, j + 1).Value <> ""

Print #1, ws.Cells(i, j).Value & " ";
j = j + 1

Loop

Print #1, ws.Cells(i, j).Value
i = i + 1
Loop


Close #1

MsgBox "data.txtに書き出しました"

End Sub

A 回答 (2件)

こんにちは。


元のコードをそのまま活かして手直ししてみました。なんだか、モヤッとしたコードになってしまいました。そして、#1さんのご指摘は、こちらでは今の段階では触らないままにしておきます。

'//
Sub WriteFile_TXT3()
' WriteFile_TXT2 Macro '変更
' 目標:セル範囲指定("D11:F20")してTXTファイル出力
'-------------------
 Dim ws As Worksheet
 '5つめのシートの内容を使用する。
 Set ws = ThisWorkbook.Worksheets(5)
 Dim datFile As String
 Dim i As Long, j As Long, k As Long, kt As Long
 Dim buf As String  '1行のバッファ
 Const rw As Long = 11 '最初の行
 Const col As Long = 4 '最初の列

 datFile = ActiveWorkbook.Path & "\data.txt" '出力ファイル名
 Open datFile For Output As #1
 For i = rw To ws.Cells(Rows.Count, col).End(xlUp).Row
  For j = col To ws.Cells(i, Columns.Count).End(xlToLeft).Column
   buf = buf & " " & ws.Cells(i, j).Value
  Next j
  k = Len(buf)
  If k > 1 Then '行でまとめて判定
   Print #1, Trim(buf)
  End If
  kt = kt + k
  buf = ""
 Next i
 Close #1
 If kt > 1 Then
  MsgBox "data.txtに書き出しました"
 Else
  MsgBox "出力に失敗しました", vbCritical
 End If
End Sub
    • good
    • 0
この回答へのお礼

うーん、検証を行った所、この方法では指定した範囲内の取り込みは行ってくれないようです。(指定範囲外のセルデータまで取り込んでしまうようです)しかし、この方法は空白のセルがあってもデータの取り込みを行ってくれるようです。(私の方法では、空白セルがあった所で取り込み終了)回答者様の方法は、空白セルを含んだデータの取り込み処理が必要な場合に参考とさせていただきます。

お礼日時:2017/11/11 09:58

もしかしたらですが、アクティブシートの毎回選択範囲を変えてそのセルの値を「data.txt」に書き出す。

と言う事で良いのでしょうか?
またファイル名が固定なので毎回上書きしてしまっても良いのでしょうか?
    • good
    • 0

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

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


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