おつかれさまです。

【備忘録】CSV取込 意図しない区切り文字 EXCELの忖度。

コロン(:)が区切り文字で入ってしまう。

マクロでCSV取り込みを作成したのだが、作業者のEXCELによって区切り文字が入ってしまう。自分で使用する際は問題ないのだが、最近提供することが多くなったので忘れないよう記録します。

自分はEXCELの忖度と言っています(^-^;。

使用者が手動で作業した時に、その情報をEXCELが初期値として保持してしまうことがあります。

保存すると別の作業者にも影響する場合があり、他の機能だと、グラフなどをマクロで作成すると作成する度に微妙に違ったりします。

解決方法としては、各設定をマクロ上で全て設定が必要です。

CSV取込回避方法

CSV取込はSplitを使用する方法もありますが、その場合影響を受けません。自分はあまり好きでは無いので使用してません。

以下のCSV取込は、マクロの記録で出来たものを一部張り付けて作成する方法です。

MSG_FLG = MsgBox(" CSV取込み処理実行OK?", vbYesNo)
If MSG_FLG = vbNo Then
Exit Sub
End If

'#### sheet_clear
For CLEAR001 = 1 To Worksheets.Count
If Sheets(Worksheets(CLEAR001).Name).AutoFilterMode Then
Sheets(Worksheets(CLEAR001).Name).Range("A1").AutoFilter
End If
Next

'####

Sheets("SAMPLE").Select

Cells.Select
Selection.Delete Shift:=xlUp

Sheets("SAMPLE").Select
Range("A1").Select

Const cnsTITLE = "○CSVデータ、取込み処理"
Const cnsFILTER = "csvファイル (*.csv),*.csv"

With CreateObject("WScript.Shell")
.CurrentDirectory = Worksheets("KANRI").Range("B1")
End With

vFILENAME = Application.GetOpenFilename(FileFilter:=cnsFILTER, title:=cnsTITLE)
If VarType(vFILENAME) = vbBoolean Then
MsgBox ("キャンセル")
Exit Sub
End If

WORK01 = vFILENAME

With ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;" & vFILENAME, Destination:=ActiveSheet.Range("A1"))

''...省略...
'#### マクロ記録で作成 ここから

.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 932
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = False
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = True
.TextFileSpaceDelimiter = False
.TextFileOtherDelimiter = False '←###その他の区切り文字###
.TextFileColumnDataTypes = Array(2, 2, 2, 1, 1, 1, 1, 1, 1)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False

'#### マクロ記録で作成 ここまで

End With

Range("A1").Select
MSG_FLG = MsgBox("取込み終了" & vbCrLf & vbCrLf & "(^^)")
Application.StatusBar = " CSV 取込み終了" 'EXCELの下バーへメッセージ表示。

がんばりましょう。

VBA(マクロ)

Posted by master