Если вы в настоящее время используете File > Open
, чтобы открыть файл CSV, вместо этого попробуйте Data > Import External Data > Import Data
. Это вызывает мастера импорта текста, который может дать вам больше гибкости в том, как импортировать файл. В частности, он позволяет вам объявить столбец в файле как текстовый, чтобы Excel не пытался проанализировать значение
Как объяснил Саймон, ваша терминология для текущего формата даты неверна. 9-FEB
соответствует формату d-mmm
и 02-19-2009
(для данного примера намеренно изменено на однозначную дату; 02-09-2009 - 9 февраля в США, но 2 сентября в Великобритании) соответствует mm-dd-yyyy
Если вы хотите изменить NumberFormat
на текст для диапазона, начинающегося в ячейке B11 и заканчивающегося в ячейке IV11, то вы должны использовать:
Range("B11:IV11").NumberFormat = "@"
@ обозначает текстовый формат, и вам нужен оператор: для указания непрерывного диапазона ячеек. Ваш оригинальный пример Range("B11","IV11")
фактически указывает на объединение ячеек B11 и IV11 и, следовательно, затронул бы только две ячейки
Необычно структурировать ваши данные по строкам, а не по столбцам Вместо того чтобы указывать даты в строке 11, было бы более распространенным использовать их в столбце K, чтобы использовать Range("K2:K65535")
или просто Rows("K")
. Большинство встроенных в Excel материалов, таких как Sort и AutoFilter, предполагают, что ваши данные в любом случае выложен в столбцах. Строка 1 традиционно содержит имена столбцов, а затем каждая последующая строка содержит отдельную запись. Возможно, вы захотите посмотреть, как генерируется ваш CSV-файл, чтобы увидеть, можете ли вы переключить его на более удобную структуру на основе столбцов
Если в ячейке есть текст, например 19-FEB
, то, если вы всегда хотите, чтобы часть года была текущим, вы можете изменить ее на первый день месяца в формате mm/dd/yyyy
в VBA. В этом примере изменяется только одна ячейка, но вы можете использовать ее в качестве основы для более широкого решения:
Option Explicit
Sub main()
Dim strOrigValue As String
With ThisWorkbook.Worksheets("Sheet1").Range("B11")
strOrigValue = .Value
.NumberFormat = "mm/dd/yyyy"
.Value = DateSerial(Year(Date), Month(strOrigValue), 1)
End With
End Sub
DateSerial
создает серийный номер даты из заданного года, месяца и дня. Year(Date)
извлекает часть года из текущей системной даты, Month(strOrigValue)
берет часть месяца из данных, которые уже находятся в ячейке, и мы хотим, чтобы первый день месяца