Для тех кто знает VBA
#1
Отправлено 26 октября 2009 - 23:04
Вообщем задача следующая дан массив 5 х 6 полей в каждом поле разные цыфры Нужно чтоб процедура выполнила поиск самых часто встречающихся цыфр и выписала все цыфры в отдельные ячейки в столбец...
Затем.. сначало это потом может разбирусь
www.farusco.eu
#2
Отправлено 26 октября 2009 - 23:48
При чем здесь ВБА? Ждешь, что кто-то код напишет? Зря.
Если ждешь некоей помощи именно по ВБА, то задавай более конкретные вопросы, касающиеся непосредсвенно языка, а не по алгоритмам.
#3
Отправлено 26 октября 2009 - 23:59
тогда где можно хороший справочник в нете посмотреть ?
во идея.. алгоритм я сам придумаю. напишите плиз подходящие функции...
www.farusco.eu
#5
Отправлено 27 октября 2009 - 00:10
for, if
Считать/изменить значение конкретной ячейки (например А2) на активном листе можно обратившись к
Activesheet.Range("A2").Value или
Activesheet.Cell(2,1)
Как осуществляеть сортировка средствами VBA, можно начав запись нового макроса, совершив сортировку вручную, остановив запись и наконец изучив, что же ексель записал в макрос.
Соответсвенно, данный ход можно применять и к другим манипуляциям.
#7
Отправлено 27 октября 2009 - 23:15
В чем загвоздка?сюда надо поставить функцию которая справшивает область значений... тобишь она спрашивает какой массив выбрать..
О чем речь? О функции, запрашивающей область массива? Inputbox() в помощь.А если не знаешь название этой функции то искать её бесполезно.. правильно ведь...
#8
Отправлено 28 октября 2009 - 15:55
www.farusco.eu
#10
Отправлено 29 октября 2009 - 03:05
Вот что получилось...
Sub putDates()
Dim rRange As Range, startcell, allnumbers
On Error Resume Next
Application.DisplayAlerts = False
Set rRange = Application.InputBox(Prompt:="Please select a range.", Title:="SPECIFY RANGE", Type:=8)
On Error GoTo 0
Application.DisplayAlerts = True
If rRange Is Nothing Then
Exit Sub
Else
Set startcell = Application.InputBox(Prompt:="Cell for input", Title:="SPECIFY RANGE", Type:=8)
End If
End Sub
Но теперь мне надо чтоб из тои области которую я положил в инпут бокс вытащить значения ячеек и посчитать количество одного типа значении, другого и так далее... . А затем он будет спрашивать целл инпут для того чтоб вывести показаные значения в ячеку друг за другом после той которую я ввёл...
хмм а могу я просто из этого кфтпу приделать к нему Countif(rRange,5)
Я так думаю мне там понадобится оператор FOR ... ещё бы узнать по человечески как она работает
Range("startcell").CountIf(rRange, 5).Paste почему такая штука не прокатывает?
Сообщение изменено: foreverman (29 октября 2009 - 03:44 )
www.farusco.eu
#11
Отправлено 29 октября 2009 - 09:26
Dim rRange As Range, startcell, allnumbersNotes: В VBA при декларировании переменных конкретного типа, тип необходимо указывать для каждой переменной.
В данном случае имеем
rRange As Range
startcel As Variant
allnumbers As Variant
ибо, для них тип не указан
Range.ValueНо теперь мне надо чтоб из тои области которую я положил в инпут бокс вытащить значения ячеек и посчитать количество одного типа значении, другого и так далее
F1Я так думаю мне там понадобится оператор FOR ... ещё бы узнать по человечески как она работает
For I = 1 To 10 For J = 1 To 10 For K = 1 To 10 ... Next K Next J Next Iили
For Each MyObject In MyCollection ' Iterate through each element. If MyObject.Text = "Hello" Then ' If Text equals "Hello". Found = True ' Set Found to True. Exit For ' Exit loop. End If NextВ твоем случае
Dim r as Range for each r in rRange do 'r.Value - значение текущей ячейки Next
Можешь, обращение к формулам Excel из VBA ведеться посредствомхмм а могу я просто из этого кфтпу приделать к нему Countif(rRange,5)
Application.WorksheetFunctionУчти, что на данном этапе неизвестен список уникальных значений
А почему он должен прокатывать? "startcell" - строковое значение, а не переменная startcell. У тебя на листе определена область с таким именем? Сильно сомневаюсь. К тому же Range не обладает функцией CountIf. Итого, 2 ошибки в одной строке.Range("startcell").CountIf(rRange, 5).Paste почему такая штука не прокатывает?
Какого назначение области, хранящейся в startcell? Подозреваю, что в ней нет никакой необходимости
#12
Отправлено 29 октября 2009 - 09:49
Debug.PrintМожет значительно упростить отладку, результат можно увидеть открыв окно Immediate. View -> Immediate Window, или Ctrl + G
Совет 2
Старайся не использовать GoTo, усложняет чтение кода
Notes: код поставленной задачи с объявлением процедуры, всеми переменными и форматированием с лихвой укладываеться в 30 строк.