Note: The other languages of the website are Google-translated. Back to English

Як автоматично змінювати розмір фігури на основі / залежно від вказаного значення комірки в Excel?

Якщо ви хочете автоматично змінити розмір фігури на основі значення вказаної комірки, ця стаття може вам допомогти.

Автоматично змінювати розмір фігури на основі вказаного значення комірки за допомогою коду VBA


Автоматично змінювати розмір фігури на основі вказаного значення комірки за допомогою коду VBA

Наступний код VBA може допомогти вам змінити певний розмір фігури на основі вказаного значення комірки на поточному аркуші. Будь ласка, виконайте наступне.

1. Клацніть правою кнопкою миші вкладку аркуша з формою, яку потрібно змінити, а потім натисніть Переглянути код з меню, що клацне правою кнопкою миші.

2 В Microsoft Visual Basic для додатків вікно, скопіюйте та вставте наступний код VBA у вікно коду.

Код VBA: Автоматично змінювати розмір фігури на основі вказаного значення комірки в Excel

Private Sub Worksheet_Change(ByVal Target As Range)
    On Error Resume Next
    If Target.Row = 2 And Target.Column = 1 Then
        Call SizeCircle("Oval 2", Val(Target.Value))
    End If
End Sub
Sub SizeCircle(Name As String, Diameter)
    Dim xCenterX As Single
    Dim xCenterY As Single
    Dim xCircle As Shape
    Dim xDiameter As Single
    On Error GoTo ExitSub
    xDiameter = Diameter
    If xDiameter > 10 Then xDiameter = 10
    If xDiameter < 1 Then xDiameter = 1
    Set xCircle = ActiveSheet.Shapes(Name)
    With xCircle
        xCenterX = .Left + (.Width / 2)
        xCenterY = .Top + (.Height / 2)
        .Width = Application.CentimetersToPoints(xDiameter)
        .Height = Application.CentimetersToPoints(xDiameter)
        .Left = xCenterX - (.Width / 2)
        .Top = xCenterY - (.Height / 2)
    End With
ExitSub:
End Sub

примітки: У коді "Овальний 2”- це назва фігури, ви зміните її розмір. І Рядок = 2, Стовпець = 1 означає, що розмір фігури “Овал 2” буде змінено зі значенням в А2. Будь ласка, змініть їх, як вам потрібно.

Для автоматичного зміни розміру декількох фігур на основі різних значень комірок застосуйте наведений нижче код VBA.

Код VBA: Автоматично змінюйте розмір кількох фігур на основі значень різних клітинок у Excel

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim xAddress As String
    On Error Resume Next
    If Target.CountLarge = 1 Then
        xAddress = Target.Address(0, 0)
        If xAddress = "A1" Then
            Call SizeCircle("Oval 1", Val(Target.Value))
        ElseIf xAddress = "A2" Then
            Call SizeCircle("Smiley Face 3", Val(Target.Value))
        ElseIf xAddress = "A3" Then
            Call SizeCircle("Heart 2", Val(Target.Value))
        End If
    End If
End Sub

Sub SizeCircle(Name As String, Diameter)
    Dim xCenterX As Single
    Dim xCenterY As Single
    Dim xCircle As Shape
    Dim xDiameter As Single
    On Error GoTo ExitSub
    xDiameter = Diameter
    If xDiameter > 10 Then xDiameter = 10
    If xDiameter < 1 Then xDiameter = 1
    Set xCircle = ActiveSheet.Shapes(Name)
    With xCircle
        xCenterX = .Left + (.Width / 2)
        xCenterY = .Top + (.Height / 2)
        .Width = Application.CentimetersToPoints(xDiameter)
        .Height = Application.CentimetersToPoints(xDiameter)
        .Left = xCenterX - (.Width / 2)
        .Top = xCenterY - (.Height / 2)
    End With
ExitSub:
End Sub

Примітки:

1) У коді "Овальний 1»,«Смайлик 3"І"Серце 3”- це назва фігур, ви автоматично зміните їх розміри. І A1, A2 іA3 це клітинки, значення яких ви автоматично змінюєте розмір фігур на основі.
2) Якщо ви хочете додати більше фігур, додайте лінії "ElseIf xAddress = "A3" Тоді"Call CallCircle (" Heart 2 ", Val (Target.Value))"вище першого"End If"рядок у коді. І змініть адресу комірки та назву фігури відповідно до ваших потреб.

