Nic70y, если у меня больше столбцов и строк, что мне менять, чтобы ыормула работала? Я попробовала переписать, но строк больше 3х и она не очень работает. В четвертой ячейке она возвращает число из следующего столбца не 333, а 334. Еще вопрос, если массив данных это свереутый список, как указать?
Nic70y, если у меня больше столбцов и строк, что мне менять, чтобы ыормула работала? Я попробовала переписать, но строк больше 3х и она не очень работает. В четвертой ячейке она возвращает число из следующего столбца не 333, а 334. Еще вопрос, если массив данных это свереутый список, как указать?Tata2020
Nic70y, имеется ввиду фильтр, который собирает данные по значению. Получается, что я использую строку 100,284,320 и т. д. Есть возможность, чтобы его не копировать, чтобы он был массивом, без скрытых/свернутых ячеек?
Nic70y, имеется ввиду фильтр, который собирает данные по значению. Получается, что я использую строку 100,284,320 и т. д. Есть возможность, чтобы его не копировать, чтобы он был массивом, без скрытых/свернутых ячеек?Tata2020
Tata2020, предложу Вам макрос, попытался нарисовать его максимально понятно
[vba]
Код
Sub u_79() Application.ScreenUpdating = False 'отключим обновление экрана a = "A3:D6" 'диапазон из которого берем данные b = 11 'строка в которую вставляем Rows(b).Clear 'сотрем старые данные 'пройдемся циклом по диапазону (только видимые ячейки) For Each c In Range(a).SpecialCells(xlCellTypeVisible) d = Cells(b, Columns.Count).End(xlToLeft).Column 'правый заполненный столбец If Cells(b, d).Value <> "" Then d = d + 1 'если в столбце есть значения, то + 1 вправо Cells(b, d) = c.Value 'запишем значение из диапазона Next Application.ScreenUpdating = True 'включим End Sub
[/vba]
апдэйт, не получилось, не то направление... с тем будет сложнее
макрос = обычный* копипаст [vba]
Код
Sub u_79() Application.ScreenUpdating = False 'отключим обновление экрана '.............................................. a = "A3:D6" 'диапазон из которого берем данные b = 11 'строка в которую вставляем '.............................................. Rows(b).Clear 'сотрем старые данные c = Range(a).Column '1й столбец d = Range(a).Columns.Count 'кол-во столбцов e = Range(a).Row '1я строка f = Range(a).Rows.Count 'количество строк 'пройдемся циклом по столбцам For i = c To c + d - 1 j = Cells(b, Columns.Count).End(xlToLeft).Column 'правый заполненный столбец If Cells(b, j).Value <> "" Then j = j + 1 'если в столбце есть значения, то + 1 вправо Range(Cells(e, i), Cells(e + f - 1, i)).Copy 'копируем столбец Cells(b, j).PasteSpecial Paste:=xlPasteValues, Transpose:=True 'вставим, транспортируя Next Application.CutCopyMode = False 'очисти буфер обмена Application.ScreenUpdating = True 'включим End Sub
[/vba]файл 476
Tata2020, предложу Вам макрос, попытался нарисовать его максимально понятно
[vba]
Код
Sub u_79() Application.ScreenUpdating = False 'отключим обновление экрана a = "A3:D6" 'диапазон из которого берем данные b = 11 'строка в которую вставляем Rows(b).Clear 'сотрем старые данные 'пройдемся циклом по диапазону (только видимые ячейки) For Each c In Range(a).SpecialCells(xlCellTypeVisible) d = Cells(b, Columns.Count).End(xlToLeft).Column 'правый заполненный столбец If Cells(b, d).Value <> "" Then d = d + 1 'если в столбце есть значения, то + 1 вправо Cells(b, d) = c.Value 'запишем значение из диапазона Next Application.ScreenUpdating = True 'включим End Sub
[/vba]
апдэйт, не получилось, не то направление... с тем будет сложнее
макрос = обычный* копипаст [vba]
Код
Sub u_79() Application.ScreenUpdating = False 'отключим обновление экрана '.............................................. a = "A3:D6" 'диапазон из которого берем данные b = 11 'строка в которую вставляем '.............................................. Rows(b).Clear 'сотрем старые данные c = Range(a).Column '1й столбец d = Range(a).Columns.Count 'кол-во столбцов e = Range(a).Row '1я строка f = Range(a).Rows.Count 'количество строк 'пройдемся циклом по столбцам For i = c To c + d - 1 j = Cells(b, Columns.Count).End(xlToLeft).Column 'правый заполненный столбец If Cells(b, j).Value <> "" Then j = j + 1 'если в столбце есть значения, то + 1 вправо Range(Cells(e, i), Cells(e + f - 1, i)).Copy 'копируем столбец Cells(b, j).PasteSpecial Paste:=xlPasteValues, Transpose:=True 'вставим, транспортируя Next Application.CutCopyMode = False 'очисти буфер обмена Application.ScreenUpdating = True 'включим End Sub