ли ваши 5 цифр (в/ш/ведущих нулей) числа являются истинные номера с форматированием ячейки 00000
или текстом Сущего просмотровым как-номер с Range.PrefixCharacter property, то Range.Text property должен быть в состоянии определить, их обрезанная длина от отображаемого текста.
Следующий код следует за вашими логическими шагами с несколькими изменениями; наиболее очевидным является то, что он идет от нижней части колонны А до вершины. Это делается для того, чтобы избежать пропусков строк, которые были удалены.
Sub bringOver()
Dim rw As Long, v As Long, vVAL5s As Variant, vREV5s As Variant
'put the cursor anywhere in here and start tapping F8
'it will help if you can also see the worksheet with your
'sample data
ReDim vVAL5s(0) 'preset some space for the first value
With Worksheets("Sheet1") '<~~ set this worksheet reference properly!
'ensure a blank column B
.Columns(2).Insert
'work from the bottom to the top when deleting rows
'or you risk skipping a row
For rw = .Cells(Rows.Count, 1).End(xlUp).Row To 2 Step -1
'determine the length of the trimmed displayed length
'and act accordingly
Select Case Len(Trim(.Cells(rw, 1).Text))
Case Is < 5
'do nothing
Case 5
'it's one to be transferred; collect it
vVAL5s(UBound(vVAL5s)) = .Cells(rw, 1).Text
'make room for the next
ReDim Preserve vVAL5s(UBound(vVAL5s) + 1)
Case 7
'only process the transfer if there is something to transfer
If CBool(UBound(vVAL5s)) Then
'the array was built from the bottom to the top
'so reverse the order in the array
ReDim vREV5s(UBound(vVAL5s) - 1)
For v = UBound(vVAL5s) - 1 To LBound(vVAL5s) Step -1
vREV5s(UBound(vREV5s) - v) = vVAL5s(v)
Next v
'working With Cells is like selecting htem but without selecting them
'want to work With a group of cells tall enough for all the collected values
With .Cells(rw, 1).Resize(UBound(vREV5s) + 1, 1)
'move over to column B and put the values in
.Offset(0, 1) = Application.Transpose(vREV5s)
'make sure they show leading zeroes
.Offset(0, 1).NumberFormat = "[Color13]00000;[Color9]@"
'if there was more than 1 moved over, FillDown the 7-wide value
If CBool(UBound(vREV5s)) Then .FillDown
'delete the last row
.Cells(.Rows.Count + 1, 1).EntireRow.Delete
End With
'reset the array for the next first value
ReDim vVAL5s(0)
End If
Case Else
'do nothing
End Select
'move to the next row up and continue
Next rw
'covert the formatted numbers to text
Call makeText(.Columns(2))
End With
End Sub
Sub makeText(rng As Range)
Dim tCell As Range
For Each tCell In rng.SpecialCells(xlCellTypeConstants, xlNumbers)
tCell.Value = Format(tCell.Value2, "\'00000;@")
Next tCell
End Sub
Незадолго до выхода из основной подпрограммы короткий вспомогательный вспомогательный вызов вызывается с использованием столбца B в виде диапазона ячеек.Это будет проходить через все числа в столбце B и преобразовывать числа в текст с ведущими нулями.
Как отмечено в комментариях к коду, установите себя так, чтобы вы могли видеть лист кода, а также часть своего рабочего листа и начать прослушивать F8 для ввода кода. Я попытался добавить форму запуска комментариев с примечаниями, оставленными над многими строками кода.
Интересный проект, и вы написали достойную спецификацию программного обеспечения, но он по-прежнему является спецификацией программного обеспечения, а [SO] (http://stackoverflow.com/tour) не является бесплатной службой написания кода. Начните работу с макрорекордером и вернитесь, чтобы изменить свой вопрос, чтобы включить свои собственные усилия, когда вы столкнулись с трудностями в реформировании записанного кода для большей цели. – Jeeped
Благодарим вас за чтение, я не запрашиваю код и не просматриваю код. Я прошу, чтобы моя логика имела недостатки, и если бы я забыл важный шаг, который мог бы убить функциональность после написания. В настоящее время я читаю и учился писать выше. –
Ваша логика будет работать, но ее можно оптимизировать. 2-мерный вариант массива будет быстрее, и строки могут быть удалены в одном куске, а не во многих маленьких кусках. Когда-то, что выделяется, вы полагаетесь на длину. Являются ли '00900' и т. Д. Отформатированы как текст или это форматирование номера ячейки' 00000' для достижения начальных нулей? Когда вы ходите по рядам, начинайте снизу и работайте вверх. – Jeeped