Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Выгрузка массива - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Выгрузка массива (Макросы/Sub)
Выгрузка массива
ZamoK Дата: Среда, 23.11.2016, 13:32 | Сообщение № 1
Группа: Проверенные
Ранг: Обитатель
Сообщений: 268
Репутация: 4 ±
Замечаний: 0% ±

Excel 2003-2016
Добрый день знатоки!
Есть задача выбрать перечень инструмента по операциям, по каждому из номенов. Нашел более подходящий макрос для этой цели, ну и немного подшаманил для моего случая, но выгружает мой макрос только последнюю строку (операцию). Не могу сообразить, что поправить в коде чтоб выгружал полный перечень по каждой позиции.
К сообщению приложен файл: 12.xls (59.0 Kb)


Я не Гуру, но стремлюсь!

Сообщение отредактировал ZamoK - Среда, 23.11.2016, 14:48
 
Ответить
СообщениеДобрый день знатоки!
Есть задача выбрать перечень инструмента по операциям, по каждому из номенов. Нашел более подходящий макрос для этой цели, ну и немного подшаманил для моего случая, но выгружает мой макрос только последнюю строку (операцию). Не могу сообразить, что поправить в коде чтоб выгружал полный перечень по каждой позиции.

Автор - ZamoK
Дата добавления - 23.11.2016 в 13:32
_Boroda_ Дата: Среда, 23.11.2016, 13:44 | Сообщение № 2
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16674
Репутация: 6479 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
5-ю снизу строку вот так перепишите
[vba]
Код
With Лист1.Range("A3")
[/vba]


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
Сообщение5-ю снизу строку вот так перепишите
[vba]
Код
With Лист1.Range("A3")
[/vba]

Автор - _Boroda_
Дата добавления - 23.11.2016 в 13:44
ZamoK Дата: Среда, 23.11.2016, 13:56 | Сообщение № 3
Группа: Проверенные
Ранг: Обитатель
Сообщений: 268
Репутация: 4 ±
Замечаний: 0% ±

Excel 2003-2016
Поправил, но это не меняет сути вопроса. Вопрос в том, что выгрузить надо весь инструмент если он есть в столбце "I" или "L" по каждой позиции


Я не Гуру, но стремлюсь!

Сообщение отредактировал ZamoK - Среда, 23.11.2016, 13:56
 
Ответить
СообщениеПоправил, но это не меняет сути вопроса. Вопрос в том, что выгрузить надо весь инструмент если он есть в столбце "I" или "L" по каждой позиции

Автор - ZamoK
Дата добавления - 23.11.2016 в 13:56
devilkurs Дата: Среда, 23.11.2016, 14:38 | Сообщение № 4
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 167
Репутация: 43 ±
Замечаний: 0% ±

Excel 2007, 2010
У Вас со словарем проблема:
[vba]
Код
        For i = 1 To UBound(s)
            .Item(s(i, 1)) = i
             Next
[/vba]
Словарь в итоге запоминает последнее i по каждому номеру. Переделывайте логику.


 
Ответить
СообщениеУ Вас со словарем проблема:
[vba]
Код
        For i = 1 To UBound(s)
            .Item(s(i, 1)) = i
             Next
[/vba]
Словарь в итоге запоминает последнее i по каждому номеру. Переделывайте логику.

Автор - devilkurs
Дата добавления - 23.11.2016 в 14:38
ZamoK Дата: Среда, 23.11.2016, 14:59 | Сообщение № 5
Группа: Проверенные
Ранг: Обитатель
Сообщений: 268
Репутация: 4 ±
Замечаний: 0% ±

Excel 2003-2016
КАК?


Я не Гуру, но стремлюсь!
 
Ответить
СообщениеКАК?

Автор - ZamoK
Дата добавления - 23.11.2016 в 14:59
_Boroda_ Дата: Среда, 23.11.2016, 15:12 | Сообщение № 6
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16674
Репутация: 6479 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Так?

