Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.68/37: Рейтинг темы: голосов - 37, средняя оценка - 4.68
259 / 7 / 1
Регистрация: 22.01.2013
Сообщений: 47

Изменения цветом на карте Украины в зависимости от значения таблицы Excel

18.03.2013, 18:38. Показов 7079. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите автоматизировать процесс:
Есть админ. карта Украины с выделенными областями.
Есть файл эксель в котором есть данные вида:
XML
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
Вся Украина   45 617 542
Вінницька обл.  1 633 526
Волинська обл.  1 038 660
Дніпропетровська обл.    3 318 861
Донецька обл.    4 400 122
Житомирська обл.  1 272 618
Закарпатська обл.    1 251 016
Запорізька обл.    1 790 717
Івано-Франківська обл.   1 380 033
Кіровоградська обл.    1 001 608
Луганська обл.  2 271 026
Львівська обл.  2 540 557
Миколаївська обл.    1 177 779
Одеська обл.  2 388 007
Полтавська обл.    1 476 240
Рівненська обл.    1 154 405
Сумська обл.  1 151 555
Тернопільська обл.  1 080 008
Харківська обл.    2 740 626
Херсонська обл.    1 082 832
Хмельницька обл.  1319691
Черкаська обл.  1 276 652
Чернівецька обл.  905 071
Чернігівська обл.    1 087 603
м. Київ    2 814 577
м. Севастополь  381 301
Київська обл.    4 534 218
АР Крим   2 344 111
Как автоматически сделать заливку областей, выбрав при этом 2 цвета для минимального и максимального значения.
Пробовал в экселе применить рисунок как фон, но при выводе на печать - не выводиться фон.
Миниатюры
Изменения цветом на карте Украины в зависимости от значения таблицы Excel   Изменения цветом на карте Украины в зависимости от значения таблицы Excel  
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.03.2013, 18:38
Ответы с готовыми решениями:

Выделение цветом строки в Excel в зависимости от значения в ячейке
Задача такая: На листе Ексель есть несколько строк со значениями. Если в 13 столбце какой-нибудь строки присутствует '++', то всю...

Изменения формата ячейки Excel средствами VBA в зависимости от значения другой ячейки
Здравствуйте. Столкнулся с проблемой. Необходимо на листе Excel Залить, предположим, ячейку "C4" Зелёным цветом, при условии,...

Закрасить цветом в зависимости от значения переменной
есть массив значений концентраций. по этому массиву строится поверхность. нужно залить каждую вершину в зависимости от концентрации,...

14
4377 / 661 / 36
Регистрация: 17.01.2010
Сообщений: 2,134
18.03.2013, 22:09
Здравствуйте. Попоробую дать совет, но не уверен, насколько он будет эфективный.
Я бы делал так.
1. Переношу на лист как рисунок *.jpeg. Выделяю, коректирую размеры, потом правая кнопка - перенести на задний план.
2. Панель рисования. Инструмент кривая (сплайн). Обвожу все области, что б по каждой области получилась замкнутая крива. Чем больше промежуточных точек - тем лучьше.
3. Пишу макрос. Что-то типа
Dim mShp As Shape
Sub asdf()
For Each mShp In ActiveSheet.Shapes
mShp.Select
Next
4. При выделении обьектов, назначаю имя. Макросом.
Это самое трудоемкое. Ну а дальше уже игрушки. Есть обьект, есть имя. Вытягиваем по имени когда и где нужно, и делаем что в голову придет. И все. Но работа нудная. Может кто-то знает легче.
1
4377 / 661 / 36
Регистрация: 17.01.2010
Сообщений: 2,134
19.03.2013, 22:45
Если еще актуально.
Заинтриговали Вы меня. И не хотел стажера под дождь гнать - дал задание карту нарисовать. Говорят, часа четыри страдал (меня небыло - сам под дождь полез). Я только теперь вечером листинги приклеил.
Для начала просто просмотрите листы. А запускайте нажав START на листе "RegionsName". Не хотелось рисковать творчеством старательных, поэтому процедура создает копию карты (если есть старая - удаляет), и работает сней. Запустите пару раз подряд - увидите сами. Удачи.
Вложения
Тип файла: rar v1_МАПА_UA.rar (43.4 Кб, 227 просмотров)
1
259 / 7 / 1
Регистрация: 22.01.2013
Сообщений: 47
30.03.2013, 14:31  [ТС]
выскакивает ошибка, загрузил файл.
Миниатюры
Изменения цветом на карте Украины в зависимости от значения таблицы Excel  
0
4377 / 661 / 36
Регистрация: 17.01.2010
Сообщений: 2,134
30.03.2013, 15:04
Странно. Загрузил себе обратно отсюда, запустил - работает. ???
Кстати, занялся этим заданием, потому-что идея хорошая. Только хочу использовать наоборот. Клик по области - получение информации из базы по этому региону. Мучился, не получается вытянуть обратно название группы, нет времени - пока отложил. И еще. Если будете тоже что-то экпериментировать, при разгруппировании/группировании номер группы меняется. Нежные какие-то эти Shapes.
1
259 / 7 / 1
Регистрация: 22.01.2013
Сообщений: 47
30.03.2013, 15:09  [ТС]
у меня офис 2010, можете сохранить его в формате *.xlsm и закинуть его ещё раз?
идея была такая, есть множество показателей, ваш код меняет на разные цвета области, а меня интересовало чуток по-другому: минимальное значение цвет - светло-зелёный, максимальное значение - тёмно-зелёный. т.е. градация чтобы была.
Миниатюры
Изменения цветом на карте Украины в зависимости от значения таблицы Excel  
0
4377 / 661 / 36
Регистрация: 17.01.2010
Сообщений: 2,134
30.03.2013, 15:15
Вот скины. До запуска и после. Киевская обл.
Миниатюры
Изменения цветом на карте Украины в зависимости от значения таблицы Excel   Изменения цветом на карте Украины в зависимости от значения таблицы Excel  
1
4377 / 661 / 36
Регистрация: 17.01.2010
Сообщений: 2,134
30.03.2013, 15:26
Смогу только в понедельник на работе.