3. прес інший + Q клавіші одночасно, щоб закрити Microsoft Visual Basic для додатків вікна.

Відтепер, коли ви змінюєте значення в комірці А2, розмір фігури Овал 2 буде змінюватися автоматично. Дивіться знімок екрана:

Або змініть значення в комірках A1, A2 і A3, щоб автоматично змінити розмір відповідних фігур "Овал 1", "Смайлик 3" та "Серце 3". Дивіться знімок екрана:

примітки: Розмір фігури більше не змінюватиметься, коли значення комірки перевищує 10.


Список і експорт усіх фігур у поточній книзі Excel:

повне г, повне г,, показали, від, номер, XNUMX Експорт графіки корисність Kutools для Excel допоможе вам швидко перерахувати всі фігури у поточній книзі, і ви зможете експортувати їх усі одночасно до певної папки, як показано на екрані нижче shwon. Завантажте та спробуйте зараз! (30-денна безкоштовна траса)


Статті по темі:


Найкращі інструменти для підвищення продуктивності офісу

Kutools для Excel вирішує більшість ваших проблем і збільшує продуктивність на 80%

  • Повторне використання: Швидко вставте складні формули, діаграми і все, що ви використовували раніше; Шифрувати комірки з паролем; Створити список розсилки та надсилати електронні листи ...
  • Супер формула бар (легко редагувати кілька рядків тексту та формули); Макет читання (легко читати та редагувати велику кількість комірок); Вставте у відфільтрований діапазон...
  • Об’єднати клітинки / рядки / стовпці без втрати даних; Вміст розділених комірок; Об'єднати повторювані рядки / стовпці... Запобігання дублюючим клітинам; Порівняйте діапазони...
  • Виберіть Повторюваний або Унікальний Рядки; Виберіть Пусті рядки (усі клітинки порожні); Супер знахідка та нечітка знахідка у багатьох робочих зошитах; Випадковий вибір ...
  • Точна копія Кілька клітинок без зміни посилання на формулу; Автоматичне створення посилань на кілька аркушів; Вставте кулі, Прапорці та інше ...
  • Витяг тексту, Додати текст, Видалити за позицією, Видаліть пробіл; Створення та друк проміжних підсумків підкачки; Перетворення вмісту комірок та коментарів...
  • Супер фільтр (зберегти та застосувати схеми фільтрів до інших аркушів); Розширене сортування за місяцем / тижнем / днем, частотою та іншим; Спеціальний фільтр жирним, курсивом ...
  • Поєднайте робочі зошити та робочі аркуші; Об’єднати таблиці на основі ключових стовпців; Розділіть дані на кілька аркушів; Пакетне перетворення xls, xlsx та PDF...
  • Понад 300 потужних функцій. Підтримує Office / Excel 2007-2021 і 365. Підтримує всі мови. Легке розгортання на вашому підприємстві чи в організації. 30-денна безкоштовна пробна версія повних функцій. 60-денна гарантія повернення грошей.
вкладка kte 201905

Вкладка Office забезпечує інтерфейс з вкладками для Office і значно спрощує вашу роботу

  • Увімкніть редагування та читання на вкладках у Word, Excel, PowerPoint, Publisher, Access, Visio та Project.
  • Відкривайте та створюйте кілька документів на нових вкладках того самого вікна, а не в нових вікнах.
  • Збільшує вашу продуктивність на 50% та зменшує сотні клацань миші для вас щодня!
дно офісної таблиці
Коментарі (16)
Поки немає оцінок. Оцініть першим!
Цей коментар був мінімізований модератором на сайті
Як би ви виконали це з кількома фігурами, кожна з яких залежить від різних клітинок?
Цей коментар був мінімізований модератором на сайті
Шановна Джейд,
Стаття оновлена ​​новим розділом коду, який може допомогти вам виконувати з кількома фігурами, кожну залежно від різних клітинок. Дякуємо за коментар.

