こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

特定の列・行をテキストファイルに保存させたい

VB6.0とSPREAD6.0で
スプレッドシート内のデータをCSVファイル化させるプログラムを組んでいます


Private Sub Command1_Click()

  Dim blnCHECK As Boolean
  Dim strMsg As String
  Dim strDate As String
  Dim lngResponse As Long
  Dim ret As Boolean

  strDate = Format(Now(), "yyyymmddhhmmss") 'ファイル名

  With spdTarget 'スプレッドシート
    .Row = 1
    While .Row <= .MaxRows
      .Col = LNG_SPD_COL_CHECK 'チェックボックス
      If .Value <> 0 Then
        blnCHECK = True
        strMsg = "選択データをファイル作成しますか?"
        lngResponse = MsgBox(strMsg, vbQuestion + vbYesNo, "Exit Dialog")
        If lngResponse = vbYes Then
          ret = spdTarget.ExportToTextFile _
          ("C:\Documents and Settings\ファイル作成先\" & strDate & ".csv", "", _
          ",", Chr(13), ExportToTextFileColHeaders + _
          ExportToTextFileCreateNewFile, _
          "C:\Documents and Settings\ファイル作成先\" & strDate & ".log")
        Else
          Exit Sub
        End If
      End If
    .Row = .Row + 1
    Wend
  End With

  If blnCHECK = False Then
    MsgBox "作成対象データを選んで下さい", vbExclamation
  End If

End Sub


上記のコードだと表内の全てのデータをCSVファイル化させる事はできるのですが
特定の行(1列目のチェックボックスで指定)や特定の列のみを選択してファイル化させる
といった動きにさせるには、どうしたら良いのでしょうか?

投稿日時 - 2007-06-21 16:37:42

QNo.3103790

困ってます

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

1、[プロジェクト]-[参照設定]で[Microsoft Scripting Runtime]にレ点を付けます。
2、標準モジュールに下記の関数を追加します。

以上で、

FileAppend ファイル名, 出力文字列

と書けば、行単位で任意のタイミングで書き出すことが可能になります。

FileAppend "", ""

で、書き出し中のファイルを閉じます。

Public Function FileAppend(ByVal FileName As String, ByVal TEXT As String) As Boolean
On Error GoTo Err_FileAppend
  Static isOpen As Boolean
  Static fso  As FileSystemObject
  Static txs  As TextStream
  
  If Not isOpen Then
    isOpen = True
    Set fso = New FileSystemObject
    Set txs = fso.CreateTextFile(FileName, True)
  End If
  If Len(TEXT) > 0 Then
    txs.WriteLine TEXT
  End If
  FileAppend = True
Exit_FileAppend:
On Error Resume Next
  If Len(TEXT) = 0 Then
    isOpen = False
    Set txs = Nothing
    Set fso = Nothing
  End If
  Exit Function
Err_FileAppend:
  Resume Exit_FileAppend
End Function

投稿日時 - 2007-06-22 21:44:21

お礼

下記上記共に参考になるコード、有難うございます
プログラムは本当に色々な手法があるんですね
勉強させて頂きました

投稿日時 - 2007-06-28 11:51:34

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

Datas(0, 0) = "00"
Datas(0, 1) = "_01"
Datas(0, 2) = "02"
Datas(1, 0) = "10"
Datas(1, 1) = "_11"
Datas(1, 2) = "12"
Datas(2, 0) = "20"
Datas(2, 1) = "_21"
Datas(2, 2) = "22"

問:このようなデータから長さ=3の条件に合致するのを抜き出してCSVに出力せよ。

<c:\temp\test.csv>
_01
_11
_21

これが出力結果です。

Option Compare Database
Option Explicit

Dim Datas(2, 2) As String

Private Sub Form_Load()
  Datas(0, 0) = "00"
  Datas(0, 1) = "_01"
  Datas(0, 2) = "02"
  Datas(1, 0) = "10"
  Datas(1, 1) = "_11"
  Datas(1, 2) = "12"
  Datas(2, 0) = "20"
  Datas(2, 1) = "_21"
  Datas(2, 2) = "22"
End Sub

Private Sub コマンド0_Click()
  Dim I      As Integer
  Dim J      As Integer
  
  For I = 0 To 2
    For J = 0 To 2
      If Len(Datas(I, J)) = 3 Then
        FileAppend "C:\Temp\Test.csv", Datas(I, J)
      End If
    Next J
  Next I
  FileAppend "", "" ' <-- ファイルを閉じるコード!
End Sub

このように Microsoft Scripting Runtime を利用すれば非手続き的に書くことも可能です。

※FileAppend 関数は、すぐに補足します。

投稿日時 - 2007-06-22 21:33:57

ANo.1

とりあえず、ExportToTextFile を使用せずに、Open ステートメント + Print ステートメントで出力すればできますよね。

投稿日時 - 2007-06-21 21:47:07

補足

アドバイス、ありがとうございます
実は当方VB初心者でして、Printステートメントにどういったコードを書けば
スプレッドシート内のデータを取り出す事ができるのかが判りません
宜しければ、スプレッドシート内のデータを出力するコードなどを教えて頂けると助かります

投稿日時 - 2007-06-22 15:29:34

あなたにオススメの質問