• ベストアンサー

エクセルのシートをテキストで保存したい

A2からB5までデータが入っている時に、 このデータのみ(A1~B1まで除く)をテキスト ファイル(スペース区切り)(.prnファイル) で保存しようとすれば どのようにすればよろしいのでしょうか。 SaveAsを使うとデータの取り出し方法がわからず、 Writeを使うのはCSVファイルにする方法しか分からない 状態です。 よろしくお願いします。

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

  • ベストアンサー
  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.3

補足について、 >最後の行までとんでいってしまいます。 変数Output_Sheetは定義されているでしょうか。定義してなければOn Error GoToで最後まで飛びます。 また、スペース区切りのファイルにならないと思いますので手を加えてみました。On Error GoToの処理も少し手を加えています。 後半部分です。   For lRowNumb = 5 To lLastRowNumb     For nColumNumb = 1 To 24       sData = Cells(lRowNumb, nColumNumb).Value       If nColumNumb < 24 Then '修正         Print #nFrn, sData & " "; '修正       Else '修正         Print #nFrn, sData '修正       End If '修正     Next nColumNumb   Next lRowNumb   Close #nFrn   Exit Sub '追加 HandleError: エラー処理?

fuyu
質問者

お礼

おかげさまで解決いたしました。 本当に、回答ありがとうございました。

その他の回答 (2)

  • i-touch
  • ベストアンサー率40% (170/415)
回答No.2

こんなかんじですか。 項目(A,B,..)が増えたら、そちらもFor-Nextで、変数で変えるといいです。 Cells(縦,横)で指定します。 がんばってくださいね。 '----------------------- Sub saveCells() '■ PRNファイル出力 ----- Dim iFrn As Integer Dim loFF As Long Dim strFname As String Dim strA As String Dim strB As String '保存ファイル名(任意) strFname = "SaveCells.prn" 'データのあるシート名を指定する Worksheets("Sheet1").Activate '保存ファイルを開く iFrn = FreeFile(0) Open strFname For Output As #iFrn '1項目ごとに処理をする For loFF = 2 To 5 'セルのデータを文字列でもらう strA = Cells(loFF, 1).Value strB = Cells(loFF, 2).Value 'ファイルに出力(半角空白区切り) Print #iFrn, strA & " " & strB Next loFF Close #iFrn MsgBox "保存終了しました" & vbCrLf & " File: " & strFname End Sub '---------------- では

fuyu
質問者

補足

回答ありがとうございます。 一度教えていただいた方法でやってみました。 コードは以下になります。 (実際はA5~X5以下をテキストファイルにしようとして います。) On Error GoTo HandleError Dim nFrn As Integer Dim lRowNumb As Long Dim sFilename As String Dim sData As String Dim lLastRowNumb As Long Dim nColumNumb As Integer '最終入力ライン抽出 Worksheets(Output_Sheet).Cells(65536, 1).End(xlUp).Select lLastRowNumb = Selection.Row sFilename = "C:\Usr\output.prn" Worksheets(Output_Sheet).Activate nFrn = FreeFile(0) Open sFilename For Output As #nFrn For lRowNumb = 5 To lLastRowNumb For nColumNumb = 1 To 24 sData = Cells(lRowNumb, nColumNumb).Value Print #nFrn, sData & " " Next nColumNumb Next lRowNumb Close #nFrn HandleError: なぜか、最終入力ラインを抽出する Worksheets(Output_Sheet).Cells(65536, 1).End(xlUp).Select から次の行を読まずに最後の行までとんでいってしまいます。 何かコードに問題があるのでしょうか?

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

1.セル範囲A2~B5までを「新しいブック・単一のシート」にコピーする。   (1)シート名を右クリック。   (2)「移動またはコピー」で移動先ブック名を「新しいブック」にする。 2.ブック(シート)を「名前を付けて保存する」。   (1)タイプを「PRN」とする。   (2)ファイル名をダブルコーテーションで囲めば拡張子も指定可能。 上記をマクロで記録してみて、コードを読んでください。 > データの取り出し方法がわからず DIM nFile as integer OPEN パス+ファイル名 FOR INPUT AS #nFile のようなコマンドを書けば読めます。 ヘルプの「OPEN」でも見てください。 > Writeを使うのはCSVファイルにする方法しか分からない Print #xxをみてください。

fuyu
質問者

補足

教えていただいた方法でやってみました。 On Error GoTo HandleError Sheets(Output_Sheet).Select Sheets(Output_Sheet).Copy ActiveWorkbook.Rows("1:4").Select ActiveWorkbook.Selection.Delete Shift:=xlUp ActiveWorkbook.SaveAs Filename:="C:\USR\output.prn", FileFormat:= _ xlTextPrinter, CreateBackup:=False HandleError: 現在は、一旦シートをコピーして 不必要な行(1行目~4行目)を削除してそれを保存する、 という方法にしております。 しかし、なぜかActiveWorkbook.Rows("1:4").Selectの後に、 Deleteする行(ActiveWorkbook.Selection.Delete Shift:=xlUp)から下 をとばしてプログラムの最後までいってしまいます。 コードに何か問題でもあるのでしょうか?

関連するQ&A

専門家に質問してみよう