A2からB5までデータが入っている時に、
このデータのみ(A1~B1まで除く)をテキスト
ファイル(スペース区切り)(.prnファイル)
で保存しようとすれば
どのようにすればよろしいのでしょうか。

SaveAsを使うとデータの取り出し方法がわからず、
Writeを使うのはCSVファイルにする方法しか分からない
状態です。

よろしくお願いします。

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

A 回答 (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:
エラー処理?
    • good
    • 0
この回答へのお礼

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

お礼日時:2001/10/07 18:34

こんなかんじですか。



項目(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
'----------------
では

この回答への補足

回答ありがとうございます。

一度教えていただいた方法でやってみました。

コードは以下になります。
(実際は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
から次の行を読まずに最後の行までとんでいってしまいます。

何かコードに問題があるのでしょうか?

補足日時:2001/10/05 13:16
    • good
    • 0

1.セル範囲A2~B5までを「新しいブック・単一のシート」にコピーする。


  (1)シート名を右クリック。
  (2)「移動またはコピー」で移動先ブック名を「新しいブック」にする。
2.ブック(シート)を「名前を付けて保存する」。
  (1)タイプを「PRN」とする。
  (2)ファイル名をダブルコーテーションで囲めば拡張子も指定可能。

上記をマクロで記録してみて、コードを読んでください。

> データの取り出し方法がわからず

DIM nFile as integer
OPEN パス+ファイル名 FOR INPUT AS #nFile
のようなコマンドを書けば読めます。

ヘルプの「OPEN」でも見てください。

> Writeを使うのはCSVファイルにする方法しか分からない
Print #xxをみてください。

この回答への補足

教えていただいた方法でやってみました。

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)から下
をとばしてプログラムの最後までいってしまいます。
コードに何か問題でもあるのでしょうか?

補足日時:2001/10/05 13:56
    • good
    • 0

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

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

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

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

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

Qcsvファイルを読み込んでデータベースのデータと比較して異なっていた場

csvファイルを読み込んでデータベースのデータと比較して異なっていた場合は更新するようにしたいと考えています。

csvデータ…10
データベースから取得したデータ…10.0
※比較するテーブルのフィールドのデータ型はFLOAT型です。

文字列を数値変換して比較、またはデータベースから取得したデータを文字列に変換して比較、どっちがいいのでしょうか。
またどのように比較すればいいのでしょうか。

くだらない質問かもしれませんが宜しくお願いします。

Aベストアンサー

No1の方が言いたいこと良くわかります。けして、質問の意味取り違えていませんよ。

>文字列を数値変換して比較、またはデータベースから取得したデータを文字列に変換して比

問題になるのは、対象となるデーターの背景です。何のデーターを対象としているかです。

例えば、計測又は計量したデーター10.10 と10.1 では意味が違いますね。10.10では100分の1まで計測したが100分の1は0だったという意味です。10.1は10分の1までの計測で、100分の1の値は不明と言うことです(又は四捨五入などの圧縮したデーター)。

数値的には同じ10.1ですが、何桁で扱うかが問題になります。DBでデーター型で扱う利点は、このような時に精度をそろえられるところにあります。文字列として扱ってしまうと、余計な(0と言う文字を追加)作業が出てくる場合もあります。

逆にそんなのどうでもいい、と言う場合もたくさんあり、ケースbyケースです。

文字列として"10.10" == "10.1"なるのかと言う問題ですね。これを==で結びたいときは数値として扱うべき、そうでない時は文字列として扱うと簡単です。

と言うことで回答はケースbyケースです。

No1の方が言いたいこと良くわかります。けして、質問の意味取り違えていませんよ。

>文字列を数値変換して比較、またはデータベースから取得したデータを文字列に変換して比

問題になるのは、対象となるデーターの背景です。何のデーターを対象としているかです。

例えば、計測又は計量したデーター10.10 と10.1 では意味が違いますね。10.10では100分の1まで計測したが100分の1は0だったという意味です。10.1は10分の1までの計測で、100分の1の値は不明と言うことです(又は四捨五入などの圧...続きを読む

Qvb.netでCSVファイルを変換して新しいCSVファイルを作りたいの

vb.netでCSVファイルを変換して新しいCSVファイルを作りたいのですが、どのようにすれば良いかヒントを教えていただけないでしょうか?

A組,10代,10
A組,20代,20
A組,30代,30
B組,10代,40
B組,20代,50
B組,30代,60
C組,10代,70
C組,30代,80

この様なCSVファイルを変換して

,A組,B組,C組
10代,10,40,70
20代,20,50,
30代,30,60,80

という表のようなCSVファイルを作りたいのです。
データベースなどに入れずに、ファイルtoファイルでの変換がしたいです。
最初のファイルの1列目と2列目の項目をそれぞれ配列に入れて重複をなくす位までは思いつくのですが、そこから先がどの様にすれば良いかよく分かりません。
ヒントだけでも良いのでよろしくお願いいたします。

Aベストアンサー

SortedDictionaryを使うのは如何でしょう?
Dim Q As New SortedDictionary(Of String, _
    SortedDictionary(Of String, Integer))
Qのキーは10代、20代、等の項目になります。
QのデータはSortedDictionaryで、キーはA組、B組等、
データは数値(3列目)です。
ランダムに書き込んでも、ソートされて記録されますので、
ファイルの入力処理後にFor Each文でデータを出力すれば
目的のように出力できます。

Dim A As New StreamReader("C:~.csv", _
    Encoding.GetEncoding("shift_jis"))
Dim B As New SortedDictionary(Of String, Integer)
Dim C As New SortedDictionary(Of String, _
    SortedDictionary(Of String, Integer))
Dim D As String
Dim E
Do Until A.EndOfStream
    D = A.ReadLine
    E = D.Split(",")
    If Not B.Keys.Contains(E(0)) Then B.Add(E(0), 0)
    Dim F As SortedDictionary(Of String, Integer)
    If C.Keys.Contains(E(1)) Then
        F = C(E(1))
        If F.Keys.Contains(E(0)) Then
            F(E(0)) = F(E(0)) + E(2)
        Else
            F.Add(E(0), E(2))
        End If
    Else
        F = New SortedDictionary(Of String, Integer)
        F.Add(E(0), E(2))
        C.Add(E(1), F)
    End If
Loop
A.Close()
Dim G = New StreamWriter("C:\~.csv", False, _
    Encoding.GetEncoding("shift_jis"))
For Each H As String In B.Keys
    G.Write("," & H)
Next
G.WriteLine("")
For Each H As String In C.Keys
    G.Write(H)
    Dim F As SortedDictionary(Of String, Integer) = C(H)
    For Each D In B.Keys
        If F.Keys.Contains(D) Then
            G.Write("," & F(D).ToString())
        Else
            G.Write(",0") '省略時はコメントアウト
        End If
    Next
    G.WriteLine("")
Next
G.Close()

SortedDictionaryを使うのは如何でしょう?
Dim Q As New SortedDictionary(Of String, _
    SortedDictionary(Of String, Integer))
Qのキーは10代、20代、等の項目になります。
QのデータはSortedDictionaryで、キーはA組、B組等、
データは数値(3列目)です。
ランダムに書き込んでも、ソートされて記録されますので、
ファイルの入力処理後にFor Each文でデータを出力すれば
目的のように出力できます。

Dim A As New StreamReader("C:~.csv", _
    Encoding.GetEncoding("shift_jis"))
Dim B As...続きを読む

QVB:Excelのデータを、区切りなしのtextファイルで出力したい

Dim AA, BB As String
AA = "Sheet1"
BB = "C:\test.txt"
Sheets(AA).Select
ActiveWorkbook.SaveAs Filename:=BB, FileFormat:=xlUnicodeText


「FileFormat:=xlUnicodeText」
ここの指定を変更すればいいように思うのですが、区切り無しのデータにするにはどうしたらいいのでしょうか。

たとえば、
   A  B  C  D
1  か  し あ  あ

こういうデータを、
「かしああ」のように、区切り無しでファイルに出力したいのです。

Aベストアンサー

複数シートを対象に繰り返すのか。
AA = "Sheet1"
BB = "C:\test.txt"
はどういうようにデータを渡すのか。プログラムコードに組み込んでよいのか。エクセルの経験が少ないのか、ちょっと質問が荒っぽい。
A1セルにテキストファイル名があるとして
1回限りの作業
Sub test01()
d = Range("A65536").End(xlUp).Row
'MsgBox d
Open "C:\Documents and Settings\OTO\My Documents\" & Range("A1") & ".txt" For Output As #1
For i = 2 To d
s = ""
For j = 1 To 4
s = s & Cells(i, j)
Next j
Print #1, s
Next i
Close #1
End Sub
ーー
結果 メモ帳
かしあう
たねおか
ーー
Unicodeにはなら無いと思う。
上記は旧くからあるやり方なので指定は出来ないかも。
文字コード変換ソフトが無いかな。

複数シートを対象に繰り返すのか。
AA = "Sheet1"
BB = "C:\test.txt"
はどういうようにデータを渡すのか。プログラムコードに組み込んでよいのか。エクセルの経験が少ないのか、ちょっと質問が荒っぽい。
A1セルにテキストファイル名があるとして
1回限りの作業
Sub test01()
d = Range("A65536").End(xlUp).Row
'MsgBox d
Open "C:\Documents and Settings\OTO\My Documents\" & Range("A1") & ".txt" For Output As #1
For i = 2 To d
s = ""
For j = 1 To 4
s = s & Cells(i, j)
...続きを読む

Qcsvファイルのデータ変換について

OS:windows2000pro
VB:VB6.0sp5

c:\data.csv(カンマ区切) のデータ(全6列)で
1列目,2列目,3列目,4列目,5列目,6列目

[変換前(全6列)]
abc,a1,aあ b2,3c,4d5e (1行目)
ccc,c3,aあ い,3c,4d5e (2行目)
bbc,b2,あ b2a,c3,d5e4 (3行目)

[変換後(全6列)]
abc,a1,"aあ b2",3c,"4d5e" (1行目)
ccc,c3,"aあ い",3c,"4d5e" (2行目)
bbc,b2,"あ b2a",c3,"d5e4" (3行目)

上記の様に 3列,6列目を「"・・・"」ダブルコーテイションで
囲い(変換し)、c:\data_after.csvというファイル名で
保存する為のプログラムをご教示ください
よろしくお願いいたします

Aベストアンサー

Dim fso, inf, outf, aLine, field

Set fso = CreateObject("Scripting.FileSystemObject")
Set inf = fso.OpenTextFile("c:\data.csv",1)
Set outf = fso.OpenTextFile("c:\data_after.csv",2,true)

Do until inf.AtEndOfStream
aLine = inf.ReadLine
field = split(aLine,",") 'カンマでフィールドに分ける
field(2)="""" & field(2) & """"
field(4)="""" & field(4) & """"
aline = join(field,",")
outf.WriteLine(aline)
Loop
inf.Close
outf.Close

Qcsvファイルのデータの間引きをしたい

はじめまして。

csvファイルをもとにMSChartでグラフ表示するのですが、データ量が大きすぎ、描画に時間がかかってしまいます。
そこで、csvファイルの間引きを考えたのですが、うまい方法が見当たりません。
何かよい方法はございませんでしょうか?
よろしくお願いいたします。

P.S.
何行かおきに変数に読み込むことを考えたのですが、Line Inputでは解決出来ませんでした。

Aベストアンサー

Excelなり何なりのアプリで読み込んで加工し、
別のファイルとして吐き出すのが、結果的に一番簡単だと思います。


人気Q&Aランキング

おすすめ情報