Доброго здравия форумчанам excelworld.ru !!! Очень нужна Ваша помощь в решении небольшой проблемы. В приведённом примере на Лист3 имеются 30 строк (в реальных условиях их будет 50000 и более ) с числами и пустыми ячейками между ними. Мне нужно удалить пустые ячейки со сдвигом влево в диапазоне E2:CP2 E3:CP3 E4:CP4 и так до тех пор, пока в столбце С и соответственно строке имеется число. Стандартный способ выделение группы ячеек – пустые ячейки на таком количестве строк выполняется ну ооооочень долго, нужен макрос . Помогите пожалуйста если не сложно. Спасибо!!!
Доброго здравия форумчанам excelworld.ru !!! Очень нужна Ваша помощь в решении небольшой проблемы. В приведённом примере на Лист3 имеются 30 строк (в реальных условиях их будет 50000 и более ) с числами и пустыми ячейками между ними. Мне нужно удалить пустые ячейки со сдвигом влево в диапазоне E2:CP2 E3:CP3 E4:CP4 и так до тех пор, пока в столбце С и соответственно строке имеется число. Стандартный способ выделение группы ячеек – пустые ячейки на таком количестве строк выполняется ну ооооочень долго, нужен макрос . Помогите пожалуйста если не сложно. Спасибо!!!djon2012
Sub ertert() Dim x, y(), i&, j&, k&, mx& Application.ScreenUpdating = False With Range("E2:CP" & Cells(Rows.Count, 3).End(xlUp).Row) x = .Value ReDim y(1 To UBound(x), 1 To UBound(x, 2)) For i = 1 To UBound(x) For j = 1 To UBound(x, 2) If Len(x(i, j)) Then k = k + 1: y(i, k) = x(i, j) Next j If k > mx Then mx = k k = 0 Next i .ClearContents .Resize(, mx).Value = y() End With Application.ScreenUpdating = True End Sub
[/vba]
вот так можно попробовать [vba]
Код
Sub ertert() Dim x, y(), i&, j&, k&, mx& Application.ScreenUpdating = False With Range("E2:CP" & Cells(Rows.Count, 3).End(xlUp).Row) x = .Value ReDim y(1 To UBound(x), 1 To UBound(x, 2)) For i = 1 To UBound(x) For j = 1 To UBound(x, 2) If Len(x(i, j)) Then k = k + 1: y(i, k) = x(i, j) Next j If k > mx Then mx = k k = 0 Next i .ClearContents .Resize(, mx).Value = y() End With Application.ScreenUpdating = True End Sub
Sub jjj() Application.ScreenUpdating = False Set rng = Range([c2], UsedRange.SpecialCells(xlLastCell)).EntireColumn For Each clmn In rng addr = addr & IIf(WorksheetFunction.CountBlank(clmn) = clmn.Rows.Count, clmn.Column & ",", "") Next clmn Set rng = Nothing addr = Mid(addr, 1, Len(addr) - 1) If Len(addr) Then a = Split(addr, ",") adr = "" For i = UBound(a) To LBound(a) Step -1 Cells(, --a(i)).EntireColumn.Delete Shift:=xlToLeft Next i Set a = Nothing End If End Sub
[/vba]
До кучи.[vba]
Код
Sub jjj() Application.ScreenUpdating = False Set rng = Range([c2], UsedRange.SpecialCells(xlLastCell)).EntireColumn For Each clmn In rng addr = addr & IIf(WorksheetFunction.CountBlank(clmn) = clmn.Rows.Count, clmn.Column & ",", "") Next clmn Set rng = Nothing addr = Mid(addr, 1, Len(addr) - 1) If Len(addr) Then a = Split(addr, ",") adr = "" For i = UBound(a) To LBound(a) Step -1 Cells(, --a(i)).EntireColumn.Delete Shift:=xlToLeft Next i Set a = Nothing End If End Sub