この記事は、『VBA : 一ヶ月の予定リストの作成』の続きです。
テンプレートシートをコピーして作業シートを作成する関数
"対象" という名前のシートがあればそれを使い、無ければ "テンプレート" シートをコピーして、"対象" と言う名前に変更します。
Function LoadSheet()
' ********************
' データ処理をする Sheet
' ********************
Dim sheet As Worksheet
' ********************
' "対象" Sheet の取得
' ********************
On Error Resume Next
Set sheet = Worksheets("対象")
On Error GoTo 0
' "対象" Sheet が無い場合は テンプレート をコピーして作成
If sheet Is Nothing Then
Call Worksheets("テンプレート").Copy(, Worksheets("年月入力"))
' コピーした Sheet の名前を変更
Application.ActiveSheet.Name = "対象"
' 変数にコピーした Sheet をセット
Set sheet = Application.ActiveSheet
End If
Set LoadSheet = sheet
End Function
※ 戻り値は、Worksheet オブジェクトです。
FileSystemObject は、ThisWorkbook に定義
Workbook_Open イベントで一度だけ実行して作成し、ブックを閉じるまでずっとそれを使います。
Public Fs As Object
Private Sub Workbook_Open()
Set Fs = CreateObject("Scripting.FileSystemObject")
End Sub
※ Open から Line Input を使わないのは、FileSystemObject ならば 他の VB 系でも使用可能で汎用性が高いからです。
処理
※ Fs は、ThisWorkbook に定義されているので、ThisWorkbook.Fs と参照します
Sub ボタン2_Click()
' ********************
' データ処理をする Sheet
' ********************
Dim sheet As Worksheet
' ********************
' 戻り値を取得
' ********************
Set sheet = LoadSheet
' ********************
' ファイルを開く
' ********************
Dim Path As String
Path = Application.GetOpenFilename("CSV,*.csv,全て,*.*", , "CSVファイルを選択して下さい")
If Path = "False" Then
Exit Sub
End If
' ********************
' オープン
' ********************
On Error Resume Next
Set InObj = ThisWorkbook.Fs.OpenTextFile(Path, 1)
If Err.Number <> 0 Then
MsgBox (Err.Description)
Exit Sub
End If
On Error GoTo 0
Dim Buffer As String
Dim row As Integer: row = 0
Dim Data() As String
' ********************
' CSV ファイルより
' データを読み込み
' ********************
Do While Not InObj.AtEndOfStream
Buffer = InObj.ReadLine
row = row + 1
Data = Split(Buffer, ",")
sheet.Cells(row, 3).Value = Data(0)
sheet.Cells(row, 4).Value = Data(1)
Loop
' ********************
' ファイルクローズ
' ********************
InObj.Close
End Sub
Application.GetOpenFilename の第二引数(FilterIndex)は省略しています。その代わり、第三引数を指定しています( タイトル文字列の指定 )
Split 関数
OpenTextFile メソッド
ReadLine メソッド