Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/26: Рейтинг темы: голосов - 26, средняя оценка - 4.77
0 / 0 / 0
Регистрация: 01.03.2013
Сообщений: 3
1

Сравнение 2 массивов, с последующим выделением в цвета ячеек

01.03.2013, 10:41. Показов 4817. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день.

Голову уже 3 день ломаю над одной задачкой, которая очень нужна.

Пожалуйста, посмотрите вложение.

Есть массив =F5:G35. Идет сравнение 2 колонок Oracle CT с Report 3rd party.
Если сравнить левую часть массива с правой и идет совпадение суммы на 99%, то окрасить эти 2 ячейки в рандомный цвет (ну или в какой либо цвет), главное чтобы визуально было видно разделение сумм по разным цветам. Как это показано в примере. Если левая часть суммы не совпадает с правой, то не выделять. Знаю, что алгоритм, прост, но так как я новичок в этом, мне тяжеловато самому придумать такой макрос с выделением в цвета.

Еще было бы хорошо, чтобы в листе была кнопка запуска этого скрипта, чтобы в нужный момент его можно было запустить.

Как думаете сложная ли задачка?
Вложения
Тип файла: xls Шаблон реконсиляции 2.xls (43.5 Кб, 42 просмотров)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.03.2013, 10:41
Ответы с готовыми решениями:

Поиск слова с последующим выделением символов
Форумчане, подскажите, как можно через bat найти слово в текстовом файле после чего выделить 8...

Наведение на элемент с его последующим выделением в рамку
Шалом! Ситуация: не могу оптимизировать работу :hover, при наведении на ячейку в таблице...