А первый мой пост - это я не проснулся еще
К сообщению приложен файл: 12_1.xls (70.0 Kb)


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеТак?

А первый мой пост - это я не проснулся еще

Автор - _Boroda_
Дата добавления - 23.11.2016 в 15:12
ZamoK Дата: Среда, 23.11.2016, 15:16 | Сообщение № 7
Группа: Проверенные
Ранг: Обитатель
Сообщений: 268
Репутация: 4 ±
Замечаний: 0% ±

Excel 2003-2016
Да именно так, спасибо _Boroda_,


Я не Гуру, но стремлюсь!
 
Ответить
СообщениеДа именно так, спасибо _Boroda_,

Автор - ZamoK
Дата добавления - 23.11.2016 в 15:16
ZamoK Дата: Понедельник, 28.11.2016, 15:35 | Сообщение № 8
Группа: Проверенные
Ранг: Обитатель
Сообщений: 268
Репутация: 4 ±
Замечаний: 0% ±

Excel 2003-2016
Прошу прощенья у меня в логике ошибка получилась, [vba]
Код
  c(p, 10) = s(i, 17)
[/vba] можно как нибудь умножить s(i, 17) на ( столбец I Лист2) не соображу как это сделать


Я не Гуру, но стремлюсь!

Сообщение отредактировал ZamoK - Вторник, 29.11.2016, 11:27
 
Ответить
СообщениеПрошу прощенья у меня в логике ошибка получилась, [vba]
Код
  c(p, 10) = s(i, 17)
[/vba] можно как нибудь умножить s(i, 17) на ( столбец I Лист2) не соображу как это сделать

Автор - ZamoK
Дата добавления - 28.11.2016 в 15:35
ZamoK Дата: Вторник, 29.11.2016, 09:11 | Сообщение № 9
Группа: Проверенные
Ранг: Обитатель
Сообщений: 268
Репутация: 4 ±
Замечаний: 0% ±

Excel 2003-2016
Я так понимаю что этот код уже нельзя исправить? Надо другой писать? Подскажите, кто нибудь?


Я не Гуру, но стремлюсь!
 
Ответить
СообщениеЯ так понимаю что этот код уже нельзя исправить? Надо другой писать? Подскажите, кто нибудь?

Автор - ZamoK
Дата добавления - 29.11.2016 в 09:11
ZamoK Дата: Вторник, 29.11.2016, 11:28 | Сообщение № 10
Группа: Проверенные
Ранг: Обитатель
Сообщений: 268
Репутация: 4 ±
Замечаний: 0% ±

Excel 2003-2016
АУ


Я не Гуру, но стремлюсь!
 
Ответить
СообщениеАУ

Автор - ZamoK
Дата добавления - 29.11.2016 в 11:28
SLAVICK Дата: Вторник, 29.11.2016, 11:50 | Сообщение № 11
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
можно как нибудь умножить s(i, 17) на ( столбец I Лист2) не соображу как это сделать

Я так понимаю что этот код уже нельзя исправить?

Добавил одну строку и поменял еще три - смотрите так?
[vba]
Код
Sub ИнстрРеж() ' не используется
    Dim a, c, s, p&, iLastrow As Long, i As Long, ii As Long, d As Object
    Set d = CreateObject("Scripting.Dictionary")
    '1. данные в два массива
    With Лист2    'используется кодовое имя
        iLastrow = .Cells(Rows.Count, 1).End(xlUp).Row
        a = Range(.[B3], .Range("i" & iLastrow)).Value
    End With

    With Лист3    ' остатки
        iLastrow = .Cells(Rows.Count, 1).End(xlUp).Row
        s = Range(.[B2], .Range("AH" & iLastrow)).Value
    End With
    
    '2.пустой массив для результата
    ReDim c(1 To UBound(s), 1 To 11)

    With d
        
        '3.в словарь уникальные и номер строки из массива
        For i = 1 To UBound(a)
            .Item(a(i, 1)) = i
        Next
        '4.по словарю из массива s в массив c
        For i = 1 To UBound(s)
            If .Exists(s(i, 1)) Then
                p = p + 1
                c(p, 1) = p
                c(p, 2) = s(i, 1)
                c(p, 3) = s(i, 3)
                c(p, 4) = s(i, 4)
                c(p, 5) = s(i, 8)
                c(p, 6) = s(i, 9)
                c(p, 7) = s(i, 12)
                c(p, 8) = s(i, 11)
                c(p, 9) = s(i, 15)
                c(p, 10) = s(i, 17) * a(d(s(i, 1)), 8)
            End If
        Next
    End With
    '5. выгрузка всего массива
    With Лист1.Range("A3:J3") 'используется кодовое имя
        .CurrentRegion.Offset(2).ClearContents
        .Resize(UBound(c), 11) = c
    End With
