Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


23432 / 76738 ←次へ | 前へ→

【58672】Re:CSV出力について
質問  お困りです  - 08/11/4(火) 15:02 -

引用なし
パスワード
   ▼kanabun さん:
>▼お困りです さん:
>
>こんにちは。
>
>>”ワークシートA”のA〜Hまでの範囲でかつ
>>データが存在する所までの部分をCSV形式にて出力したいと
>>考えています。
>>どの様な構文を作成すればよいでしょうか?
>
>新規Bookを挿入して(できれば Sheet枚数は1枚がよい)、
>元データシートの指定範囲をCopy して、新規BookのSheet1 に
>Pasteして、
>ファイルメニュー「名前をつけて保存」から、CSV形式で保存する
>といった手順でどうですかね?
>
>>”ワークシートA”のA〜Hまでの範囲でかつ
>>データが存在する所までの部分
>は、
>Worksheets("ワークシートA").UsedRange.Resize( ,8).Copy _
>  新しいBook.Sheets(1).Range("A1")
>
>といった感じで。

早々のご指導ありがとうございます。このサイトを見ていたら以前同様な質問で参考のURLが出ていたので調べました。

構文は以下です。ただ、ユーザーフォーム上ではこのままでは動かないと思いまして追加で質問させていただきます。

Private Sub CommandButton1_Click()
     ここにしたの構文を入れると思いますが
End Sub
 下の構文の何処を修正したらよいでしょうか?よろしくご指導お願いします。

Option Explicit

' CSV形式テキストファイル書き出すサンプル
Sub WRITE_CSVFile()
  Const cnsTITLE = "CSVテキストファイル出力処理"
  Const cnsFILTER = "CSVファイル (*.csv;*.dat),*.csv;*.dat"
  Dim xlAPP As Application    ' Applicationオブジェクト
  Dim intFF As Integer      ' FreeFile値
  Dim strFILENAME As String    ' OPENするファイル名(フルパス)
  Dim X(1 To 8) As Variant    ' 書き出すレコード内容
  Dim GYO As Long         ' 収容するセルの行
  Dim GYOMAX As Long       ' データが収容された最終行
  Dim lngREC As Long       ' レコード件数カウンタ
  Dim COL As Long         ' カラム(Work)

  ' Applicationオブジェクト取得
  Set xlAPP = Application
  ' 「名前を付けて保存」のフォームでファイル名の指定を受ける
  xlAPP.StatusBar = "出力するファイル名を指定して下さい。"
  strFILENAME = xlAPP.GetSaveAsFilename(InitialFilename:="SAMPLE.csv", _
    FileFilter:=cnsFILTER, Title:=cnsTITLE)
  ' キャンセルされた場合は以降の処理は行なわない
  If StrConv(strFILENAME, vbUpperCase) = "FALSE" Then Exit Sub

  ' 収容最終行の判定(Excel認知の最終行から上に向かってデータがある行を探す)
  GYOMAX = Cells.SpecialCells(xlCellTypeLastCell).Row
  Do While Cells(GYOMAX, 1).Value = ""
    GYOMAX = GYOMAX - 1
  Loop
  If GYOMAX < 1 Then
    xlAPP.StatusBar = False
    MsgBox "テキストをA〜H列1行目から入力してから起動して下さい。",, cnsTITLE
    Exit Sub
  End If

  ' FreeFile値の取得(以降この値で入出力する)
  intFF = FreeFile
  ' 指定ファイルをOPEN(出力モード)
  Open strFILENAME For Output As #intFF
  ' 1行目から開始
  GYO = 1
  ' 最終行まで繰り返す
  Do Until GYO > GYOMAX
    Erase X     ' 初期化                  
    ' A〜H列内容をレコードにセット(先頭は1行目)
    For COL = 1 To 8
      X(COL) = FP_CutInjusticeChar(Cells(GYO, COL).Value)   
    Next COL
    ' レコード件数カウンタの加算
    lngREC = lngREC + 1
    xlAPP.StatusBar = "出力中です....(" & lngREC & "レコード目)"
    ' レコードを出力
    Write #intFF, X(1), X(2), X(3), X(4), X(5), X(6), X(7), X(8)         
    ' 行を加算
    GYO = GYO + 1
  Loop
  ' 指定ファイルをCLOSE
  Close #intFF
  xlAPP.StatusBar = False
  ' 終了の表示
  MsgBox "ファイル出力が完了しました。" & vbCr & _
    "レコード件数=" & lngREC & "件", vbInformation, cnsTITLE
End Sub

' CSVテキスト項目に出力できない文字を除去する
Private Function FP_CutInjusticeChar(vntInText As Variant) As Variant
  Dim strInText2 As String
  Dim POS As Long
  Dim strChar As String
  Dim strOutText As String

  FP_CutInjusticeChar = Empty
  ' 一旦、文字列に変換する
  strInText2 = Trim$(CStr(vntInText))
  ' ブランクの場合は処理なし
  If strInText2 = "" Then Exit Function

  ' 文字列の桁数分繰り返す
  strOutText = ""
  For POS = 1 To Len(strInText2)
    ' 1文字を取り出す
    strChar = Mid(strInText2, POS, 1)
    ' ダブルクォーテーションとCRコードをOMIT
    If ((strChar <> vbCr) And (strChar <> """")) Then
      strOutText = strOutText & strChar
    End If
  Next POS
  ' 元の値が数値の場合はDouble型とする
  If IsNumeric(vntInText) = True Then
    FP_CutInjusticeChar = CDbl(strOutText)
  Else
    FP_CutInjusticeChar = strOutText
  End If
End Function

0 hits

【58669】CSV出力について お困りです 08/11/4(火) 14:05 質問
【58671】Re:CSV出力について kanabun 08/11/4(火) 14:29 発言
【58672】Re:CSV出力について お困りです 08/11/4(火) 15:02 質問
【58675】Re:CSV出力について kanabun 08/11/4(火) 15:20 発言
【58684】Re:CSV出力について お困りです 08/11/4(火) 16:57 質問
【58685】Re:CSV出力について アルファ 08/11/4(火) 17:12 発言
【58686】Re:CSV出力について kanabun 08/11/4(火) 17:37 発言
【58689】Re:CSV出力について お困りです 08/11/4(火) 19:40 質問
【58690】Re:CSV出力について kanabun 08/11/4(火) 20:37 発言
【58734】Re:CSV出力について お困りです 08/11/6(木) 10:35 お礼
【58747】Re:CSV出力について お困りです 08/11/6(木) 14:30 お礼

23432 / 76738 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free