Код VBA для продолжения форматирования с использованием текста в столбец, когда некоторые ячейки пусты
Поскольку мои знания VBA невелики, я обычно записываю нужные мне макросы. Поскольку у меня есть столбцы с датой и временем в одной и той же ячейке, я использовал функцию Excel "Текст в столбцы" и записал ее, придумав код, приведенный ниже. Однако, если в любой строке есть пустая ячейка, все ячейки ниже, которые не отформатированы!
В своем поиске я обнаружил, что решение основано на циклическом кодировании для выполнения действия ячейка за ячейкой, но я не нашел, как сделать то, что нужно, используя это, плюс выглядит чрезвычайно сложным!
Я спрашиваю, есть ли способ игнорировать пустые ячейки и продолжить форматирование.
Это код Text to Column, но есть ли код, который я могу добавить до или после, чтобы игнорировать пустые ячейки и при этом сохранить код ниже?
Columns("S:S").Select
Selection.Insert Shift:=xlToRight
Range("R2").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.TextToColumns Destination:=Range("R2"), DataType:=xlFixedWidth, _
FieldInfo:=Array(Array(0, 2), Array(9, 1)), TrailingMinusNumbers:=True
Columns("S:S").Select
Selection.Delete Shift:=xlToLeft
Columns("T:T").Select
Selection.Insert Shift:=xlToRight
Range("S2").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.TextToColumns Destination:=Range("S2"), DataType:=xlFixedWidth, _
FieldInfo:=Array(Array(0, 2), Array(9, 1)), TrailingMinusNumbers:=True
Columns("T:T").Select
Selection.Delete Shift:=xlToLeft
Columns("U:U").Select
Selection.Insert Shift:=xlToRight
Range("T2").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.TextToColumns Destination:=Range("T2"), DataType:=xlFixedWidth, _
FieldInfo:=Array(Array(0, 2), Array(9, 1)), TrailingMinusNumbers:=True
Columns("U:U").Select
Selection.Delete Shift:=xlToLeft
1 ответ
Изменить,
Range(Selection, Selection.End(xlDown)).Select
... чтобы,
Range(Cells(2, "T", Cells(Rows.Count, "T").End(xlUp)).Select
Изменить "T"
в соответствующий столбец.
Я скромно предлагаю вам сделать шаг, чтобы избежать использования Range .Select и Range .Activate методы для выполнения ваших задач. Записанный код - это хороший способ начать, но вы должны быть готовы изменить код, чтобы удалить Select и Selection, если вы планируете сохранить код для будущего использования. См. Раздел Как избежать использования макросов Select в Excel VBA, чтобы узнать больше о том, как отказаться от использования выбора и активации для достижения своих целей.
Например:
With Worksheets("Sheet1")
.Columns("S:S").Insert Shift:=xlToRight
With .Range(.Cells(2, "R"), .Cells(Rows.Count, "R").End(xlUp))
.TextToColumns Destination:=.Range("R2"), DataType:=xlFixedWidth, _
FieldInfo:=Array(Array(0, 2), Array(9, 1)), _
TrailingMinusNumbers:=True
End With
.Columns("S:S").Delete Shift:=xlToLeft
.Columns("T:T").Insert Shift:=xlToRight
With .Range(.Cells(2, "S"), .Cells(Rows.Count, "S").End(xlUp))
.TextToColumns Destination:=.Range("S2"), DataType:=xlFixedWidth, _
FieldInfo:=Array(Array(0, 2), Array(9, 1)), _
TrailingMinusNumbers:=True
End With
.Columns("T:T").Delete Shift:=xlToLeft
.Columns("U:U").Insert Shift:=xlToRight
With .Range(.Cells(2, "T"), .Cells(Rows.Count, "T").End(xlUp))
.TextToColumns Destination:=.Range("T2"), DataType:=xlFixedWidth, _
FieldInfo:=Array(Array(0, 2), Array(9, 1)), _
TrailingMinusNumbers:=True
End With
.Columns("U:U").Delete Shift:=xlToLeft
End With
Использование цикла для прохода по столбцам R, S и T (столбцы 18, 19 и 20) еще больше очистит ваш код.
Dim c As Long
With Worksheets("Sheet1")
For c = 18 To 20
With .Range(.Cells(2, c), .Cells(.Rows.Count, c).End(xlUp))
.TextToColumns Destination:=.Cells(1), DataType:=xlFixedWidth, _
FieldInfo:=Array(Array(0, xlMDYFormat), Array(10, xlSkipColumn))
End With
Next c
End With
Я применил xlMDYFormat к дате. Если ваши даты в формате DMY, используйте xlDMYFormat или проверьте другие доступные форматы с помощью перечисления xlColumnDataType.