ユーザーが CSV ファイルを選択して操作できるようにするマクロがあります。ただし、1/2/12 などの文字を含むセルは日付として扱われます。これらの文字列を日付ではなくテキストとして保持する必要があります。
1) 新しいワークシートを開始し、2) CSV を開くのではなくインポートすることで、それが実行できることはわかっています。日付の列を「テキスト」に設定して終了します。
質問は、ユーザーがファイルを選択できるように、データ > インポートを中断するにはどうすればよいかということです。その後、マクロは列の形式を設定し、インポートを完了し、データ操作を実行する必要があります。
編集: 現状のマクロの関連コードは次のとおりです。
ChDir "C:\RoomTimerData\"
MyFile = Application.GetOpenFilename("カンマ区切り値 (.csv)、.csv")
Workbooks.Open ファイル名:=MyFile
答え1
通常、テキストインポートダイアログの3番目のステップで、インポートする各列のデータ型を選択します。誤ったフォーマットを避けるには、文章フォーマットとして、これで大丈夫です。
しかし、CSVファイルをインポートするのにVBAマクロを使用しているようです。そこで、破損していない文章輸入:
With ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;C:\test.csv", Destination:=Range("$A$1"))
.Name = "test_1"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 850
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = False
.TextFileSemicolonDelimiter = True
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(2, 1) 'THIS IS THE MAGIC LINE!
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With
また、Excel ヘルプの次の例もご覧くださいTextFileColumnDataTypes
。
Set shFirstQtr = Workbooks(1).Worksheets(1)
Set qtQtrResults = shFirstQtr.QueryTables _
.Add(Connection := "TEXT;C:\My Documents\19980331.txt", _
Destination := shFirstQtr.Cells(1, 1))
With qtQtrResults
.TextFileParseType = xlFixedWidth
.TextFileFixedColumnWidths = Array(5, 4)
.TextFileColumnDataTypes = _
Array(xlTextFormat, xlSkipColumn, xlGeneralFormat)
.Refresh
End With
使用できる形式は次のとおりです。
- xl一般フォーマット
- xlテキストフォーマット
- xl列スキップ
- xlDMYフォーマット
- xlDYMフォーマット
- xlEMDフォーマット
- xlMDYフォーマット
- xlMYDフォーマット
- xlYDMフォーマット
- xlYMDフォーマット