• ベストアンサー

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

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列目のチェックボックスで指定)や特定の列のみを選択してファイル化させる といった動きにさせるには、どうしたら良いのでしょうか?

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

  • ベストアンサー
noname#140971
noname#140971
回答No.3

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

yachiru
質問者

お礼

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

その他の回答 (2)

noname#140971
noname#140971
回答No.2

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 関数は、すぐに補足します。

回答No.1

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

yachiru
質問者

補足

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

関連するQ&A

  • EXCEL→CSV形式で別ファイルに保存

    EXCELデータ内のある1つのシートのデータをそのまま別ファイル(CSV)に保存したいのですがうまくいかないので教えてください。 本を見ながらこのようなマクロを作ったところ、EXCEL(○○.xls)の指定したシート(keihi)のみをCSV形式で別フォルダ(C:\経費振替)に保存することができたんですが、 元のEXCELも、ファイル名称・形式がCSV(○○.xls→keihi.csv)に変わってしまいます。 エクセルのファイル名、形式は変えずにできる方法ってありますか?? Sub データはきだし() Dim Ret As String Dim Res As Integer Dim FolderName As String Set WK1 = Worksheets("1 依頼書") Set WK4 = Worksheets("keihi") FolderName = "C:\経費振替" Ret = Dir(FolderName, 16) If Ret = "" Then Res = MsgBox("DATA保管用フォルダを作成します。", vbYesNo) If Res = vbYes Then MkDir FolderName End If End If ' Dim Res2 As Integer Res2 = MsgBox("DATAを作成します。", vbYesNo) WK4.Select If Res2 = vbYes Then With WK4 .SaveAs Filename:=FolderName & "\keihi", FileFormat:=xlCSV ←多分ココが何か間違ってるのだと思うんですが。 End With

  • VB6 テキストファイルへの保存方法

    みなさん教えてください。 いまVB6.0で、テキストボックス(textbox1)に入力するデータ(数値)を名前を指定するテキストファイルに内容を保存したいと考えています。 これをやろうと、下記のように構文を作成したのですが、何故かうまくいきません。 みなさんアドバイスを頂けないでしょうか。 宜しくお願いします。 Private Sub Command1_Click() Dim StrFN As String Dim sw As System.Io.StreamWriter 'テキストファイルを上書きで保存する StrFN = Application.GetSaveAsFilename("", "測定データ(*.txt),*.txt,全てのファイル(*.*),*.*", , "測定データファイル名指定") 'ダイアログ表示 If Dir(StrFN) <> "" Then If vbYes <> MsgBox("同名ファイルがあります。" & vbLf & _ "上書きしますか?", vbYesNo) Then Exit Sub End If End If sw = StrFN '書込み sw.Write (textbox1.Text) sw.Close () End Sub

  • VBAユーザーフォームを使った入力で文字列になる

    お世話になります。 ユーザーフォームを使った入力で日付や金額を入力する箇所があります。 例えば日付で2019/12/2と入力したところ、反映されるExcelシートには日付ではなく文字列で入力されたことになります。 セルの書式設定を日付にしていても文字列になってしまいます。 下記にコードを入力しておきます。 ご教示のほど宜しくお願い致します。 Sub Registration(Row As Long) ' Dim Col As Integer Dim TCount As Integer Dim CCount As Integer ' TCount = 1 ' For Col = 2 To Len(Table) ' If Mid(Table, Col, 1) = "T" Then TCount = TCount + 1 Cells(Row, Col) = Controls("TextBox" & TCount) Controls("TextBox" & TCount) = "" Else CCount = CCount + 1 Cells(Row, Col) = Controls("ComboBox" & CCount) Controls("ComboBox" & CCount) = "" End If Next Col End Sub

  • ExcelVBAで行と列の検索

       A  B  C  D  E 1  コード あ  い  う  え 2  10  ○    ○ 3  20     ○  ○ 4  30          ○ 上記の表が5000件あります。Textbox1に入力し検索ボタンを押すと A列のコードを検索して一致する列の○のあるところの1行目の項目 をtextbox2に表示したいのですがうまく行きません。 よろしくお願い致します。 Private Sub CommandButton1_Click() '検索フォームボタン Dim i As Long Dim 最終行 As String Dim サーチ行 As Long Sheets(1).Activate 最終行 = Range("A1").End(xlDown).Row サーチ行 = 0 For i = 2 To 最終行 If TextBox1.Value = Range("A" & i) Then If Range("B" & i, "N" & i) = "" Then TextBox2.Text = Range("B1", "N1") サーチ行 = i Exit For End If End If Next If サーチ行 = 0 Then MsgBox TextBox1.Value & "データはありません。", vbInformation, "無し" End If TextBox1.SetFocus End Sub エラーはでません。データはありませんとなります。  

  • ファイルオープンの速度を速くするには?

    よろしくお願いします。 下記コードでabc.csvを選択すると、Excelツールバーの”開く”で行う場合よりかなり時間がかかります。速度を早くする方法を教えて頂けないでしょうか。 Option Explicit Option Compare Text Sub Start_Click() Dim Fname As String Dim MBErr As Integer MsgBox "abc.csv を選択して下さい" Start: Fname = Application.GetOpenFilename("CSVファイル,*.csv") If Not Right(Fname, 7) = "abc.csv" Then   MBErr = MsgBox("ファイル名が違うか、ファイルが選択されていません" _          & Chr(13) & Chr(13) & "abc.csv を選択して下さい", 21)   If MBErr = 4 Then     GoTo Start   Else     Exit Sub   End If End If Workbooks.Open Fname End Sub

  • ExcelのVBAでブックを保存

    住所録Aと住所録Bがあります。 AとBを比較して、差異をを別ファイルに出力しようとしています。 比較元となるファイルは、AでもBでもかまいません。 比較、判定、ファイルへの出力部分は、省略していますが、保存 する場合は、どこに行うのがよいのですか bookですか。sheetですか。 両方で、SaveAsができまが、使い分けがあるのでしょうか。 どのように使い分けするのでしょうか。 書き方、使い方のおかしいところを指摘して頂くとありがたい です。 --------------------------------------------------------------------------------------------------- Option Explicit Sub test() Dim ret As Integer Dim row1 As Long Dim col1 As Long Dim row2 As Long Dim col2 As Long Dim myRtn As Boolean Dim fno1 As String Dim fno2 As String Dim OutBook As New Workbook Dim OutSheet As New Worksheet Dim OutFileName As String Dim cnt As Integer Dim I As Integer ret = MsgBox("処理を開始します。" + Chr(13) + Chr(10) + "よろしいですか。?", _ vbYesNo + vbQuestion) If ret = vbNo Then End End If myRtn = Application.Dialogs(xlDialogOpen).Show If myRtn = False Then MsgBox "[キャンセル]が選択されました" & vbCr & _ "処理を終了します" Exit Sub End If fno1 = Application.ActiveWorkbook.Name myRtn = Application.Dialogs(xlDialogOpen).Show If myRtn = False Then MsgBox "[キャンセル]が選択されました" & vbCr & _ "処理を終了します" Exit Sub End If fno2 = Application.ActiveWorkbook.Name Set OutBook = Workbooks.Add Set OutSheet = ActiveSheet OutBook.Worksheets(1).Name = "テスト" OutFileName = "テスト.xls" With Application.Workbooks(fno1).Worksheets(1) row1 = 1 col1 = 1 cnt = 1 Do While .Cells(row1, 1) <> "" 処理 (省略) Loop End With MsgBox "処理が終了しました。", vbOKOnly + vbInformation, "確認" Application.Workbooks(fno1).Close Application.Workbooks(fno2).Close OutSheet.SaveAs Filename:=OutFileName OutBook.SaveAs Filename:=OutFileName OutBook.Close End Sub --------------------------------------------------------------------------------------------------- OutSheet.SaveAs Filename:=OutFileName or OutBook.SaveAs Filename:=OutFileName のどちらでも保存ができます。 また、書き方、使い方のおかしいところを指摘して頂くとありがたいです。

  • EXCEL 2つの特定の文字列がある行を残して削除

    EXCELにて2つの特定の文字列が含まれる行を残して削除したいと思っております。 A列50行にそれぞれ"年賀状""喪中""名刺"がランダムに羅列されていて、その中から"年賀状"と"喪中"の行だけを残して"名刺"の行は削除したいと思ってます。(B列以降は注文番号、枚数、氏名等が入力されています) 以下のコードで1つだけは可能でしたが、色々試しても2つはできませんでした。(コードは拾い物を少しアレンジ) Sub MacroTest1()   Dim keyWord As Variant   Dim FirstAdd As String   Dim UR As Range   Dim c As Range   Const col As Long = 1 '列数   keyWord = "年賀状"   If VarType(keyWord) = vbBoolean Or Len(keyWord) = 0 Then Exit Sub      With ActiveSheet     With .UsedRange       Set c = .Find( _       What:="*" & keyWord & "*", _       LookIn:=xlValues, _       LookAt:=xlPart, _       SearchOrder:=xlByRows)              If Not c Is Nothing Then         FirstAdd = c.Address         Set UR = c         Do           Set c = .FindNext(c)           Set UR = Union(UR, c)           If c.Address = FirstAdd Then Exit Do         Loop Until c Is Nothing       End If     End With     If Not UR Is Nothing Then       UR.EntireRow.Hidden = True       .UsedRange.SpecialCells(xlCellTypeVisible).Delete       .UsedRange.EntireRow.Hidden = False     End If   End With End Sub どうか宜しくお願いします。

  • 条件によって行削除を繰り返し処理する

    一行目がフィールド名で、Z列まで値の入っているデータがあります。 x列が""の場合はその行を削除する処理を最終行まで続けたいのですが、 ""行が2行以上続いているとFor~によって行を飛ばしてしまいます。 何か良い方法はありませんでしょうか? Sub 削除() Dim last As Long Dim row As Long last = ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).row For row = 2 To last If Cells(row, 24).Value <> "" Then Rows(Format(row) + ":" + Format(row)).EntireRow.Deletesift:=xlUp End If Next End Sub

  • 複数の列を繋げてA列に入れたい VBA

    aaa aaa  bbb aaa  bbb  ccc aaa (A列にaaa、B列にbbb、C列にcccが入ってます) と言うデータがあるのですが 全てA列に入れて aaa aaabbb aaabbbccc aaa としたいです。 ・最終列は必ずしもCではないのです。(Dの場合もEの場合もある) ・最終行も変化します。 Sub 分かれてる列を繋げる() Dim Col As Long Dim Row As Long For Row = 1 To Range("a65536").End(xlUp).Row   For Col = 1 To Cells(Row, 256).End(xlToLeft).Column    Cells(Row, 1) = Cells(Row, 1) & Cells(Row, 2) & Cells(Row, 3)    Next Col Next Row End Sub をやってみましたが、 aaa aaabbbbbb aaabbbcccbbbcccbbbccc aaa となってしまい、 欲しい結果とは違くなってしまいます。

  • Excelからテキストファイルを読み込み、読み込んだ行を削除する方法

    Excelからテキストファイルを読み込み、読み込んだ行を削除する方法 いつもお世話になりますm(__)m Excel2003のVBAで、以下のようにテキストファイルを読み込む処理を作成しています。 Sub LoadFile() Dim intFF As Integer Dim strFILENAME As String Dim DtC, DtD, DtE As String Dim GYO As Long strFILENAME = ActiveWorkbook.Path & "\sample.txt" If Dir(strFILENAME) <> "" Then intFF = FreeFile Open strFILENAME For Input As #intFF GYO = 1 Do Until EOF(intFF) Input #intFF, DtC, DtE, DtE If DtC = 1 Then GYO = GYO + 1 Worksheets("DataSheet").Range("C" & GYO).Value = DtC Worksheets("DataSheet").Range("D" & GYO).Value = DtD Worksheets("DataSheet").Range("E" & GYO).Value = DtE End If Loop Close #intFF End If End Sub sample.txtからデータを読み込み、1個目のデータが「1」なら、DataSheetのC,D,Eの各列に、テキストファイルから読み込んだデータがセットされます。 1個目のデータが1以外なら、DataSheetにはセットされないようにしています。 そこで、読み込んだデータ(1個目のデータが「1」の行)を読み込んでDataSheetに挿入した後に、その行をsample.txtから削除したいのですが、どうすればいいかわかりません(>_<) 最終的に、処理を実行した後のsample.txtは、DataSheetにセットしたデータ以外が残るようにしたいのです。 お詳しい方、何卒ご教授のほど宜しくお願い致しますm(__)m

専門家に質問してみよう