З найкращими побажаннями,
кристал
Цей коментар був мінімізований модератором на сайті
Як назвати свою форму? У вашому прикладі вище, як ви призначите назву Овал 2 намальованому колу?
Цей коментар був мінімізований модератором на сайті
Шановний Ранджит,
Щоб назвати фігуру, виберіть цю фігуру, введіть назву фігури в поле Ім’я, а потім натисніть клавішу Enter. Дивіться зображення нижче.
Цей коментар був мінімізований модератором на сайті
Привіт, як мені відтворити те саме для кількох фігур, пов’язаних з кількома клітинками в одному модулі?
Цей коментар був мінімізований модератором на сайті
Шановна Абхіная,
Стаття оновлена ​​новим розділом коду, який може допомогти вам виконувати з кількома фігурами, кожну залежно від різних клітинок. Дякуємо за коментар.

З найкращими побажаннями,
кристал
Цей коментар був мінімізований модератором на сайті
привіт,
Я намагався використати вашу публікацію, щоб написати власний код VBA, але, здається, це не так далеко. Головним чином тому, що я не дуже розумію VBA і просто намагаюся адаптувати ваш. Мені було цікаво, чи можете ви допомогти. Я хочу змінити довжину прямокутника залежно від значення в комірці. Я хотів би, щоб ширина прямокутника залишилася незмінною, але змінилася довжина. Я б хотів, щоб обидві ліві вершини залишалися на тому самому місці, а вона подовжилася вправо. Це можливо?
Дякую
Цей коментар був мінімізований модератором на сайті
Шановний лан,
Сподіваюся, наступний код VBA може вирішити вашу проблему. (Будь ласка, замініть Овал 1 на власну назву форми)

Приватний допоміжний робочий лист_Change(ByVal Target As Range)
On Error Resume Next
Якщо Target.Row = 2 і Target.Column = 1, то
Викликати SizeCircle("Oval 1", Val(Target.Value))
End If
End Sub
Sub SizeCircle (назва як рядок, діаметр)
Dim xCircle As Shape
Розмір x Діаметр як одиночний
Помилка GoTo ExitSub
x Діаметр = Діаметр
Якщо xDiameter > 10, то xDiameter = 10
Якщо xDiameter < 1, то xDiameter = 1
Встановити xCircle = ActiveSheet.Shapes(Назва)
xCircle.ScaleWidth 1.5, msoFalse, msoScaleFromTopLeft
За допомогою xCircle
.LockAspectRatio = msoFalse
.Width = Application.CentimetersToPoints(xDiameter)
Кінець з
ExitSub:
End Sub
Цей коментар був мінімізований модератором на сайті
Привіт, чи є спосіб розширити фігуру в двох вимірах (замість збільшення розміру фігури на 5, збільшити його на 5 по горизонталі і 3 по вертикалі)?
Цей коментар був мінімізований модератором на сайті
Шановний Семе,
Наведений нижче сценарій VBA може допомогти вам вирішити проблему. І два виміри - це клітинка A1 і B1.

Приватний допоміжний робочий лист_Change(ByVal Target As Range)
On Error Resume Next
Якщо Target.Count = 1 Тоді
Якщо не перетинається(ціль, діапазон("A1:B1")) - це нічого
Викликати SizeCircle("Oval 2", Array(Val(Range("A1").Value), Val(Range("B1").Value)))
End If
End If
End Sub
Sub SizeCircle (назва як рядок, Arr як варіант)
Dim I As Long
Dim xCenterX як одиночний
Dim xCenterY як одинокий
Dim xCircle As Shape
Помилка GoTo ExitSub
Для I = 0 до UBbound(Arr)
Якщо Arr(I) > 10 Тоді
Arr(I) = 10
Інакше Якщо Arr(I) < 1 Тоді
Arr(I) = 1
End If
Далі
Встановити xCircle = ActiveSheet.Shapes(Назва)
За допомогою xCircle
xCenterX = .Left + (.Width / 2)
xCenterY = .Top + (.Height / 2)
.Width = Application.CentimetersToPoints(Arr(0))
.Height = Application.CentimetersToPoints(Arr(1))
.Зліва = xCenterX - (.Ширина / 2)
.Top = xCenterY - (.Height / 2)
Кінець з
ExitSub:
End Sub
Цей коментар був мінімізований модератором на сайті
Чи є спосіб зробити це за допомогою зображень? Здається, мені не пощастило використовувати код, як він опублікований.

