вопросы чайника

Программирование на Visual Basic for Applications
Danilka
Новичок
Новичок
 
Сообщения: 47
Зарегистрирован: 12.08.2005 (Пт) 0:36
Откуда: Moscow, Kremlin, 2789 steps SSW

вопросы чайника

Сообщение Danilka » 07.09.2005 (Ср) 17:54

Доброго времени суток всем!
поскольку я VBA полный ноль, не постесняюсь спросить следующее:

1.необходимо в листе Excel найти ячейки по определенному признаку (это я сделал)
2. вычислить для каждого из этих значенийудельный вес от заданной переменной (это я тоже сделал)
3. надо записать значения в массив вида (name,share)
4 отсортировать по убыванию share
5 вывести в userform listbox (как я понял их можно делать 2х колоночными)

помогите, плз.
Заранее признателен,
Danilka

Danilka
Новичок
Новичок
 
Сообщения: 47
Зарегистрирован: 12.08.2005 (Пт) 0:36
Откуда: Moscow, Kremlin, 2789 steps SSW

Сообщение Danilka » 07.09.2005 (Ср) 21:58

уточняю
есть лист TMC содержащий список товаров вида

товар1,группаЗаказа1
товар2,группаЗаказа1
товар3,группаЗаказа1
товар1,группаЗаказа2
товар2,группаЗаказа2 ...

есть сумма продаж по сумме заказа
есть отчет с суммами продаж по КАЖДОМУ товару

но мне надо что бы при выборе пользователем группы заказа
в отдельном listbox'е отражались все товары, входящие в эту группу, и их удельные доли в объеме продаж группы (сам не понял, что написал ...)
кроме того я хотел бы, что бы в этом списке товары были отсортированы в порядке убывания доли (т.е. с большей долей- вверху списка)


вот отрывок - пока есть только listbox в одну колонку и не отсортированный


Код: Выделить всё


' tov - группа заказа
   ' считаем колво товаров вгруппе заказа
    Worksheets("TMC").Activate
    While tov <> Cells(Val(therow2), 1) And therow2 < 2000
    therow2 = therow2 + 1
    Wend
    inGroupTMC = Cells(therow2, 2)

    UserForm2.MultiPage1.Page2.Label3.Caption = "in " & inGroupTMC & " numbers "
    'making listbox with the names in tmc group
   
     Worksheets("TMClist").Activate
   therow3 = 1
   
 
          'поскольку окно перегружается несколько раз, очищаем Listbox
    While UserForm2.MultiPage1.Page2.ListBox1.ListCount >= 1
        'If no selection, choose last list item.
        If UserForm2.MultiPage1.Page2.ListBox1.ListIndex = -1 Then
           UserForm2.MultiPage1.Page2.ListBox1.ListIndex = _
                    UserForm2.MultiPage1.Page2.ListBox1.ListCount - 1
        End If
        UserForm2.MultiPage1.Page2.ListBox1.RemoveItem (UserForm2.MultiPage1.Page2.ListBox1.ListIndex)
   Wend

   
   
    'ищем по списку товары и добавляем в listbox если соседняя ячейка содержит группу заказа, как и tov 
   
    While therow3 < 8000
   While tov = Cells(Val(therow3), 2)
   
   
    Entry = Cells(Val(therow3), 1)
    UserForm2.MultiPage1.Page2.ListBox1.AddItem (Cells(therow3, 1))
     therow3 = therow3 + 1
    Wend
    therow3 = therow3 + 1
    Wend
   
   

lord0n
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 845
Зарегистрирован: 30.06.2005 (Чт) 9:55
Откуда: Moskow

Сообщение lord0n » 08.09.2005 (Чт) 7:22

не мучийся и воспользуйся автофильтром и итогами
Теория - это когда что-то не работает и известно почему.
Практика - это когда что-то работает, но неизвестно почему.
Нам удалось совместить теорию с практикой, теперь ничего не работает и неизвестно почему.

Danilka
Новичок
Новичок
 
Сообщения: 47
Зарегистрирован: 12.08.2005 (Пт) 0:36
Откуда: Moscow, Kremlin, 2789 steps SSW

Сообщение Danilka » 08.09.2005 (Чт) 20:07

эээ... не пойдет - у меня задача несколько шире - надо показать график, рассчитать заказ на неделю или несколько дней итд...
все это показывается в Userform2 на нескольких страницах...
проблема в том, что все данные берутся из отчетов складской программы - они могут быть сохранены только в Экселе ...
отчет по продажам по группам заказа
отчет по продажам по товарам
справочник, содержащий список товаров и групп заказа

вот так... :cry:
но почти все я сделал, я только никогда не работал с массивами и просто незнаю с которой стороны к ним подобраться ...

lord0n
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 845
Зарегистрирован: 30.06.2005 (Чт) 9:55
Откуда: Moskow

Сообщение lord0n » 09.09.2005 (Пт) 10:59

когда у меня возникла необходимость в отчетах из складской системы я написал прогу которая подрубалась к базе склада, брала данные от туда, обрабатывала и выводила в Excel

