Приветствую всех.Прошу помочь в решении. В листе " База "для столбцов A и C нужен макрос для заполнения пустых ячеек предыдущим значением . На просторах интернета нашла макрос , но после запуска эксель просто завис ( именно из-за столбца С, шел расчет процессов )Я честно ничего в этом не понимаю. Поэтому убрала этот макрос.Данный файл будут заполнять люди старшего возраста, поэтому хочу упростить им выполнение.
Приветствую всех.Прошу помочь в решении. В листе " База "для столбцов A и C нужен макрос для заполнения пустых ячеек предыдущим значением . На просторах интернета нашла макрос , но после запуска эксель просто завис ( именно из-за столбца С, шел расчет процессов )Я честно ничего в этом не понимаю. Поэтому убрала этот макрос.Данный файл будут заполнять люди старшего возраста, поэтому хочу упростить им выполнение.GGR
Попробуйте такой макрос. Запускать с листа "база". [vba]
Код
Sub Fill() With Application .ScreenUpdating = False .Calculation = xlCalculationManual .EnableEvents = False End With Dim Lr&, VBook&, VSheet&, i& Lr = Cells(Rows.Count, "B").End(xlUp).Row For i = 2 To Lr If Cells(i, 1) <> "" Then VBook = Cells(i, 1) Else Cells(i, 1) = VBook End If If Cells(i, 3) <> "" Then VSheet = Cells(i, 3) Else Cells(i, 3) = VSheet End If Next With Application .ScreenUpdating = True .Calculation = xlCalculationAutomatic .EnableEvents = True End With End Sub
[/vba]
Попробуйте такой макрос. Запускать с листа "база". [vba]
Код
Sub Fill() With Application .ScreenUpdating = False .Calculation = xlCalculationManual .EnableEvents = False End With Dim Lr&, VBook&, VSheet&, i& Lr = Cells(Rows.Count, "B").End(xlUp).Row For i = 2 To Lr If Cells(i, 1) <> "" Then VBook = Cells(i, 1) Else Cells(i, 1) = VBook End If If Cells(i, 3) <> "" Then VSheet = Cells(i, 3) Else Cells(i, 3) = VSheet End If Next With Application .ScreenUpdating = True .Calculation = xlCalculationAutomatic .EnableEvents = True End With End Sub
i691198, все отлично работает. Протестировала.Благодарю.Подскажите пожалуйста , а можно код дописать , чтобы на обратную позицию вернуть( т.е без заполненных ячеек)?
i691198, все отлично работает. Протестировала.Благодарю.Подскажите пожалуйста , а можно код дописать , чтобы на обратную позицию вернуть( т.е без заполненных ячеек)?GGR
Сообщение отредактировал GGR - Вторник, 07.10.2025, 22:37
Чтобы отменить заполнение нужно где то сохранить предыдущее состояние таблицы. Можно сделать так - после строки [vba]
Код
Lr = Cells(Rows.Count, "B").End(xlUp).Row
[/vba] вставить строку [vba]
Код
Range("A2:C" & Lr).Copy Range("BA2:BC" & Lr)
[/vba] А для отмены заполнения использовать такой макрос. [vba]
Код
Sub UnFill() Dim Lr& If Cells(2, "BB") <> "" Then With Application .ScreenUpdating = False .Calculation = xlCalculationManual .EnableEvents = False End With Lr = Cells(Rows.Count, "BB").End(xlUp).Row Range("BA2:BC" & Lr).Copy Range("A2:C" & Lr) Range("BA2:BC" & Lr).Clear With Application .ScreenUpdating = True .Calculation = xlCalculationAutomatic .EnableEvents = True End With End If End Sub
[/vba]
Чтобы отменить заполнение нужно где то сохранить предыдущее состояние таблицы. Можно сделать так - после строки [vba]
Код
Lr = Cells(Rows.Count, "B").End(xlUp).Row
[/vba] вставить строку [vba]
Код
Range("A2:C" & Lr).Copy Range("BA2:BC" & Lr)
[/vba] А для отмены заполнения использовать такой макрос. [vba]
Код
Sub UnFill() Dim Lr& If Cells(2, "BB") <> "" Then With Application .ScreenUpdating = False .Calculation = xlCalculationManual .EnableEvents = False End With Lr = Cells(Rows.Count, "BB").End(xlUp).Row Range("BA2:BC" & Lr).Copy Range("A2:C" & Lr) Range("BA2:BC" & Lr).Clear With Application .ScreenUpdating = True .Calculation = xlCalculationAutomatic .EnableEvents = True End With End If End Sub
i691198, я вставила код, но почему то отмены не произошло.Посмотрите пожалуйста,что не так сделала.Файл приложила . Заполнение работает просто чудесно.Благодарю
i691198, я вставила код, но почему то отмены не произошло.Посмотрите пожалуйста,что не так сделала.Файл приложила . Заполнение работает просто чудесно.БлагодарюGGR
Sub u_18() With Application .ScreenUpdating = False .Calculation = xlCalculationManual .EnableEvents = False End With aa = Cells(Rows.Count, "b").End(xlUp).Row ab = Application.Max(Range("a1:a" & aa)) For ac = 1 To ab ad = Application.Match(ac, Range("a1:a" & aa), 0) + 1 If ac < ab Then ae = Application.Match(ac + 1, Range("a1:a" & aa), 0) - 1 Else ae = aa End If af = Range("a" & ad).Value If af = "" Then Range("a" & ad & ":a" & ae) = ac Else Range("a" & ad & ":a" & ae).ClearContents End If Next ab = Application.Max(Range("c1:c" & aa)) For ac = 1 To ab ad = Application.Match(ac, Range("c1:c" & aa), 0) + 1 If ac < ab Then ae = Application.Match(ac + 1, Range("c1:c" & aa), 0) - 1 Else ae = aa End If If af = "" Then Range("c" & ad & ":c" & ae) = ac Else Range("c" & ad & ":c" & ae).ClearContents End If Next With Application .ScreenUpdating = True .Calculation = xlCalculationAutomatic .EnableEvents = True End With End Sub
[/vba]
чисто под Ваш файл [vba]
Код
Sub u_18() With Application .ScreenUpdating = False .Calculation = xlCalculationManual .EnableEvents = False End With aa = Cells(Rows.Count, "b").End(xlUp).Row ab = Application.Max(Range("a1:a" & aa)) For ac = 1 To ab ad = Application.Match(ac, Range("a1:a" & aa), 0) + 1 If ac < ab Then ae = Application.Match(ac + 1, Range("a1:a" & aa), 0) - 1 Else ae = aa End If af = Range("a" & ad).Value If af = "" Then Range("a" & ad & ":a" & ae) = ac Else Range("a" & ad & ":a" & ae).ClearContents End If Next ab = Application.Max(Range("c1:c" & aa)) For ac = 1 To ab ad = Application.Match(ac, Range("c1:c" & aa), 0) + 1 If ac < ab Then ae = Application.Match(ac + 1, Range("c1:c" & aa), 0) - 1 Else ae = aa End If If af = "" Then Range("c" & ad & ":c" & ae) = ac Else Range("c" & ad & ":c" & ae).ClearContents End If Next With Application .ScreenUpdating = True .Calculation = xlCalculationAutomatic .EnableEvents = True End With End Sub