Отбор по критериям с последующим выделением строк (написать Макрос )
Требуется макрос/скрипт VBA для MSExel2003, с возможностью добавления кнопки в меню (через...

Сравнение двух строк с выделением динамической памяти - C++
Подскажите почему не работает код? Ввожу две разные строки и всегда выводит equal. Уже как только...

5
5472 / 1150 / 50
Регистрация: 15.09.2012
Сообщений: 3,518
01.03.2013, 12:35 2
iceeyes, такой алгоритм?
  1. Макрос двигается по столбцу "F" c 5 по 35 строку;
  2. берутся данные из каждой ячейки и ведётся поиск во всём диапазоне "G5:G35";
  3. если находится нужное (у вас написано в сообщении #1, что нужно искать), то две ячейки окрашиваются;
  4. макрос переходит к следующей ячейке в столбце "F";
  5. данные из текущей ячейки ищутся во всём диапазоне "G5:G35", но окрашенная ячейка уже не учитывается.
0
0 / 0 / 0
Регистрация: 01.03.2013
Сообщений: 3
01.03.2013, 12:39  [ТС] 3
Добрый день. Абсолютно верно!
0
5472 / 1150 / 50
Регистрация: 15.09.2012
Сообщений: 3,518
01.03.2013, 13:51 4
Код написан для задания и книги из сообщения #1.
Код работает только с десятью цветами. Если мало цветов, то измените строку кода "4" (после "To" укажите другое число) и допишите после строки "22" другие цвета (в комментариях написано, как посмотреть номера цветов).

Кликните здесь для просмотра всего текста
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
Sub Procedure_1()
 
    Dim myF() As Variant, myG() As Variant
    Dim myColors(1 To 10) As Long
    Dim i As Long, j As Long, k As Long
    
    'В массиве "myColors" будут номера цветов.
        'В программе "Excel" есть 56 цветов, которым даны порядковые
        'номера (в справке по запросу "colorindex" можно найти раздел
        '"ColorIndex Property", в которым есть перечень этих цветов).
    'Все подряд цвета не получится использовать, т.к. некоторые цвета
        'повторяются, а некоторые неудобные - чёрный, белый.
    myColors(1) = 3
    myColors(2) = 4
    myColors(3) = 5
    myColors(4) = 6
    myColors(5) = 7
    myColors(6) = 8
    myColors(7) = 9
    myColors(8) = 10
    myColors(9) = 11
    myColors(10) = 12
 
    '1. Быстрее работать с VBA-массивами, чем с ячейками Excel-листа.
    'Поэтому помещаем данные в VBA-массивы.
    'Берём все ячейки - и "F1" - чтобы массив точно соответствовал
        'ячейкам Excel-листа, т.к. нужно будет производить окрашивания ячеек.
    myF() = Range("F1:F35").Value
    myG() = Range("G1:G35").Value
    
    'В цикле с "i" двигаемся по массиву "myF".
    For i = 5 To 35 Step 1
    
        'Если в элементе массива "myF" пусто, то
            'переходим к следующему элементу.
        If myF(i, 1) = Empty Then
            GoTo metka_1
        End If
        
        'В цикле с "j" двигаемся по массиву "myG".
        For j = 5 To 35 Step 1
        
            'Если в элементе массива "myG" пусто, то
                'переходим к следующему элементу.
            If myG(j, 1) = Empty Then
                GoTo metka_2
            End If
            
            '3. Смотрим, на сколько число в массиве "myG"
                'отличается от числа в массиве "myF".
            'За 100% принимается число в массиве "myF".
            'myG(j) / myF(i) - находим, сколько процентов
                'составляет число из массива "myG" в массиве "myF"
                '(без умножения на 100).
            '-1 - находим разницу по процентам между двумя числами.
            'Abs - используется, т.к. число в массиве "myG"
                'может быть и меньше и больше числа в массиве "myF".
            If Abs(myG(j, 1) / myF(i, 1) - 1) <= 0.01 Then
            
                'Переменная "k" используется для выбора цвета.
                k = k + 1
                
                '4. Окрашиваем ячейки.
                'Позиции чисел в массивах "myF" и "myG" совпадают
                    'с позициями ячеек на Excel-листе.
                Cells(i, "F").Interior.ColorIndex = myColors(k)
                Cells(j, "G").Interior.ColorIndex = myColors(k)
                
                '5. Обнуляем значение в массиве "myG", чтобы
                    'это число больше не учитывалось.
                myG(j, 1) = Empty
                
                '6. Выходим из просмотра массива "myG",
                    'чтобы перейти к следующему элементу в массиве "myF".
                Exit For
                
            End If
        
metka_2:
        
        Next j
        
metka_1:
 
    Next i
 
End Sub
1
0 / 0 / 0
Регистрация: 01.03.2013
Сообщений: 3
01.03.2013, 14:44  [ТС] 5
Ого, большое спасибо за скорый ответ. По-моему все отлично. Даже с пояснениями. Признаюсь, я Вам завидую, как хочется знать VBA , как Вы. :-)

Добавлено через 21 минуту
Уважаемый Скрипт,

У можно ли добавить в MS Excel 2010, чтоб запускать программу не вызывая VB ALT+F11, а с помощью кнопки и вывести ее на панель листа?

Добавлено через 27 минут
Большое спасибо. Просто вывел на панель макросы и запуск. Так тоже быстро =)
0
5472 / 1150 / 50
Регистрация: 15.09.2012
Сообщений: 3,518
01.03.2013, 14:46 6
iceeyes, да, в "Excel 2010" можно сделать кнопку для вызова макроса в следующих местах:
  1. на Панели инструментов (по-научному она называется "Панель быстрого доступа");
  2. на ленту;
  3. на Excel-лист.
1
01.03.2013, 14:46
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.03.2013, 14:46
Помогаю со студенческими работами здесь

Сравнение двух столбцов на совпадения ячеек с сортировкой и заменой ячеек
В общем задача. Представьте, есть четыре столбца - два с ценами, два с артикулами. Соответственно,...

Динамическое выделением памяти для массивов
Даны три массива вещественных чисел X(25), B(30), Y(25). Из исходных массивов сформировать массив...

Сравнение с последующим объединением книг
Доброго времени суток! Понадобилось сделать следующее: Имеем: книга1 (с данными по...

Непростой поиск пустых ячеек excel с последующим заполнением
Здравствуйте! Прошу помочь со следующей проблемкой: Есть форма (vb.net, 2010 студия) с кнопкой....

Поиск и выделение найденых ячеек с последующим выполнением программы
Всем доброго времени суток. Суть проблемы такова: надо данные со столбца V и W вставить в столбцы...

Сравнение записей из разных строк с последующим Update
Доброго времени суток! Вопрос заключается в следующем... Есть таблица с набором данных о...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru