Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - VBA

Страница: 1 | 2 |

 

  Вопрос: работа в екселе с ячейками Добавлено: 13.05.08 16:22  

Автор вопроса:  noob
пожалуйста помогите с решением задачи
имеется столбец с ячейками разного цвета допустим всего 3 цвета
необходимо посчитать количество ячеек каждого цвета
можно ли посчитать только с помощью формулы или как написать код на VB?

Ответить

  Ответы Всего ответов: 18  

Номер ответа: 1
Автор ответа:
 J. Smith



ICQ: ненавижу 

Вопросов: 40
Ответов: 477
 Web-сайт: Не хочу ломать голову, если её уже сломал кто-то другой.
 Профиль | | #1
Добавлено: 13.05.08 16:59
http://vbnet.ru/forum/show.aspx?id=165675

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

Незнаю чем поможет формула, а на ВБА у тебя уже есть пример для осмысления.

Ответить

Номер ответа: 2
Автор ответа:
 J. Smith



ICQ: ненавижу 

Вопросов: 40
Ответов: 477
 Web-сайт: Не хочу ломать голову, если её уже сломал кто-то другой.
 Профиль | | #2
Добавлено: 14.05.08 08:54
Разобрался?

Ответить

Номер ответа: 3
Автор ответа:
 noob



Вопросов: 5
Ответов: 25
 Профиль | | #3 Добавлено: 14.05.08 22:06
я пока чайник только начинаю разбираться
как подсчитать эти ячейки
Dim Ñòîëáåö As Integer, Íîìåð_ïðîâåðÿåìîé_ñòðîêè As Integer, Íîìåð_Ëèñòà As Integer
For a = 1 To 100
    Íîìåð_Ëèñòà = 1
    Íîìåð_ïðîâåðÿåìîé_ñòðîêè = a
    With Sheets(Íîìåð_Ëèñòà).UsedRange
        For Ñòîëáåö = .Column To .Columns.Count
            If Cells(Íîìåð_ïðîâåðÿåìîé_ñòðîêè, Ñòîëáåö).Font.ColorIndex = 5 Then

            'Else: Cells(Íîìåð_ïðîâåðÿåìîé_ñòðîêè, Ñòîëáåö).Font.ColorIndex = 3
            End If
        Next
    End With
    Next
End Sub

Ответить

Номер ответа: 4
Автор ответа:
 noob



Вопросов: 5
Ответов: 25
 Профиль | | #4 Добавлено: 14.05.08 22:09

sorry


Sub Macro1()
    ;Dim Столбец As Integer,
Номер_проверяемой_строки 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
Автор ответа:
 noob



Вопросов: 5
Ответов: 25
 Профиль | | #5 Добавлено: 14.05.08 22:11
даже код не получается скопировать и вставить

Ответить

Номер ответа: 6
Автор ответа:
 J. Smith



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
Автор ответа:
 J. Smith



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
Автор ответа:
 J. Smith



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
Автор ответа:
 noob



Вопросов: 5
Ответов: 25
 Профиль | | #9 Добавлено: 15.05.08 13:24
Добрый день что тут не так
сразу же спотыкается на
ElseIf .Cells(Строка, Столбец).Font.ColorIndex = 3 Then Красных = Красных +vbNull

и второе : считает только первый раз а повторно выдает тоже значение и висит

Ответить

Номер ответа: 10
Автор ответа:
 J. Smith



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
Автор ответа:
 noob



Вопросов: 5
Ответов: 25
 Профиль | | #11 Добавлено: 16.05.08 14:41
спс , разобрался
просто перепутал
.Font.ColorIndex
и Interior.Font.ColorIndex

Ответить

Номер ответа: 12
Автор ответа:
 noob



Вопросов: 5
Ответов: 25
 Профиль | | #12 Добавлено: 16.05.08 14:42
спс , разобрался
просто перепутал
.Font.ColorIndex
и Interior.ColorIndex

Ответить

Номер ответа: 13
Автор ответа:
 noob



Вопросов: 5
Ответов: 25
 Профиль | | #13 Добавлено: 16.05.08 15:58
у меня никак не получается написать условие чтобы эта процедура выпонялась для нескольких листов (названия листов не по умолчанию sheet1, sheet2 а другие) считает и значения неправильные получаются

Ответить

Номер ответа: 14
Автор ответа:
 J. Smith



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
Автор ответа:
 noob



Вопросов: 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";) = "cert" & ", " & yelow
  Range("c3";) = "crtr" & ", " & broun
  Range("d1";) = "crrc" & ", " & green
  Range("d3";) = "xrgfre" & ", " & blue
  
 End Sub

Ответить

Страница: 1 | 2 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам