Вопрос: работа в екселе с ячейками | Добавлено: 13.05.08 16:22 |
Автор вопроса: ![]() |
пожалуйста помогите с решением задачи
имеется столбец с ячейками разного цвета допустим всего 3 цвета необходимо посчитать количество ячеек каждого цвета можно ли посчитать только с помощью формулы или как написать код на VB? |
Ответы | Всего ответов: 18 |
Номер ответа: 1 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ICQ: ненавижу Вопросов: 40 Ответов: 477 |
Web-сайт: Профиль | Цитата | #1 | Добавлено: 13.05.08 16:59 |
http://vbnet.ru/forum/show.aspx?id=165675
в ответ на твой вопрос я написал макрос, его можно скопировать и изменить под новую задачу. Ленивый ты человек ![]() Незнаю чем поможет формула, а на ВБА у тебя уже есть пример для осмысления. |
Номер ответа: 2 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ICQ: ненавижу Вопросов: 40 Ответов: 477 |
Web-сайт: Профиль | Цитата | #2 | Добавлено: 14.05.08 08:54 |
Разобрался? |
Номер ответа: 3 Автор ответа: ![]() ![]() ![]() ![]() Вопросов: 5 Ответов: 25 |
Профиль | Цитата | #3 | Добавлено: 14.05.08 22:06 |
я пока чайник только начинаю разбираться
как подсчитать эти ячейки Dim Ñòîëáåö As Integer, Íîìåð_ïðîâåðÿåìîé_ñòðîêè As Integer, Íîìåð_Ëèñòà As Integer
For a = 1 To 100 Íîìåð_Ëèñòà = 1 Íîìåð_ïðîâåðÿåìîé_ñòðîêè = a With Sheets(Íîìåð_Ëèñòà ![]() For Ñòîëáåö = .Column To .Columns.Count If Cells(Íîìåð_ïðîâåðÿåìîé_ñòðîêè, Ñòîëáåö ![]() 'Else: Cells(Íîìåð_ïðîâåðÿåìîé_ñòðîêè, Ñòîëáåö ![]() End If Next End With Next End Sub |
Номер ответа: 4 Автор ответа: ![]() ![]() ![]() ![]() Вопросов: 5 Ответов: 25 |
Профиль | Цитата | #4 | Добавлено: 14.05.08 22:09 |
sorry Sub Macro1() ![]() Номер_проверяемой_строки As Integer, Номер_Листа As Integer Номер_Листа = 1 Номер_проверяемой_строки = 1 With Sheets(Номер_Листа).UsedRange For Столбец = .Column To .Columns.Count if Cells(Номер_проверяемой_строки, Столбец).Font.ColorIndex = 5 then ??????????????? 'Else: Cells(Номер_проверяемой_строки, Столбец).Font.ColorIndex = 3 End If Next End With End Sub |
Номер ответа: 5 Автор ответа: ![]() ![]() ![]() ![]() Вопросов: 5 Ответов: 25 |
Профиль | Цитата | #5 | Добавлено: 14.05.08 22:11 |
даже код не получается скопировать и вставить |
Номер ответа: 6 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ICQ: ненавижу Вопросов: 40 Ответов: 477 |
Web-сайт: Профиль | Цитата | #6 | Добавлено: 15.05.08 12:08 |
Я тоже не сразу въехал, тут есть красивая кнопочка "Код", получается так:
Sub Macro1() Dim Лист As Integer, Cтрока As Integer, Столбец As Integer, Красных As Integer, Синих As Integer Лист = 1 Столбец = 1 With Sheets(Лист).UsedRange For Cтрока = .Row To .Rows.Count If .Cells(Cтрока, Столбец).Font.ColorIndex = 5 Then Синих = Синих + vbNull ElseIf .Cells(Строка, Столбец).Font.ColorIndex = 3 Then Красных = Красных +vbNull End If Next End With MsgBox "Синих " & Синих & vbCrLf & "Красных " & Красных End Sub Кстати если строк или столбцов ОЧЕНЬ много то Dim Лист As Long, Cтрока As Long, Столбец As Long, Красных As Long, Синих As Long |
Номер ответа: 7 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ICQ: ненавижу Вопросов: 40 Ответов: 477 |
Web-сайт: Профиль | Цитата | #7 | Добавлено: 15.05.08 12:14 |
Закосячил
With Sheets(Лист) For Cтрока = .UsedRange.Row To .UsedRange.Rows.Count If .Cells(Cтрока, Столбец).Font.ColorIndex = 5 Then Синих = Синих + vbNull ElseIf .Cells(Строка, Столбец).Font.ColorIndex = 3 Then Красных = Красных +vbNull End If |
Номер ответа: 8 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ICQ: ненавижу Вопросов: 40 Ответов: 477 |
Web-сайт: Профиль | Цитата | #8 | Добавлено: 15.05.08 12:49 |
А так красивеe
Sub Macro1() Dim Лист As Integer, Cтрока As Integer, Столбец As Integer Dim Цвет As Integer,Красных As Integer, Синих As Integer Лист = 1 Столбец = 1 With Sheets(Лист) For Cтрока = .UsedRange.Row To .UsedRange.Rows.Count Цвет = .Cells(Cтрока, Столбец).Font.ColorIndex If Цвет = 5 Then Синих = Синих + vbNull ElseIf Цвет = 3 Then Красных = Красных +vbNull End If Next End With MsgBox "Синих " & Синих & vbCrLf & "Красных " & Красных End Sub |
Номер ответа: 9 Автор ответа: ![]() ![]() ![]() ![]() Вопросов: 5 Ответов: 25 |
Профиль | Цитата | #9 | Добавлено: 15.05.08 13:24 |
Добрый день что тут не так
сразу же спотыкается на ElseIf .Cells(Строка, Столбец).Font.ColorIndex = 3 Then Красных = Красных +vbNull
и второе : считает только первый раз а повторно выдает тоже значение и висит |
Номер ответа: 10 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ICQ: ненавижу Вопросов: 40 Ответов: 477 |
Web-сайт: Профиль | Цитата | #10 | Добавлено: 15.05.08 13:40 |
1. Скопируй из моего 8-го ответа.
2. Внимательно прочитай всю 2-ю страницу. 3. Начал учить VBA качай http://rapidshare.de/files/11204069/VBA_for_dummers.rar.html |
Номер ответа: 11 Автор ответа: ![]() ![]() ![]() ![]() Вопросов: 5 Ответов: 25 |
Профиль | Цитата | #11 | Добавлено: 16.05.08 14:41 |
спс , разобрался
просто перепутал .Font.ColorIndex и Interior.Font.ColorIndex |
Номер ответа: 12 Автор ответа: ![]() ![]() ![]() ![]() Вопросов: 5 Ответов: 25 |
Профиль | Цитата | #12 | Добавлено: 16.05.08 14:42 |
спс , разобрался
просто перепутал .Font.ColorIndex и Interior.ColorIndex |
Номер ответа: 13 Автор ответа: ![]() ![]() ![]() ![]() Вопросов: 5 Ответов: 25 |
Профиль | Цитата | #13 | Добавлено: 16.05.08 15:58 |
у меня никак не получается написать условие чтобы эта процедура выпонялась для нескольких листов (названия листов не по умолчанию sheet1, sheet2 а другие) считает и значения неправильные получаются |
Номер ответа: 14 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ICQ: ненавижу Вопросов: 40 Ответов: 477 |
Web-сайт: Профиль | Цитата | #14 | Добавлено: 16.05.08 16:25 |
Приведи код всей "этой процедуры", тогда и ответ будет конкретно по существу.
Перечисляя листы удобно указывать не название а порядковый номер листа, но тогда листы нельзя менять местами. Sheets(1).Cells(y,x) Sheets(2).Cells(y,x) Чтобы в цикле перечислять листы не по порядковому номеру а по названию можно создать массив названий Dim Лист(3) As String Лист(0)="Свод" Лист(1)="Исходные данные" Лист(2)="Справочник1" Лист(3)="Справочник2" теперь листы в книге можно поменять местами сколько угодно, перечисление пойдет в заданной выше поочередности Sheets(Лист(0)).Cells(y,x) Sheets(Лист(1)).Cells(y,x) Sheets(Лист(2)).Cells(y,x) Sheets(Лист(3)).Cells(y,x) |
Номер ответа: 15 Автор ответа: ![]() ![]() ![]() ![]() Вопросов: 5 Ответов: 25 |
Профиль | Цитата | #15 | Добавлено: 16.05.08 17:03 |
посчтитать для каждого листа
цифры у меня большие получаються Sub ïîñ÷òèòàòü_êàáèíåòû
![]() Dim yelow, broun, green, blue As Integer With Sheets("vrtgt" ![]() For a = 7 To 150 If .Cells(a, 1).Interior.ColorIndex = 6 Then yelow = yelow + vbNull ElseIf .Cells(a, 1).Interior.ColorIndex = 40 Then broun = broun + vbNull ElseIf .Cells(a, 1).Interior.ColorIndex = 43 Then green = green + vbNull ElseIf .Cells(a, 1).Interior.ColorIndex = 42 Then blue = blue + vbNull End If Next End With Range("c2" ![]() Range("c3" ![]() Range("d1" ![]() Range("d3" ![]() End Sub |
|