Добавлено через 6 минут
В этой части (Sub WorkOnMap()) нужно изменить на то, что Вам нужно.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
ActiveSheet.Shapes(mstr).Select
        With Selection
            .ShapeRange.Fill.Transparency = 0.2
            .ShapeRange.Line.Weight = 0.75
            .ShapeRange.Line.DashStyle = msoLineSolid
            .ShapeRange.Line.Style = msoLineSingle
            .ShapeRange.Line.Transparency = 0#
            .ShapeRange.Line.BackColor.RGB = RGB(255, 255, 255)
            .ShapeRange.Fill.Visible = msoTrue
            .ShapeRange.Fill.ForeColor.RGB = RGB(0, 0, 0)
            .ShapeRange.Fill.BackColor.RGB = RGB(255, 191, 0)
            .ShapeRange.Fill.PresetGradient msoGradientDiagonalUp, 3, _
                                                        msoGradientLateSunset
    End With
Создайте рекордером любую фигуру и залейте как Вам подходит. Потом измените указанный фрагмент.
А min не отображал - слишком маленькая область для выделения.
1
4377 / 661 / 36
Регистрация: 17.01.2010
Сообщений: 2,134
30.03.2013, 16:43
Раз уже сказал А...
Перекинул другу. У него в 2010 тоже не пошло. Что мы сделали. Выделили область. В поле имен прочитали имя (Group N). Переписали на лист (есть в книге на основном листе), потом выполнили замены в процедуре "Sub NameSHP()". И у него сразу пошло. Кидаю, пробуйте. Но считаю, что это просто временный подход. Может, нужно сделать привязку каждой области к ячейке (типа TopLeft...) и работать так?
И мне интересно, или пойдет у Вас теперь?
Вложения
Тип файла: rar v2010_МАПА_UA.rar (111.2 Кб, 201 просмотров)
1
259 / 7 / 1
Регистрация: 22.01.2013
Сообщений: 47
30.03.2013, 22:22  [ТС]
Цитата Сообщение от Igor_Tr Посмотреть сообщение
Раз уже сказал А...
Перекинул другу. У него в 2010 тоже не пошло. Что мы сделали. Выделили область. В поле имен прочитали имя (Group N). Переписали на лист (есть в книге на основном листе), потом выполнили замены в процедуре "Sub NameSHP()". И у него сразу пошло. Кидаю, пробуйте. Но считаю, что это просто временный подход. Может, нужно сделать привязку каждой области к ячейке (типа TopLeft...) и работать так?
И мне интересно, или пойдет у Вас теперь?
заработал, но задача стоит вот в чём: есть данные по областям, например численность населения, численность попугаев, слонов, и т.д., и нужно раскрасить области в зависимости от значения, т.е. до 1 млн - светлым, до 1,25 млн - чуть темнее, до 1,5 млн ещё темнее, и т.д., т.е. думаю задать ячейкам B2:B28 цвета на основном листе, и привязать раскраску к этим ячейкам чтобы так раскрасились и области.
0
4377 / 661 / 36
Регистрация: 17.01.2010
Сообщений: 2,134
31.03.2013, 02:08
Сколько всего групп? Я бы делал так. Перебирал значения из листа "RegionsName" в цикле For....next, в середине которого структура Select Case. Такая наброска (написано в окне и не тестировалось):
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
dim mArr1(), mArr2(),mArr3(), count1%,count2%,count3%
count1=0: count2=0: count3=0
with sheets("RegionsName")
   for i =2 to 28
      select case .cells(i,2).value
          case is <= 1250000
             count1=count1+1
             redim preserve mArr1(count1)
             marr1(count1)=i & ";" & trim(.cells(i,1).value ' Это фактически _
                   название соотверствующего Shape (~ "8;Запорізька обл.")
          case is > 1250000, is <= 1500000
             count2=count2+1
             redim preserve mArr2(count2)
             marr2(count2)=i & ";" & trim(.cells(i,1).value
          case is > 1500000
             count3=count3+1
             redim preserve mArr3(count3)
             marr3(count3)=i & ";" & trim(.cells(i,1).value 
      end select
   next 'i
end with
Получили три одномерных массива. Потом каждый массив перебираем в своих циклах, которые находятся в середине одного общего For i= 1 to 3 (всего ведь три массива), и в процесе перебора выделяем и заливаем, как нравится, но характерно для каждого критерия. Экспериментируйте. Он ведь работает с копией, которую при каждом нажатии на Start создает заново.
Это что б Вас не путать. Все это можно упростить, но будет сложнее к пониманию.

Добавлено через 44 минуты
Завтра праздник, поэтому не знаю, когда здесь появлюсь. Что бы мы не ходили кругами, еще такая информация. Очень много ручной работы с этими картами. Другая идея была использовать карту с сеткой координат, привязать к ячейкам и работать прямо с ней, но не нашел ничего подходящего и не сканировал, поэтому оценить деформацию сетки относительно границ ячеек листа не могу. Покрутил глобус. Наткнулся на инфу одного англ. форума (предв. информация), карта Северной Америки. Но форум, кроме регистрации, запросил минимальную оплату пробного периода. Мне не вопрос жизни - прошел мимо. И еще. В инженерных пакетах есть команда Align, которая позволяет выравнивать обьект в пространстве по ЗАДАННЫМ точкам, с одновременным маштабированием по X, Y, Z. В Excel выравнивание не совсем то. Или я не знаю. Все. Пробуйте. Если что интересное – поделитесь. С праздником!

Добавлено через 2 часа 19 минут
A! И так уже некогда спать ложиться. Скоро идти. Меняете полностью Sub WorkOnMap() на эту, обновленную:
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
Sub WorkOnMap()
'Основний лістинг, що викликається _
        об'єктом START на аркуші "RegionsName"
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
        If fun_SheetExists("Copy_МапаУкраїни") Then
            Sheets("Copy_МапаУкраїни").Delete
            Sheets("МапаУкраїни").Select
        End If
    Application.DisplayAlerts = True
    With Sheets("МапаУкраїни")
        .Copy Before:=Sheets("МапаУкраїни")
    End With
    With ActiveSheet
        .Name = "Copy_МапаУкраїни"
        .Tab.ColorIndex = 46
    End With
    Call NameSHP ' присвоєння назв
'Stop
    r = 2
    With Sheets("RegionsName")
        mArr = Range(.Cells(2, 1), _
        .Cells(.UsedRange.Row - 1 + .UsedRange.Rows.Count, 2)).Value
        mMAX = CLng(mArr(1, 2))
        For i = LBound(mArr, 1) To UBound(mArr, 1)
            If CLng(mArr(i, 2)) > mMAX Then
                mMAX = CLng(mArr(i, 2))
                r = i + 1
            End If
        Next 'i
    End With
Stop
    mstr = r & ";" & Application.Trim(mArr(r - 1, 1))
    Sheets("Copy_МапаУкраїни").Activate
    ActiveSheet.Shapes(mstr).Select
        With Selection
            .ShapeRange.Fill.Transparency = 0.2
            .ShapeRange.Line.Weight = 0.75
            .ShapeRange.Line.DashStyle = msoLineSolid
            .ShapeRange.Line.Style = msoLineSingle
            .ShapeRange.Line.Transparency = 0#
            .ShapeRange.Line.BackColor.RGB = RGB(255, 255, 255)
            .ShapeRange.Fill.Visible = msoTrue
            .ShapeRange.Fill.ForeColor.RGB = RGB(0, 0, 0)
            .ShapeRange.Fill.BackColor.RGB = RGB(255, 191, 0)
            .ShapeRange.Fill.PresetGradient msoGradientDiagonalUp, 3, _
                                                        msoGradientLateSunset
    End With
    Cells(1, 1).Select
    Call mCategoriesColor '
    Cells(1, 1).Select
    MsgBox Space(12) & "DONE !"
    Application.ScreenUpdating = True
    Erase mArr
End Sub
Эту процедуру добавляете в тот же модуль.
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
Sub mCategoriesColor()
' крім максимуму, всі інші будуть забарвлені у відтінки сірого.
Dim CategorieA(), CategorieB(), CategorieC(), arrCateg()
Dim countA%, countB%, countC%
Dim b&
With Sheets("RegionsName")
    mArr = Range(.Cells(2, 1), .Cells(28, 2)).Value
End With
 
 countA = 0: countB = 0: countC = 0
' Stop
 For i = LBound(mArr, 1) To UBound(mArr, 1)
    Select Case CLng(mArr(i, 2))
        Case Is < 1250001
            countA = countA + 1
            ReDim Preserve CategorieA(countA)
            CategorieA(countA) = i + 1 & ";" & mArr(i, 1)
        Case 1250001 To 1500000
            countB = countB + 1
            ReDim Preserve CategorieB(countB)
            CategorieB(countB) = i + 1 & ";" & mArr(i, 1)
        Case 1500001 To mMAX - 1
            countC = countC + 1
            ReDim Preserve CategorieC(countC)
            CategorieC(countC) = i + 1 & ";" & mArr(i, 1)
    End Select
Next 'i
mstr = Join(CategorieA, Chr(34) & ", " & Chr(34))
Stop
Sheets("Copy_МапаУкраїни").Select
With ActiveSheet
    For i = 1 To 3
        Select Case i
            Case Is = 1
                .Shapes.Range(CategorieA).Select
                    With Selection
                        .ShapeRange.Fill.ForeColor.RGB = _
                                            RGB(234, 234, 234)
                    End With
            Case Is = 2
                .Shapes.Range(CategorieB).Select
                    With Selection
                        .ShapeRange.Fill.ForeColor.RGB = _
                                            RGB(192, 192, 192)
                    End With
            Case Is = 3 ' тут знаходитиметься max
                .Shapes.Range(CategorieC).Select
                    With Selection
                        .ShapeRange.Fill.ForeColor.RGB = _
                                            RGB(150, 150, 150)
                    End With
        End Select
    Next 'i
End With
End Sub
В результате - MAX "живет" сам по себе, а три категории - в разных оттенках серого. Думаю, Вам уже будет легче подогнать под свои нужды. Удачи.
1
259 / 7 / 1
Регистрация: 22.01.2013
Сообщений: 47
29.04.2013, 21:24  [ТС]
пока что закинул данную тему, и начал использовать GeoFlow

Добавлено через 41 секунду
http://blogs.office.com/b/micr... lling.aspx
1
4377 / 661 / 36
Регистрация: 17.01.2010
Сообщений: 2,134
29.04.2013, 21:48
Спасибо! Должно быть интересное. Записал. Сменю Office - попробую обязательно. Это, чувствую, уже серьйозно.

Добавлено через 7 минут
But:
I will second this. As soon as I seen the demo, the first thing I thought of was being able to create a GeoFlow of each of our store's sales across different regions throughout the US. Our company still uses Windows XP/Office 2003, and I thought this would be a terrific demo of the need to move to the new software.
Across the 280 stores that we have, I think that the functionality and information provided by such a tool would be immediately apparent.
And something else:
You must be connected to the internet to use GeoFlow.
Все равно через скины потом?
0
259 / 7 / 1
Регистрация: 22.01.2013
Сообщений: 47
30.04.2013, 06:56  [ТС]
хм, как я знаю, работает GeoFlow начиная c офиса 2013, который я и установил, так как нужен powerpivot, с 2010 у меня не работает
1
259 / 7 / 1
Регистрация: 22.01.2013
Сообщений: 47
30.04.2013, 08:32  [ТС]
вот образец
Миниатюры
Изменения цветом на карте Украины в зависимости от значения таблицы Excel  
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
30.04.2013, 08:32
Помогаю со студенческими работами здесь

В зависимости от значения поля выделить текст строки другим цветом...
Друзья, подскажите пожалуйста, можно ли замутить такую формулу и как? Например в форме есть поле &quot;Тест&quot;, которое может...

Изменение цветом поля в подчиненной форме в зависимости от значения в форме
Добрый день. Есть такой вопрос. Есть БД, где в поле под Статусом печати выбирается номер List ID из подчиненной формы, выбирается...

Как сделать так чтобы PyQt периодически обновлял текст, в зависимости от изменения значения переменной
Есть код на PyQt5, хочу сделать так, чтобы в строке постоянно выводилось значение переменной, периодически обновляясь в зависимости от...

Вывод таблицы в зависимости от значения DataGrid
Подскажите, пожалуйста, как в DataGrid2 вывести таблицу, название которой соответствует выбранному значению в DataGrid1.

Выборка из таблицы в зависимости от значения в ComboBox
Есть три RadioButton-а которые изменяют: автор книга студент несколько ComboBox-сов куда в зависимости от выбранного...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при создании или изменении элементов справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи электронной. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru