2013-08-22 3 views
1

У меня есть этот класс с рядом коллекцийНайти проценты/количество значений в классе VBA

'class properties 
    public a as collection 
    public b as collection 
    public c as collection 

а, б, содержат значения, например, «а, а, а, а, б, b, b, b, c, c, c, c, c, c, c ", а также b
и c и, более вероятно,. Этими значениями может быть любой алфавит, который мы можем принять. чтобы получить проценты для каждого свойства для каждого класса, я думал, что сделать это как этот
(скелет, сог я не знаю, как именно это сделать)

 for each class in collectionOfclassobjects 
     for each ca in class.a 
     'here am supposed to count all a's and b's divide by class.a.count but am not sure how to do this, I have an idea of adding the first item, and everytime it occurs i add it or add a count, when it's a create collection when its a, add it, when its b create new collection, and so on i have a collection of each value and i can easily print the count/total count and the name 
     next ca 
     for each cb in class.b 

     next cb 
     for each cc in class.c 

     next cc 
    next class 

любые предложения приветствуются, я новый и до сих пор у меня есть два вопроса noobie :), ни один из них не был решен, не знаю почему: P

+0

Вы можете использовать 'объекта Scripting.Dictionary' для данного типа задач: если«ключ»(а, б, в и т.д.) нет затем добавьте его и установите соответствующее значение «1.». Если ключ уже добавлен, добавьте «значение» на 1. Например: первый ответ здесь - http://stackoverflow.com/questions/9663200/excel-vba -to-count-and-print-distinct-values ​​ –

+0

Я попробую это, спасибо! – trackmeifUcan

+0

@TimWilliams Я не уверен, что он хочет удалить дубликаты. Я думаю, он хочет, чтобы процент присутствия персонажа в каждой коллекции. –

ответ

0

Запустите процедуру ниже и дождитесь появления окна сообщения в конце. Он покажет вам деталь

result

Sub Percentage() 

    Dim a As Collection 
    Set a = New Collection 

    a.Add "a" 
    a.Add "a" 
    a.Add "a" 
    a.Add "a" 
    a.Add "b" 
    a.Add "b" 
    a.Add "b" 
    a.Add "b" 
    a.Add "c" 
    a.Add "c" 
    a.Add "c" 
    a.Add "c" 
    a.Add "c" 
    a.Add "c" 
    a.Add "c" 

    Dim i As Long, cnt As Long 
    cnt = 0 
    ' checking the percentage of occurance of letter 'a' 
    For i = 1 To a.Count 
     If a.Item(i) = "a" Then cnt = cnt + 1 
    Next i 

    MsgBox "'a' occurs " & cnt & " times in collection A" & _ 
    vbCrLf & vbCrLf & " which is " & Format((cnt/a.Count), "0.0%") & " of the entire collection" 

End Sub 
+0

Я все время смущаюсь с vba в excel, не уверен, что лучше или проще обрабатывать данные из коллекций после извлечения из набора записей или просто непосредственно записывать на рабочий лист и работать с данными с рабочего листа, я начинаю чувствовать себя легче с помощью работая на рабочем листе и скорость мудрый разницы, я прав? – trackmeifUcan

+0

Я думаю, это зависит от того, насколько вам комфортно с VBA. Я предпочитаю VBA над инструментами Spreadsheeet для любой автоматизации. Мне нужно меньше времени и сил, чтобы решить проблему с помощью VBA. Как правило, быстрее и эффективнее использовать объекты (массивы, словари, коллекции) для любых вычислений, а затем вручную работать с электронной таблицей. Я не знаком с вашим делом. Есть несколько основных вопросов, которые вам необходимо собрать для того, чтобы я мог дать хороший ответ. Подумайте о том, чтобы начать новый вопрос, объяснить, как вы получаете данные и что вы хотите с ним делать, и попросите подход –

Смежные вопросы