2016-07-08 5 views
-1

Я разрабатываю программу для анализа данных. Я очень новичок в Visual Basic и Macros. У меня есть 2 столбца A и B, которые имеют значения между .001 и 1. Мне нужна помощь в создании бункеров для хранения этих чисел. Я провел исследования и посмотрел на множество примеров программ, ничего отдаленно близко к тому, что мне нужно. Вот несколько важных деталей. Столбец A потребовал данных от A1 до A2625, а в столбце B - данные от B1 до B2700. Мне нужно поместить эти данные в 10 бункеров. Пример: бит 1 должен содержать значения от .001 до .11, бит 2- .12-.20 ..... до бункера 10. Любые предложения? Спасибо!Создание кода для anaylist

ответ

0

В VBA вы будете создать макрос, который что-то вдоль линий

Option Explicit 
Sub myMacro() 
    Dim nRow As Integer 
    Dim wSht As Worksheet 
    Dim endRowColumn1 As Integer 
    Dim endRowColumn2 As Integer 

    Set wSht = ActiveWorkbook.Sheets(1) 

    endRowColumn1 = wSht.Cells(Rows.Count, 1).End(xlUp).Row 
    endRowColumn2 = wSht.Cells(Rows.Count, 2).End(xlUp).Row 

    ' Clear results from last run 
    wSht.Range("C:E").Clear ' Clear rows 3,4,5 
    wSht.Cells(1, 3) = "Bin1" 
    wSht.Cells(1, 4) = "Bin2" 
    wSht.Cells(1, 5) = "No Criteria Met" 


    ' STARTING WITH SECOND ROW 
    For nRow = 2 To endRowColumn1 ' For each row... to the end of your rows.. 
     ' If the first bin criteria is met... 
     If (wSht.Cells(nRow, 1) >= 0.001) And _ 
     (wSht.Cells(nRow, 1) < 0.12) Then 
     ' Then put the value into the first bin. (column C) 
     wSht.Cells(Rows.Count, 3).End(xlUp).Offset(1, 0) = wSht.Cells(nRow, 1) 
     ElseIf (wSht.Cells(nRow, 1) >= 0.12) And _ 
     (wSht.Cells(nRow, 1) < 0.2) Then 
     ' Then put the value into the second bin. (column D) 
     wSht.Cells(Rows.Count, 4).End(xlUp).Offset(1, 0) = wSht.Cells(nRow, 1) 
     Else ' No Criteria Met 
     wSht.Cells(Rows.Count, 5).End(xlUp).Offset(1, 0) = wSht.Cells(nRow, 1) 
     End If 
    Next nRow 

    For nRow = 2 To endRowColumn2 ' For each row... to the end of your rows.. 
     ' If the first bin criteria is met... 
     If (wSht.Cells(nRow, 2) >= 0.001) And _ 
     (wSht.Cells(nRow, 2) < 0.12) Then 
     ' Then put the value into the bin. (column C) 
     wSht.Cells(Rows.Count, 3).End(xlUp).Offset(1, 0) = wSht.Cells(nRow, 2) 
     ElseIf (wSht.Cells(nRow, 2) >= 0.12) And _ 
     (wSht.Cells(nRow, 2) < 0.2) Then 
     ' Then put the value into the second bin. (column D) 
     wSht.Cells(Rows.Count, 4).End(xlUp).Offset(1, 0) = wSht.Cells(nRow, 2) 
     Else ' No Criteria Met 
     wSht.Cells(Rows.Count, 5).End(xlUp).Offset(1, 0) = wSht.Cells(nRow, 2) 
     End If 
    Next nRow 

End Sub 

Пожалуйста, дайте мне знать, если у вас есть вопросы о коде, и мы можем это обсудить.

+0

Помогите мне понять. Если бы я сделал аналогичную программу, это бы помещало оба столбца в бункеры, или мне пришлось бы делать это за столбец. И нужно ли мне указывать строку/столбец для хранения или создания этих ящиков? Я просто добрался до этой части и застрял. –

+0

В этой конкретной программе я написал только первый столбец. Таким образом, вам понадобится другой оператор IF для другого столбца и другой оператор IF для другого бина. Вам нужно будет указать столбец для хранения этих бункеров. Вы можете сделать код для столбца B, скопировав весь цикл «за» и заменив значение endRow, а также изменив nRow, 1 на nRow, 2 и затем nRow, 3 на nRow, 4. Кроме того, я не удаляю «пробелы» из столбца бункеров. Но вы всегда можете это сделать позже. –

+0

Кроме того, обратите внимание, что вы можете легко создать гистограмму с помощью AnalysisToolPak? https://support.office.com/en-us/article/Create-a-histogram-B6814E9E-5860-4113-BA51-E3A1B9EE1BBE --- Я не знаю вашей конечной цели этих бункеров. –

0

Вам не нужен VBA для этого. В Excel есть функция, называемая Frequency. Если у вас есть номера в одном колонке вы делаете ваши мусорные ведра в другой колонке, как этот

+--------+------+ 
| values | bins | 
+--------+------+ 
|  59 | 0 | 
|  16 | 10 | 
|  12 | 20 | 
|  5 | 30 | 
|  33 | 40 | 
|  90 | 50 | 
|  92 | 60 | 
|  74 | 70 | 
|  26 | 80 | 
|  63 | 90 | 
|  40 | 100 | 
|  etc|  | 
+--------+------+ 

, то вы можете использовать

FREQUENCY(values,bins) 

Я должен быть точно таким же, как это, хотя, потому что это формула массива:

enter image description here

Примечание у меня есть все клетки, прилегающих к закромам выбранных, и я нахожусь в режиме редактирования в верхней ячейке. Затем, как только формула будет записана, вы нажмете ctrl + alt + enter, и все выбранные вами ячейки заполнят количеством вхождений для этого бина.

Это будет работать с несколькими столбцами.

Сделать гистограммные графы с частотой v.

Что бы вы не сделали, это создать бункеры для вас.

+0

Я знаю, как добиться этого благодаря превосходству. Сложность в том, что мне нужно все запрограммированное, чтобы оно могло автоматически выполнять funtion –

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