Страницы: 1
RSS
Группировка данных из нескольких столбцов в один
 
Всем привет возникла необходимость сгруппировать данные из нескольких столбцов в один, буду признателен за решение.
 
Здравствуйте!  
При запросе решения желательно указать:  
Вот что есть, вот что хочу получить. В приложенном Вами файле 2 столбца с заполненными данными на 64 строки и 17 столбцов по 5 строк с заполненными данными.  
Как одно связано с другим, какие данные куда должны попасть и почему в "приведенном примере" значения не совпадают - ничего не понятно.  
Сформулируйте задачу яснее, пожалуйста.
Кому решение нужно - тот пример и рисует.
 
Так подходит? Сперва выделить диапазон, затем запустить  
 
Sub tt()  
ReDim a(0)  
For Each cc In Selection  
a(UBound(a)) = cc  
ReDim Preserve a(UBound(a) + 1)  
Next  
b = [H8].Resize(UBound(a, 1)).Value
For i = 1 To UBound(b)  
b(i, 1) = a(i - 1)  
Next  
[H8].Resize(UBound(a, 1)).Value = b
End Sub
 
Пытливый  
 
надо 17 столбцов превратить в 1, вид как слева  
 
Hugo  
 
Спасибо, правда еще не освоил скрипты, буду пытаться
 
Или так, попроще  
 
Sub ttt()  
Dim a  
Dim i As Long  
Dim x As Long  
Dim cc As Range  
 
x = Selection.Cells.Count  
a = [H8].Resize(x).Value
For Each cc In Selection  
i = i + 1  
a(i, 1) = cc  
Next  
[H8].Resize(x).Value = a
End Sub
 
Единственное, если перебирать For Each - оно по строкам сперва проходит, а не по столбцам.  
Жмите кнопку.
 
{quote}{login=Hugo}{date=09.09.2010 11:29}{thema=}{post}Единственное, если перебирать For Each - оно по строкам сперва проходит, а не по столбцам.  
Жмите кнопку.{/post}{/quote}  
 
Спасибо за пример, классно, мне правда нужно, что бы стобец под столбцом был (забыл написать)
 
Подобный пример есть в приемах  
http://www.planetaexcel.ru/tip.php?aid=87
 
Тогда такой вариант, замените тот код на этот:  
 
Sub ttt()  
Dim a  
Dim i As Long  
Dim x As Long  
Dim cc As Range  
 
x = Selection.Cells.Count  
a = [H8].Resize(x).Value
For Each cc In Selection.Columns  
For Each ccc In cc.Cells  
i = i + 1  
a(i, 1) = ccc  
Next  
Next  
[H8].Resize(x).Value = a
End Sub
 
Попробуйте так, работает с выделенным диапазоном  
 
Sub bb()  
Dim c As Range, h As Long, i As Long  
h = Selection.Rows.Count  
Set c = Selection(1, 1)  
For i = 2 To Selection.Columns.Count  
   Selection.Columns(i).Copy c.Offset(h * (i - 1), 0)  
Next  
End Sub
 
Спасибо всем огромное, пожалуй куплю себе учебник по VBA, действительно можно творить чудеса!
Страницы: 1
Читают тему
Наверх