End Sub
[/vba]
К сообщению приложен файл: 1293082.xls (70.0 Kb)


Иногда все проще чем кажется с первого взгляда.
 
Ответить
Сообщение
можно как нибудь умножить s(i, 17) на ( столбец I Лист2) не соображу как это сделать

Я так понимаю что этот код уже нельзя исправить?

Добавил одну строку и поменял еще три - смотрите так?
[vba]
Код
Sub ИнстрРеж() ' не используется
    Dim a, c, s, p&, iLastrow As Long, i As Long, ii As Long, d As Object
    Set d = CreateObject("Scripting.Dictionary")
    '1. данные в два массива
    With Лист2    'используется кодовое имя
        iLastrow = .Cells(Rows.Count, 1).End(xlUp).Row
        a = Range(.[B3], .Range("i" & iLastrow)).Value
    End With

    With Лист3    ' остатки
        iLastrow = .Cells(Rows.Count, 1).End(xlUp).Row
        s = Range(.[B2], .Range("AH" & iLastrow)).Value
    End With
    
    '2.пустой массив для результата
    ReDim c(1 To UBound(s), 1 To 11)

    With d
        
        '3.в словарь уникальные и номер строки из массива
        For i = 1 To UBound(a)
            .Item(a(i, 1)) = i
        Next
        '4.по словарю из массива s в массив c
        For i = 1 To UBound(s)
            If .Exists(s(i, 1)) Then
                p = p + 1
                c(p, 1) = p
                c(p, 2) = s(i, 1)
                c(p, 3) = s(i, 3)
                c(p, 4) = s(i, 4)
                c(p, 5) = s(i, 8)
                c(p, 6) = s(i, 9)
                c(p, 7) = s(i, 12)
                c(p, 8) = s(i, 11)
                c(p, 9) = s(i, 15)
                c(p, 10) = s(i, 17) * a(d(s(i, 1)), 8)
            End If
        Next
    End With
    '5. выгрузка всего массива
    With Лист1.Range("A3:J3") 'используется кодовое имя
        .CurrentRegion.Offset(2).ClearContents
        .Resize(UBound(c), 11) = c
    End With
End Sub
[/vba]

Автор - SLAVICK
Дата добавления - 29.11.2016 в 11:50
ZamoK Дата: Вторник, 29.11.2016, 12:41 | Сообщение № 12
Группа: Проверенные
Ранг: Обитатель
Сообщений: 268
Репутация: 4 ±
Замечаний: 0% ±

Excel 2003-2016
SLAVICK, Да вроде все отлично спасибо, в очередной раз, а то у меня уже сутки танцы с бубном без результата.
Блин как же все просто когда знаешь, а я тут библиотеки прикручиваю.


Я не Гуру, но стремлюсь!

Сообщение отредактировал ZamoK - Вторник, 29.11.2016, 12:44
 
Ответить
СообщениеSLAVICK, Да вроде все отлично спасибо, в очередной раз, а то у меня уже сутки танцы с бубном без результата.
Блин как же все просто когда знаешь, а я тут библиотеки прикручиваю.

Автор - ZamoK
Дата добавления - 29.11.2016 в 12:41
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Выгрузка массива (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!