Довольно нестандартная задача. На скриншоте показано: В таблицу вводятся данные(обведено зеленым, с 1 по 14 строки), которые затем, приводятся в технический вид ( обведено синим,19-20 и 23 строки) путем простого приравнивания. Количество данных может меняться, но в техническом виде нельзя допустить пропусков. Ломаю голову уже очень долго. Было бы идеально, если бы при обнаружении пропуска, ячейка просто исчезала/скрывалась, при этом остальная часть сдвигалась влево, но увы, такие маневры на сколько я знаю в программе не предусмотрены. Нужна логика вида: ЕСЛИ A11=0, то СДВИГ (B11-Q11) влево на 1 позицию. Поиск в интернете не помог, еще и потому что что очень сложно сформулировать проблему. Чаще всего натыкался на гайды по ф-ции СМЕЩ, которая мне не подходит. Вот набрел на Ваш форум, и надеюсь на помощь. Спасибо!
Довольно нестандартная задача. На скриншоте показано: В таблицу вводятся данные(обведено зеленым, с 1 по 14 строки), которые затем, приводятся в технический вид ( обведено синим,19-20 и 23 строки) путем простого приравнивания. Количество данных может меняться, но в техническом виде нельзя допустить пропусков. Ломаю голову уже очень долго. Было бы идеально, если бы при обнаружении пропуска, ячейка просто исчезала/скрывалась, при этом остальная часть сдвигалась влево, но увы, такие маневры на сколько я знаю в программе не предусмотрены. Нужна логика вида: ЕСЛИ A11=0, то СДВИГ (B11-Q11) влево на 1 позицию. Поиск в интернете не помог, еще и потому что что очень сложно сформулировать проблему. Чаще всего натыкался на гайды по ф-ции СМЕЩ, которая мне не подходит. Вот набрел на Ваш форум, и надеюсь на помощь. Спасибо! pavelpasha
Sub DelCell() Dim Arr Arr = Array(19, 20, 23) Application.ScreenUpdating = False For i = 0 To 2 For J = Cells(Arr(i), Columns.Count).End(xlToLeft).Column To 18 Step -1 If Cells(Arr(i), J) = "" Then Cells(Arr(i), J).Delete (xlToLeft) Next J Next i Application.ScreenUpdating = True End Sub
[/vba]
Думаю, примерно так [vba]
Код
Sub DelCell() Dim Arr Arr = Array(19, 20, 23) Application.ScreenUpdating = False For i = 0 To 2 For J = Cells(Arr(i), Columns.Count).End(xlToLeft).Column To 18 Step -1 If Cells(Arr(i), J) = "" Then Cells(Arr(i), J).Delete (xlToLeft) Next J Next i Application.ScreenUpdating = True End Sub