5 зображень у таблиці лідерів, я хочу, щоб зображення в 1-му чи прив’язаному до 1-го були більшими. Тому у мене є 2 фіксовані розміри зображення, 1x2 для не першого або 2x4 для 1-го розміщеного (наприклад). У мене вже налаштовано рейтинг, тому я можу використовувати це для створення розмірів у певних клітинках для кожного зображення (тобто використовуйте оператор IF, щоб IF RANK був 1-й шириною розміру 2). Хоча мій VBA досить слабкий.

В основному я хочу - під час оновлення аркуша - подивитися на клітинки розміру зображення та встановити розмір кожного зображення відповідно до результату певного розміру клітинок зображення. Я не бачу у VBA вище, як це саме працює, але я думаю, що це має бути легко!
Цей коментар був мінімізований модератором на сайті
Привіт Crytal!

Я хотів би запитати вас, чи є спосіб вибрати колір (червона клітинка = червона форма) та назву з конкретних клітинок. чи можна також автоматично створювати форми з VBA?

Дуже дякую наперед :)

Керол
Цей коментар був мінімізований модератором на сайті
Привіт Crytal
а якщо визначити сторону куба, трикутника, коробки, яку потрібно визначити, виходячи з довжини, ширини? Будь ласка, допоможи мені

Дякую
крісло
Цей коментар був мінімізований модератором на сайті
Привіт, Chairil,
На жаль, поки що не можу вам допомогти. Дякую за коментар.
Цей коментар був мінімізований модератором на сайті
чи є спосіб, щоб це спрацювало, якщо клітинка, яку ви використовуєте для встановлення розміру, є результатом формули, а не просто статичним значенням, яке ви вводите вручну?
Цей коментар був мінімізований модератором на сайті
Привіт, mathnz, код VBA, наведений нижче, може допомогти вам вирішити проблему. Вам просто потрібно змінити клітинки значень та назви фігур у коді на основі ваших власних даних.
Приватний допоміжний аркуш_обчислення()
'Оновлено Extendoffice 20211105
On Error Resume Next
Викликати SizeCircle("Oval 1", Val(Діапазон("A1").Value)) 'A1 – комірка значення, Овал 1 – назва фігури
Call SizeCircle("Smiley Face 2", Val(Діапазон("A2").Value))
Виклик SizeCircle("Серце 3", Val(Діапазон("A3").Value))

End Sub
Приватний допоміжний робочий лист_Change(ByVal Target As Range)
Dim xAddress як рядок
On Error Resume Next
Якщо Target.CountLarge = 1 Тоді
xAddress = Target.Address(0, 0)
Якщо xAddress = "A1", Тоді
Викликати SizeCircle("Oval 1", Val(Target.Value))
ElseIf xAddress = "A2" Тоді
Call SizeCircle("Smiley Face 2", Val(Target.Value))
ElseIf xAddress = "A3" Тоді
Call SizeCircle("Серце 3", Val(Target.Value))

End If
End If
End Sub

Sub SizeCircle (назва як рядок, діаметр)
Dim xCenterX як одиночний
Dim xCenterY як одинокий
Dim xCircle As Shape
Розмір x Діаметр як одиночний
Помилка GoTo ExitSub
x Діаметр = Діаметр
Якщо xDiameter > 10, то xDiameter = 10
Якщо xDiameter < 1, то xDiameter = 1
Встановити xCircle = ActiveSheet.Shapes(Назва)
За допомогою xCircle
xCenterX = .Left + (.Width / 2)
xCenterY = .Top + (.Height / 2)
.Width = Application.CentimetersToPoints(xDiameter)
.Height = Application.CentimetersToPoints(xDiameter)
.Зліва = xCenterX - (.Ширина / 2)
.Top = xCenterY - (.Height / 2)
Кінець з
ExitSub:
End Sub

There are no comments posted here yet

Слідуй за нами

Copyright © 2009 - WWW.extendoffice.com. | Всі права захищені. На основі ExtendOffice. | Карта сайту
Microsoft та логотип Office є товарними знаками або зареєстрованими товарними знаками Microsoft Corporation у США та / або інших країнах.
Захищений Sectigo SSL