Подскажите (а лучше покажите) как сделать макрос автоматической нумерации списка. Каждая позиция состоит из 3-х строк, номера надо в первых. Список динамический и не на активном листе. Новый год на носу, а нумеровать надо
Подскажите (а лучше покажите) как сделать макрос автоматической нумерации списка. Каждая позиция состоит из 3-х строк, номера надо в первых. Список динамический и не на активном листе. Новый год на носу, а нумеровать надо wild_pig
Тягать за крестик я давно умею ) хотелось при добавлении новой позиции ну или когда потребуется нумерация проходила без вмешательства шаловливых ручек. есть у меня такой макрос [vba]
Код
Sub num() With Sheets("Лист1") x = .[C7].CurrentRegion.Rows.Count .Range("B7") = 1 If x > 2 Then .Range("B8") = 2 .Range("B7:B8").AutoFill Destination:=.Range("B7:B" & x), Type:=xlFillDefault End If End With End Sub
[/vba] но он выдаёт ошибки при пустых ячейках над нумерацией и когда позиций меньше 3х.
Тягать за крестик я давно умею ) хотелось при добавлении новой позиции ну или когда потребуется нумерация проходила без вмешательства шаловливых ручек. есть у меня такой макрос [vba]
Код
Sub num() With Sheets("Лист1") x = .[C7].CurrentRegion.Rows.Count .Range("B7") = 1 If x > 2 Then .Range("B8") = 2 .Range("B7:B8").AutoFill Destination:=.Range("B7:B" & x), Type:=xlFillDefault End If End With End Sub
[/vba] но он выдаёт ошибки при пустых ячейках над нумерацией и когда позиций меньше 3х.wild_pig
Сообщение отредактировал wild_pig - Воскресенье, 30.12.2012, 23:53
Sub FormatRange() Set MyRange = Sheets("Девки").UsedRange For i = 1 To MyRange.Rows.Count If ((i + 2) Mod 3) = 0 Then Range("B" & MyRange.Item(1).Row + i - 1) = ((i - 1) \ 3) + 1 Next i End Sub
[/vba]
[vba]
Код
Sub FormatRange() Set MyRange = Sheets("Девки").UsedRange For i = 1 To MyRange.Rows.Count If ((i + 2) Mod 3) = 0 Then Range("B" & MyRange.Item(1).Row + i - 1) = ((i - 1) \ 3) + 1 Next i End Sub
А если тянуть (копировать) не одну, а сразу три ячейки, то формула до неприличия упрощается:
[vba]
Код
Sub copyNot1But3cells() With Sheets("Девки") .Range("B7").FormulaR1C1 = "=R[-3]C+1" .Range("B7:B9").Copy .Range("B7:B" & _ .UsedRange.SpecialCells(xlCellTypeLastCell).Row) End With End Sub
[/vba]
А если тянуть (копировать) не одну, а сразу три ячейки, то формула до неприличия упрощается:
[vba]
Код
Sub copyNot1But3cells() With Sheets("Девки") .Range("B7").FormulaR1C1 = "=R[-3]C+1" .Range("B7:B9").Copy .Range("B7:B" & _ .UsedRange.SpecialCells(xlCellTypeLastCell).Row) End With End Sub
А если тянуть (копировать) не одну, а сразу три ячейки, то формула до неприличия упрощается:
Sub copyNot1But3cells() With Sheets("Девки") .Range("B7").FormulaR1C1 = "=R[-3]C+1" .Range("B7:B9").Copy .Range("B7:B" & _ .UsedRange.SpecialCells(xlCellTypeLastCell).Row) End With End Sub
Такой способ не допускает незаполненных ячеек в нумеруемых блоках (по 3), если заполнены не все три, то нумерация не происходит. У Алекса код "шо нада" почти ) Спасибо, вам, всем. Уже 12 часов, а не в одном глазу( С наступающим, вас, Новым годом. Желаю успехов и здоровья. Ещё раз СПАСИБО!
Цитата (Gustav)
А если тянуть (копировать) не одну, а сразу три ячейки, то формула до неприличия упрощается:
Sub copyNot1But3cells() With Sheets("Девки") .Range("B7").FormulaR1C1 = "=R[-3]C+1" .Range("B7:B9").Copy .Range("B7:B" & _ .UsedRange.SpecialCells(xlCellTypeLastCell).Row) End With End Sub
Такой способ не допускает незаполненных ячеек в нумеруемых блоках (по 3), если заполнены не все три, то нумерация не происходит. У Алекса код "шо нада" почти ) Спасибо, вам, всем. Уже 12 часов, а не в одном глазу( С наступающим, вас, Новым годом. Желаю успехов и здоровья. Ещё раз СПАСИБО!wild_pig
Сообщение отредактировал wild_pig - Понедельник, 31.12.2012, 14:55
Gustav, если заполнить три первых ячейки будет номер 1, если заполнить четыре ячейки будет тоже 1, только когда будет шесть записей появится 2. Так тоже хорошо ну, а если забудем внести данные , а цифру очень хочется:-)
Gustav, если заполнить три первых ячейки будет номер 1, если заполнить четыре ячейки будет тоже 1, только когда будет шесть записей появится 2. Так тоже хорошо ну, а если забудем внести данные , а цифру очень хочется:-)kalbasiatka
Еще вариант. Может быть пригодится. Макрос срабатывает по событию на листе - изменение значения в ячейке. [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) Application.EnableEvents = False RowStart = 7 'начало таблицы If Not Intersect(Range("C" & RowStart & ":C65536"), Target) Is Nothing Then On Error GoTo Errors1 If Target.Address(0, 0) = "C" & RowStart Then Target.Offset(0, -1) = 1: GoTo Errors1 Target.Offset(0, -1) = IIf(Target.Offset(-3, -1) <> Empty And Target <> "", Target.Offset(-3, -1) + 1, "") If Target.Offset(-3, -1) = Empty And Target.Offset(-1, 0) = "" Then Target = "" End If Errors1: Application.EnableEvents = True End Sub
[/vba] В код добавлена строка. Без нее нельзя заполнить таблицу с "нуля" [vba]
Код
If Target.Address(0, 0) = "C" & RowStart Then Target.Offset(0, -1) = 1: GoTo Errors1
[/vba]
Еще вариант. Может быть пригодится. Макрос срабатывает по событию на листе - изменение значения в ячейке. [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) Application.EnableEvents = False RowStart = 7 'начало таблицы If Not Intersect(Range("C" & RowStart & ":C65536"), Target) Is Nothing Then On Error GoTo Errors1 If Target.Address(0, 0) = "C" & RowStart Then Target.Offset(0, -1) = 1: GoTo Errors1 Target.Offset(0, -1) = IIf(Target.Offset(-3, -1) <> Empty And Target <> "", Target.Offset(-3, -1) + 1, "") If Target.Offset(-3, -1) = Empty And Target.Offset(-1, 0) = "" Then Target = "" End If Errors1: Application.EnableEvents = True End Sub
[/vba] В код добавлена строка. Без нее нельзя заполнить таблицу с "нуля" [vba]
Код
If Target.Address(0, 0) = "C" & RowStart Then Target.Offset(0, -1) = 1: GoTo Errors1
Здравствуйте, подскажите, а если надо нумеровать только строки содержащие пол: ж. [moder]Тогда нужно прочитать Правила форума и создать свою тему
Здравствуйте, подскажите, а если надо нумеровать только строки содержащие пол: ж. [moder]Тогда нужно прочитать Правила форума и создать свою темуNATA1111