Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.08.2013, 22:36   #11
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Думаю словарь ни к чему - взяли всё в массив, объявили другой в 3 раза выше и на 2 столбца, в цикле переложили (увеличивая счётчик строк на каждое число).
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 28.08.2013, 22:57   #12
cherepushka
Пользователь
 
Регистрация: 25.02.2012
Сообщений: 81
По умолчанию

Не помните была схожая тема? Если да можете ссылочку скинуть. Спасибо.
cherepushka вне форума Ответить с цитированием
Старый 28.08.2013, 22:58   #13
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Про майки? Не помню.
Проще новый макрос написать, чем найти что-то подобное...
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 28.08.2013, 23:01   #14
cherepushka
Пользователь
 
Регистрация: 25.02.2012
Сообщений: 81
По умолчанию

Про футболки
Макросы боюсь сразу не осилить, а формулами такого не замутить.
cherepushka вне форума Ответить с цитированием
Старый 28.08.2013, 23:06   #15
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Код:
Option Explicit

Sub tt()
    Dim a(), i&, ii&, x&

    a = [a1].CurrentRegion.Value
    ReDim b(1 To UBound(a) * 3, 1 To 2)
    
    For i = 1 To UBound(a)
        For ii = 2 To 4
            x = x + 1
            b(x, 1) = a(i, 1)
            b(x, 2) = a(i, ii)
        Next
    Next
    
    Workbooks.Add(1).Sheets(1).[a1].Resize(UBound(b), 2) = b
End Sub
Вложения
Тип файла: rar Майки.rar (10.4 Кб, 29 просмотров)
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 28.08.2013 в 23:09.
Hugo121 вне форума Ответить с цитированием
Старый 28.08.2013, 23:12   #16
cherepushka
Пользователь
 
Регистрация: 25.02.2012
Сообщений: 81
По умолчанию

Игорь, этот код за такое короткое время написал? Ну вообще, респект.
Спасибо большое.
cherepushka вне форума Ответить с цитированием
Старый 28.08.2013, 23:19   #17
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Да что тут писать-то... Дольше файл оформлять-сохранять-архивировать-постить...
И кстати спецы могут замутить и формулами.
Только если много данных - файл с формулами будет тяжёлым, работать может медленно (при смене исходных данных), да и составить такие формулы думаю труднее, чем макрос написать. И протянуть ведь нужно ещё высчитать до куда...
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 28.08.2013 в 23:23.
Hugo121 вне форума Ответить с цитированием
Старый 29.08.2013, 09:48   #18
cherepushka
Пользователь
 
Регистрация: 25.02.2012
Сообщений: 81
По умолчанию

Игорь, еще один вопрос. Экспериментирую и совсем запутался. Если структура не такая как изначально, а начинается со столбца B и идет через один столбец? в приложении файл.
a = [b2].CurrentRegion.Value начинаем с B2

И как можно добавить это все не в отдельный файл, а на другой лист.
ActiveWorkbooks.Add
Спасибо
Вложения
Тип файла: rar Майки2.rar (9.5 Кб, 12 просмотров)
cherepushka вне форума Ответить с цитированием
Старый 29.08.2013, 10:21   #19
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

При пошаговом прогоне посмотрите в окне Locals что где в массиве a() - хотя и так понятно...
Ну и соответственно нужно там-сям скорректировать код:

Код:
Sub tt()
    Dim a(), i&, ii&, x&

    a = [a1].CurrentRegion.Value
    ReDim b(1 To UBound(a) * 3, 1 To 2)

    For i = 2 To UBound(a)
        For ii = 4 To 8 Step 2
            x = x + 1
            b(x, 1) = a(i, 2)
            b(x, 2) = a(i, ii)
        Next
    Next
    
    Sheets.Add.[a1].Resize(UBound(b) - 1, 2) = b
End Sub
Если в диапазоне будут пустые строки/столбцы - тогда вместо CurrentRegion придётся определять диапазон иначе, в зависимости от ситуации.
Например

Код:
Sub rr()
Range([h2], Cells(Rows.Count, "b").End(xlUp)).Select
End Sub
или хоть просто

Код:
Sub rrr()
Sheets(1).UsedRange.Select
End Sub
Тут select только чтоб посмтореть на определённый диапазон, в коде селекты не нужны.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 29.08.2013, 11:00   #20
VictorM
Старожил
 
Аватар для VictorM
 
Регистрация: 15.05.2008
Сообщений: 2,058
Печаль

Цитата:
посмотрите в окне Locals что где в массиве a()
Блин, чувствую себя полным дебилом
Не знал об этом, спасибо!
"Дайте людям рыбы, и вы накормите их на весь день; научите их ловить рыбу - и вы накормите их на всю жизнь"
"Большое спасибо" - Z261597841314, R208907249777, U447361470499
VictorM вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Элемент массива с максимальным кол-вом чётных цифр. Faxford Помощь студентам 2 20.06.2011 19:19
Создание отчёта с определённым кол-вом полей gamaiunov_alex Microsoft Office Access 2 20.09.2010 21:13
Найти слова с четным кол-вом символов. Си. Terror Общие вопросы C/C++ 2 28.04.2010 16:50
Помогите найти строку с наибольшим кол-вом отриц. эл-ов Danil21 Общие вопросы C/C++ 1 21.06.2009 11:54
Как работать с очень большим кол-вом чисел?? Umnik1 Общие вопросы Delphi 16 25.11.2008 19:22