新しいアカウントで始めました。

身の回りの出来事や写真が中心です。

Excel、CSVファイルの読み書き

2015-12-12 22:17:09 | Excel

Option Explicit
'Option Base 1

Sub データクリア()
    Dim mylastrow As Long
    Dim mylastcol As Long
    Dim area As Range
    
    Worksheets("生産者").Activate
    mylastrow = Range("a1").CurrentRegion.Rows.Count
    mylastcol = Range("a1").CurrentRegion.Columns.Count

    MsgBox "データエリアをクリアします。"
    
    Range(Cells(1, 1), Cells(mylastrow, mylastcol)).ClearContents
    
    MsgBox "クリアが終了しました"

End Sub
Sub CSV出力(ByVal sht As Worksheet, Optional ByVal rngStart As Range = Nothing)
    Dim varFile As Variant
    
    varFile = Application.GetSaveAsFilename(InitialFileName:=sht.Name & ".csv", _
                                            FileFilter:="CSVファイル(*.csv),*.csv", _
                                            FilterIndex:=1, _
                                            Title:="保存ファイルの指定")
    If varFile = False Then
        Exit Sub
    End If
    
    sht.Select
    sht.Copy
 

    '不要な先頭の行列を削除します。
    If Not rngStart Is Nothing Then
        If rngStart.Row > 1 Then
            Range(Rows(1), Rows(rngStart.Row - 1)).Delete
        End If
        If rngStart.Column > 1 Then
            Range(Columns(1), Columns(rngStart.Column - 1)).Delete
        End If
    End If
 
    ActiveWorkbook.SaveAs Filename:=varFile, FileFormat:=xlCSV, CreateBackup:=False
    ActiveWindow.Close
 
    MsgBox ("CSV出力しました。" & vbLf & vbLf & varFile)
End Sub

Sub ワークシートCSV出力()
    Dim st As Worksheet
    Set st = Worksheets("生産者")
    Call CSV出力(st)

End Sub
Sub CSV入力1()
    Dim varFileName As Variant
    Dim intFree As Integer
    Dim strRec As String
    Dim strSplit() As String
    Dim i As Long, j As Long

    varFileName = Application.GetOpenFilename(FileFilter:="CSVファイル(*.csv),*.csv", _
                                                Title:="CSVファイルの選択")
    If varFileName = False Then
        Exit Sub
    End If

    intFree = FreeFile '空番号を取得
    Open varFileName For Input As #intFree 'CSVファィルをオープン
 
    i = 0
    Do Until EOF(intFree)
        Line Input #intFree, strRec '1行読み込み
        i = i + 1
        strSplit = Split(strRec, ",") 'カンマ区切りで配列へ
        For j = 0 To UBound(strSplit)
            Cells(i, j + 1) = strSplit(j)
        Next
        '配列をそのまま入れる方法も、ただし全て文字列として入力される
'    Range(Cells(i, 1), Cells(i, UBound(strSplit) + 1)) = strSplit
    Loop
 
    Close #intFree
End Sub
殆どの部分がネタサイトからのコピーです。これは結構優れてますよ。多分ですが

自由自在にExcelで表を作り、ファイルに保存できます。勿論読んでワークシートに

再現も出来ます。1行の長さが違っていても問題ないようです。

ネタサイトは

http://excel-ubara.com/excel_index.html

です。色々なことがかかれてるようなので、勉強になりそうですよ。

 クリックで拡大します。

ワークシートへコントロールを置いて、それに関数を貼り付けて実行できるようにしてます。

単なる勉強ですがね。(^0^)

Sub ワークシートCSV出力()
    Dim st As Worksheet
    Set st = Worksheets("生産者")
    Call CSV出力(st)

End Sub

上の部分が自作の僅かな部分ですが、クリアする部分もそうです。普通のていうか

プリミティブと言うんでしたかね。例えば

Dim i as  Integer

i=10

と書けますが、この場合はsetを使うのが、分からなくてエラーになる原因が分かりません

でした。(^0^)


この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« 今年の出来事を漢字1文字ですか? | トップ | Windows10にGalleriaの1台を... »
最新の画像もっと見る

Excel」カテゴリの最新記事