ИХМО так проще, чем мучится с vba
Теория - это когда что-то не работает и известно почему.
Практика - это когда что-то работает, но неизвестно почему.
Нам удалось совместить теорию с практикой, теперь ничего не работает и неизвестно почему.

Danilka
Новичок
Новичок
 
Сообщения: 47
Зарегистрирован: 12.08.2005 (Пт) 0:36
Откуда: Moscow, Kremlin, 2789 steps SSW

Сообщение Danilka » 09.09.2005 (Пт) 15:09

это все прекрасно, но я и VBA- то не знаю ... а мне надо конкретную задачу решить ...
весь вопро в том что я не знаю КАК :
записать определенные ячейки в 2хмерный массив
остсортировать массив поубыванию
вывести его целиком в listbox в виде двух колонок

НЕУЖЕЛИ ЭТОГО НЕЛЬЗЯ СДЕЛАТЬ В VBA ?!

lord0n
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 845
Зарегистрирован: 30.06.2005 (Чт) 9:55
Откуда: Moskow

Сообщение lord0n » 09.09.2005 (Пт) 15:31

Danilka писал(а):это все прекрасно, но я и VBA- то не знаю ... а мне надо конкретную задачу решить ...
весь вопро в том что я не знаю КАК :
записать определенные ячейки в 2хмерный массив
остсортировать массив поубыванию
вывести его целиком в listbox в виде двух колонок

НЕУЖЕЛИ ЭТОГО НЕЛЬЗЯ СДЕЛАТЬ В VBA ?!


Код: Выделить всё

Private Sub CommandButton1_Click()
d = Range("a1:b20").Cells

For x = 1 To UBound(d)
ListBox1.AddItem (d(x, 1) & " / " & d(x, 2))
Next x
End Sub


как отсортировать массив не знаю, сортируй ячейки
Теория - это когда что-то не работает и известно почему.
Практика - это когда что-то работает, но неизвестно почему.
Нам удалось совместить теорию с практикой, теперь ничего не работает и неизвестно почему.

Vitaly1
Брехман
Брехман
 
Сообщения: 1578
Зарегистрирован: 30.12.2002 (Пн) 16:35
Откуда: Russia, Mosсow

Сообщение Vitaly1 » 09.09.2005 (Пт) 15:34

Не лучшали отсортировать ячейки в VBA и задать диапазан для Listbox?..

lord0n
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 845
Зарегистрирован: 30.06.2005 (Чт) 9:55
Откуда: Moskow

Сообщение lord0n » 09.09.2005 (Пт) 16:21

Vitaly1 писал(а):... и задать диапазан для Listbox?..


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

Vitaly1
Брехман
Брехман
 
Сообщения: 1578
Зарегистрирован: 30.12.2002 (Пн) 16:35
Откуда: Russia, Mosсow

Сообщение Vitaly1 » 09.09.2005 (Пт) 17:57

А вот так:

Код: Выделить всё
‘установить четыре колонки вывода
ListBox1.ColumnCount = 4
‘Задать диапазон ячеек активного листа для копирования
ListBox1.RowSource = "A1: D10"
‘установить две колонки вывода
ComboBox1.ColumnCount = 2   
‘установить ширину колонок вывода
ComboBox1.ColumnWidths = "54;40"
‘Задать диапазон ячеек на листе Аудитория
ComboBox1.RowSource = "'Аудитория'!a1:b100"



А сортировать можно записав макрос, например:
Код: Выделить всё
'Выделить заголовок
Range("A2:B5").Select
'Сортировка по возрастанию первого столбца
    Selection.Sort Key1:=Range("A2"), Order1:=xlAscending, Header:=xlGuess, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom

Danilka
Новичок
Новичок
 
Сообщения: 47
Зарегистрирован: 12.08.2005 (Пт) 0:36
Откуда: Moscow, Kremlin, 2789 steps SSW

Сообщение Danilka » 14.09.2005 (Ср) 17:46

короче, пришлось сделать самому ...
надо было отсортировать два массива - первый содержал суммы продаж, второй содержал имена товаров

Код: Выделить всё
Dim ss As String
   
   '--------------------------------------------- sorting array
   For kk = 0 To Num_of_array_entries - 1
   For jj = 0 Num_of_array_entries  - 2

  If Array1(jj) < Array1(jj + 1)

   hh = Array1(jj): Array1(jj) = Array1(jj + 1): Array1(jj + 1) = hh
   ss = Array2(jj): Array2(jj) = Array2(jj + 1): Array2(jj + 1) = ss
 
   Next jj
   Next kk


в конце для вывода в двухколоночный listbox я объединил водин массив

Код: Выделить всё
ReDim fin(ingroup - 1, 1)

For bb = 0 To Num_of_array_entries- 1
fin(bb, 0) =Array1(bb)
fin(bb, 1) = Array2(bb)
Next bb
UserForm2.MultiPage1.Page2.ListBox3.ColumnCount = 2
UserForm2.MultiPage1.Page2.ListBox3.List() = fin()


вот так ...


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 80

    TopList