Note: The other languages of the website are Google-translated. Back to English
Увійти  \/ 
x
or
x
Реєстрація  \/ 
x

or

Як автоматично змінювати розмір фігури на основі / залежно від вказаного значення комірки в 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-2019 та 365. Підтримує всі мови. Простота розгортання на вашому підприємстві чи в організації. Повна функція 30-денної безкоштовної пробної версії. 60-денна гарантія повернення грошей.
вкладка kte 201905

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

  • Увімкніть редагування та читання на вкладках у Word, Excel, PowerPoint, Publisher, Access, Visio та Project.
  • Відкривайте та створюйте кілька документів на нових вкладках того самого вікна, а не в нових вікнах.
  • Збільшує вашу продуктивність на 50% та зменшує сотні клацань миші для вас щодня!
дно офісної таблиці
Say something here...
symbols left.
You are guest
or post as a guest, but your post won't be published automatically.
Loading comment... The comment will be refreshed after 00:00.
  • To post as a guest, your comment is unpublished.
    mathnz · 1 months ago
    is there a way for this to work if the cell your using to set the size is the result of a formula rather than just a static value you manualy enter?
    • To post as a guest, your comment is unpublished.
      crystal · 22 days ago
      Hi mathnz,
      The VBA code below can help you solve the problem.
      You just need to change the value cells and the shape names in the code based on your own data.

      Private Sub Worksheet_Calculate() 'Updated by Extendoffice 20211105 On Error Resume Next Call SizeCircle("Oval 1", Val(Range("A1").Value)) 'A1 is the value cell, Oval 1 is the shape name Call SizeCircle("Smiley Face 2", Val(Range("A2").Value)) Call SizeCircle("Heart 3", Val(Range("A3").Value)) End Sub 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 2", Val(Target.Value)) ElseIf xAddress = "A3" Then Call SizeCircle("Heart 3", 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

  • To post as a guest, your comment is unpublished.
    Chairil · 2 years ago
    Hi Crytal
    what if to determine the side of the cube, triangle, box that must be determined based on the length, width? Please help me

    Thank You
    chairil
    • To post as a guest, your comment is unpublished.
      crystal · 2 years ago
      Hi Chairil,
      Sorry can't help you with that yet. Thanks for your comment.
  • To post as a guest, your comment is unpublished.
    carolgomezgianine@gmail.com · 2 years ago
    Hi Crytal,

    I would like to ask you, if there is a way to select color (red cell = red form) and name from specific cells . could it also be possible to create forms automatically from VBA?

    Thank you so much in advance :)

    Carol


  • To post as a guest, your comment is unpublished.
    Andrew · 3 years ago
    Is there a way to do this with Images? I don't seem to be having any luck using the code as posted.

    5 Images in a leaderboard, I want the Images in 1st or tied for 1st to be larger. Therefore I've 2 fixed image sizes, either 1x2 for not first or 2x4 for 1st placed (for example). I've got ranking already set-up so can use that to create sizes in specific cells for each image (ie use an IF statement so IF RANK is 1st size width is 2). My VBA is pretty weak though.

    Basically I want - on sheet update - look at image size cells and set each image size to the specific image size cells result. I can't see in the VBA above how that exactly works but I think it should be easy!
  • To post as a guest, your comment is unpublished.
    Sam · 3 years ago
    Hi, is there a way that I can make the shape expand on two dimensions (instead of increasing the shape size by 5, increase it 5 on the horizontal and 3 on the vertical)?
    • To post as a guest, your comment is unpublished.
      crystal · 3 years ago
      Dear Sam,
      The following VBA script can help you solve the problem. And the two dimensions are cell A1 and B1.

      Private Sub Worksheet_Change(ByVal Target As Range)
      On Error Resume Next
      If Target.Count = 1 Then
      If Not Intersect(Target, Range("A1:B1")) Is Nothing Then
      Call SizeCircle("Oval 2", Array(Val(Range("A1").Value), Val(Range("B1").Value)))
      End If
      End If
      End Sub
      Sub SizeCircle(Name As String, Arr As Variant)
      Dim I As Long
      Dim xCenterX As Single
      Dim xCenterY As Single
      Dim xCircle As Shape
      On Error GoTo ExitSub
      For I = 0 To UBound(Arr)
      If Arr(I) > 10 Then
      Arr(I) = 10
      ElseIf Arr(I) < 1 Then
      Arr(I) = 1
      End If
      Next
      Set xCircle = ActiveSheet.Shapes(Name)
      With xCircle
      xCenterX = .Left + (.Width / 2)
      xCenterY = .Top + (.Height / 2)
      .Width = Application.CentimetersToPoints(Arr(0))
      .Height = Application.CentimetersToPoints(Arr(1))
      .Left = xCenterX - (.Width / 2)
      .Top = xCenterY - (.Height / 2)
      End With
      ExitSub:
      End Sub
  • To post as a guest, your comment is unpublished.
    Ian · 4 years ago
    Hi,
    I have tried to use your post to write my own VBA code but don't seem to be getting very far. Mainly because I don't really understand VBA and I'm just trying to adapt your. I was wondering if you could help. I am wanting to change the length of a rectangle depending on the value in a cell. I would like the width if the rectangle to stay the same but the length to change. I would like both left hand vertices to stay in the same place and it to lengthen to the right. Is this possible?
    Thank you
    • To post as a guest, your comment is unpublished.
      crystal · 4 years ago
      Dear lan,
      Hope the following VBA code can solve your problem. (Please replace the Oval 1 with the shape name of your own)

      Private Sub Worksheet_Change(ByVal Target As Range)
      On Error Resume Next
      If Target.Row = 2 And Target.Column = 1 Then
      Call SizeCircle("Oval 1", Val(Target.Value))
      End If
      End Sub
      Sub SizeCircle(Name As String, Diameter)
      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)
      xCircle.ScaleWidth 1.5, msoFalse, msoScaleFromTopLeft
      With xCircle
      .LockAspectRatio = msoFalse
      .Width = Application.CentimetersToPoints(xDiameter)
      End With
      ExitSub:
      End Sub
  • To post as a guest, your comment is unpublished.
    Abhinaya · 4 years ago
    Hi, how do i replicate the same for multiple shapes linked to multiple cells in the same module?
    • To post as a guest, your comment is unpublished.
      crystal · 4 years ago
      Dear Abhinaya,
      The article is updated with a new code section which can help you to execute with multiple shapes each depending on different cells. Thank you for your comment.

      Best Regards,
      Crystal
  • To post as a guest, your comment is unpublished.
    Ranjit Konkar · 4 years ago
    How do I name my shape? In your example above, how do you assign the name Oval 2 to the circle you have drawn?
    • To post as a guest, your comment is unpublished.
      crystal · 4 years ago
      Dear Ranjit,
      For naming a shape, please select this shape, enter the shape name into the Name Box, and then press the Enter key. See below image shown.
  • To post as a guest, your comment is unpublished.
    Jade · 4 years ago
    How would you execute this with multiple shapes each depending on different cells?
    • To post as a guest, your comment is unpublished.
      crystal · 4 years ago
      Dear Jade,
      The article is updated with a new code section which can help you to execute with multiple shapes each depending on different cells. Thank you for your comment.

      Best Regards,
      Crystal