VBA
1 2Sub CSV出力(ByVal sht As Worksheet, Optional ByVal rngStart As Range = Nothing) 3 Dim varFile As Variant 4 Dim FSO As New FileSystemObject 5 Dim TS As TextStream 6 Dim lngRowMin As Long, lngRowMax As Long 7 Dim lngColMin As Long, lngColMax As Long 8 Dim i As Long 9 10 11 varFile = Application.GetSaveAsFilename(InitialFileName:=sht.Name & ".csv", _ 12 FileFilter:="CSVファイル(*.csv),*.csv", _ 13 FilterIndex:=1, _ 14 Title:="保存ファイルの指定") 15 If varFile = False Then 16 Exit Sub 17 End If 18 19 '開始行列、終了行列を取得 20 If rngStart Is Nothing Then 21 lngRowMin = 1 22 lngColMin = 1 23 Else 24 lngRowMin = rngStart.Row 25 lngColMin = rngStart.Column 26 End If 27 With rngStart.CurrentRegion 28 lngRowMax = .Item(.Count).Row 29 lngColMax = .Item(.Count).Column 30 End With 31 32 Set TS = FSO.CreateTextFile(Filename:=varFile, Overwrite:=True) 33 34 For i = lngRowMin To lngRowMax 35 TS.WriteLine CSV_EditRec(sht, i, lngColMin, lngColMax) 36 Next 37 38 TS.Close 39 Set TS = Nothing 40 Set FSO = Nothing 41 42 MsgBox ("CSV出力しました。" & vbLf & vbLf & varFile) 43End Sub 44
VBA
1 2Private Function CSV_EditRec(ByVal sht As Worksheet, _ 3 i As Long, _ 4 lngColMin As Long, _ 5 lngColMax As Long) As String 6 Dim strRec As String 7 Dim strCol As String 8 Dim j As Long 9 10 strRec = "" 11 For j = lngColMin To lngColMax 12 Select Case True 13 Case IsNumeric(sht.Cells(i, j)) 14 strCol = CStr(CDbl(sht.Cells(i, j))) 15 Case IsDate(sht.Cells(i, j)) 16 If InStr(sht.Cells(i, j), "-") Then 17 strCol = sht.Cells(i, j) 18 Else 19 strCol = Format(sht.Cells(i, j), "yyyy/mm/dd") 20 End If 21 Case InStr(sht.Cells(i, j), ","), InStr(sht.Cells(i, j), """") 22 strCol = """" & sht.Cells(i, j) & """" 23 Case Else 24 strCol = sht.Cells(i, j) 25 End Select 26 If strRec = "" Then 27 strRec = strCol 28 Else 29 strRec = strRec & "," & strCol 30 End If 31 Next 32 CSV_EditRec = strRec 33End Function 34
上記はエクセルの真髄様より抜粋させていただいております。
大変、初歩的な質問なのですが、引数付きのプロシージャの実行の仕方がわかりません。
この場合はコールステートメント等で実行するのでしょうか?
また、その場合はどのようなカードを書くのでしょうか?
> 引数付きのプロシージャの実行の仕方がわかりません。
質問のコードでは、CSV_EditRec()はCSV出力()で使用するコードになっていますが、何が分からないのでしょうか?
申し訳ありません。本当にわかりません。
Subプロシージャのcsv出力を実行できない理由がわかりません。
Functionが実行できない理由はわかるのですが…
仮に、このコードでは、実行できないのが正しいとして、なぜそのような迂遠な方法を取るのかがわかりません。
Subプロシージャで書かれたものを他のSubプロシージャから呼び出して使うことに何の意味があるのでしょうか?
CSV出力()の実行方法が分からないという事ですか?
ユーザーの操作によるものなら、「CSV出力」などのボタンを設けて、そのボタンのクリックイベントで、
call CSV出力()
などとしますが、質問はそういう事ですか?
非常にわかりにくくて申し訳ありません。
私ならCSV出力プロシージャから直接実行できるコードを書くのかなと考えていたので、なぜCSV出力プロシージャを別のプロシージャ(callステートメントを記載したプロシージャ)から実行しなければいけないのかが、わかりません。
これは作り手の癖なのか、このコードを書くにあたっては、必ずcallステートメントを記載したプロシージャを用意しなければいけないのか…
そこらへんがわかりませんでした。
回答2件
あなたの回答
tips
プレビュー