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

Jak automaticky měnit velikost tvaru na základě / v závislosti na zadané hodnotě buňky v aplikaci Excel?

Pokud chcete automaticky změnit velikost tvaru na základě hodnoty určené buňky, může vám tento článek pomoci.

Automaticky měnit velikost tvaru na základě zadané hodnoty buňky pomocí kódu VBA


Automaticky měnit velikost tvaru na základě zadané hodnoty buňky pomocí kódu VBA

Následující kód VBA vám pomůže změnit určitou velikost tvaru na základě zadané hodnoty buňky v aktuálním listu. Postupujte prosím následovně.

1. Klikněte pravým tlačítkem na záložku listu s tvarem, který potřebujete změnit, a poté klikněte Zobrazit kód z nabídky pravého tlačítka myši.

2. V Microsoft Visual Basic pro aplikace zkopírujte a vložte následující kód VBA do okna Kód.

Kód VBA: Automatická změna velikosti tvaru na základě zadané hodnoty buňky v aplikaci 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

Poznámka: V kódu, “Oválné 2„Je název tvaru, kterým změníte jeho velikost. A Řádek = 2, Sloupec = 1 znamená, že velikost tvaru „Oval 2“ bude změněna s hodnotou v A2. Změňte je prosím podle potřeby.

Pro automatickou změnu velikosti více tvarů na základě různých hodnot buněk použijte níže uvedený kód VBA.

Kód VBA: Automatická změna velikosti více tvarů na základě hodnoty různých zadaných buněk v aplikaci 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

Poznámky:

1) V kódu „Oválné 1","Veselý obličej 3"A"Srdce 3„Jsou názvy tvarů, automaticky změníte jejich velikost. A A1, A2 a A3 jsou buňky, na jejichž hodnotách budete automaticky měnit velikost tvarů.
2) Pokud chcete přidat více tvarů, přidejte řádky "ElseIf xAddress = "A3" Pak" a „Call SizeCircle („ Heart 2 “, Val (Target.Value))"nad první"End If"řádek v kódu. A změňte adresu buňky a název tvaru podle svých potřeb.

3. lis Další + Q současně zavřete Microsoft Visual Basic pro aplikace okno.

Od této chvíle, když změníte hodnotu v buňce A2, velikost tvaru Oval 2 se automaticky změní. Viz snímek obrazovky:

Nebo změňte hodnoty v buňce A1, A2 a A3 a automaticky změňte velikost odpovídajících tvarů „Ovál 1“, „Veselý obličej 3“ a „Srdce 3“. Viz snímek obrazovky:

Poznámka: Velikost tvaru se již nezmění, pokud je hodnota buňky větší než 10.


Seznam a export všech tvarů v aktuálním sešitu aplikace Excel:

Projekt Exportovat grafiku užitečnost Kutools pro Excel vám pomůže rychle zobrazit seznam všech tvarů v aktuálním sešitu a můžete je všechny exportovat do určité složky najednou, jak ukazuje následující snímek obrazovky. Stáhněte si a vyzkoušejte! (30-denní stezka zdarma)


Související články:


Nejlepší kancelářské nástroje produktivity

Kutools pro Excel řeší většinu vašich problémů a zvyšuje vaši produktivitu o 80%

  • Opakované použití: Rychle vložte složité vzorce, grafy a cokoli, co jste dříve používali; Šifrovat buňky s heslem; Vytvořte seznam adresátů a posílat e-maily ...
  • Super Formula Bar (snadno upravit více řádků textu a vzorce); Rozložení pro čtení (snadno číst a upravovat velké množství buněk); Vložit do filtrovaného rozsahu...
  • Sloučit buňky / řádky / sloupce bez ztráty dat; Rozdělit obsah buněk; Zkombinujte duplicitní řádky / sloupce... Zabraňte duplicitním buňkám; Porovnat rozsahy...
  • Vyberte možnost Duplikovat nebo Jedinečný Řádky; Vyberte prázdné řádky (všechny buňky jsou prázdné); Super hledání a fuzzy hledání v mnoha sešitech; Náhodný výběr ...
  • Přesná kopie Více buněk beze změny odkazu na vzorec; Automaticky vytvářet reference do více listů; Vložte odrážky, Zaškrtávací políčka a další ...
  • Extrahujte text, Přidat text, Odebrat podle pozice, Odebrat mezeru; Vytváření a tisk mezisoučtů stránkování; Převod mezi obsahem buněk a komentáři...
  • Super filtr (uložit a použít schémata filtrů na jiné listy); Rozšířené řazení podle měsíce / týdne / dne, frekvence a dalších; Speciální filtr tučnou kurzívou ...
  • Kombinujte sešity a pracovní listy; Sloučit tabulky na základě klíčových sloupců; Rozdělte data do více listů; Dávkový převod xls, xlsx a PDF...
  • Více než 300 výkonných funkcí. Podporuje Office / Excel 2007-2021 a 365. Podporuje všechny jazyky. Snadné nasazení ve vašem podniku nebo organizaci. Plné funkce 30denní bezplatná zkušební verze. 60denní záruka vrácení peněz.
karta kte 201905

Office Tab přináší do Office rozhraní s kartami a usnadňuje vám práci

  • Povolte úpravy a čtení na kartách ve Wordu, Excelu, PowerPointu, Publisher, Access, Visio a Project.
  • Otevřete a vytvořte více dokumentů na nových kartách ve stejném okně, nikoli v nových oknech.
  • Zvyšuje vaši produktivitu o 50%a snižuje stovky kliknutí myší každý den!
officetab dno
Komentáře (16)
Zatím žádné hodnocení. Buďte první, kdo ohodnotí!
Tento komentář byl moderátorem webu minimalizován
Jak byste to provedli s více tvary, z nichž každý závisí na různých buňkách?
Tento komentář byl moderátorem webu minimalizován
Milá Jade,
Článek je aktualizován o novou sekci kódu, která vám může pomoci spouštět více tvarů, z nichž každý závisí na různých buňkách. Děkuji za váš komentář.

S pozdravem,
Krystal
Tento komentář byl moderátorem webu minimalizován
Jak pojmenuji svůj tvar? Jak ve svém příkladu výše přiřadíte název Oval 2 kruhu, který jste nakreslili?
Tento komentář byl moderátorem webu minimalizován
Vážený Randžíte,
Chcete-li pojmenovat tvar, vyberte tento tvar, zadejte název tvaru do pole Název a stiskněte klávesu Enter. Viz níže zobrazený obrázek.
Tento komentář byl moderátorem webu minimalizován
Ahoj, jak mohu replikovat totéž pro více tvarů spojených s více buňkami ve stejném modulu?
Tento komentář byl moderátorem webu minimalizován
Milá Abhinaya,
Článek je aktualizován o novou sekci kódu, která vám může pomoci spouštět více tvarů, z nichž každý závisí na různých buňkách. Děkuji za váš komentář.

S pozdravem,
Krystal
Tento komentář byl moderátorem webu minimalizován
Dobrý den,
Pokusil jsem se použít váš příspěvek k napsání vlastního kódu VBA, ale nezdá se, že bych se dostal příliš daleko. Hlavně proto, že moc nerozumím VBA a jen se snažím přizpůsobit váš. Napadlo mě, jestli bys mohl pomoci. Chci změnit délku obdélníku v závislosti na hodnotě v buňce. Chtěl bych, aby šířka obdélníku zůstala stejná, ale délka se změnila. Chtěl bych, aby oba vrcholy levé ruky zůstaly na stejném místě a aby se prodloužil doprava. Je to možné?
Děkuji
Tento komentář byl moderátorem webu minimalizován
drahý lane,
Doufám, že následující kód VBA může vyřešit váš problém. (Nahraďte prosím Oval 1 vlastním názvem tvaru)

Soukromá dílčí tabulka_Změna (ByVal Target As Range)
On Error Resume Next
Pokud Target.Row = 2 a Target.Column = 1, pak
Call SizeCircle("Oval 1", Val(Target.Value))
End If
End Sub
Sub SizeCircle (Název jako řetězec, průměr)
Dim xCircle As Shape
Dim xDiameter As Single
Při chybě GoTo ExitSub
xDiameter = Průměr
Pokud xDiameter > 10, pak xDiameter = 10
Pokud xDiameter < 1, pak xDiameter = 1
Nastavit xCircle = ActiveSheet.Shapes(Name)
xCircle.ScaleWidth 1.5, msoFalse, msoScaleFromTopLeft
S xCircle
.LockAspectRatio = msoFalse
.Width = Application.CentimetersToPoints(xDiameter)
Konec s
ExitSub:
End Sub
Tento komentář byl moderátorem webu minimalizován
Ahoj, existuje způsob, jak mohu tvar roztáhnout ve dvou rozměrech (místo zvětšení velikosti o 5, zvětšit jej o 5 v horizontále a 3 ve vertikálním směru)?
Tento komentář byl moderátorem webu minimalizován
milý Same,
Následující skript VBA vám může pomoci vyřešit problém. A tyto dva rozměry jsou buňka A1 a B1.

Soukromá dílčí tabulka_Změna (ByVal Target As Range)
On Error Resume Next
Pokud Target.Count = 1 Pak
If Not Intersect(Target, Range("A1:B1")) Is Nothing Then
Call SizeCircle("Oval 2", Array(Val(Range("A1")).Hodnota), Val(Range("B1").Value)))
End If
End If
End Sub
Sub SizeCircle (Název jako řetězec, Arr jako varianta)
Dim I As Long
Dim xCenterX jako jeden
Dim xCenterY jako Single
Dim xCircle As Shape
Při chybě GoTo ExitSub
Pro I = 0 až UBound(Arr)
Pokud Arr(I) > 10 Pak
Arr(I) = 10
ElseIf Arr(I) < 1 Potom
Arr(I) = 1
End If
další
Nastavit xCircle = ActiveSheet.Shapes(Name)
S xCircle
xCenterX = .Left + (.Width / 2)
xCenterY = .Top + (.Výška / 2)
.Width = Application.CentimetersToPoints(Arr(0))
.Height = Application.CentimetersToPoints(Arr(1))
.Left = xCenterX - (.Width / 2)
.Top = xCenterY - (.Výška / 2)
Konec s
ExitSub:
End Sub
Tento komentář byl moderátorem webu minimalizován
Existuje způsob, jak to provést pomocí obrázků? Zdá se, že nemám štěstí při použití kódu, jak byl zveřejněn.

5 obrázků ve výsledkové tabulce, chci, aby obrázky na 1. nebo svázané na 1. byly větší. Proto mám 2 pevné velikosti obrázku, buď 1x2 pro první umístění nebo 2x4 pro první umístění (například). Už mám nastaveno hodnocení, takže ho mohu použít k vytvoření velikostí v konkrétních buňkách pro každý obrázek (tj. použijte příkaz IF, takže IF RANK je 1. velikost, šířka je 1). Moje VBA je ale dost slabé.

V zásadě se chci - při aktualizaci listu - podívat na buňky velikosti obrázku a nastavit každou velikost obrázku na konkrétní výsledek buněk velikosti obrázku. Ve výše uvedeném VBA nevidím, jak to přesně funguje, ale myslím, že by to mělo být snadné!
Tento komentář byl moderátorem webu minimalizován
Ahoj Crytal,

Chtěl bych se vás zeptat, zda existuje způsob, jak vybrat barvu (červená buňka = červená forma) a název z konkrétních buněk. bylo by také možné vytvářet formuláře automaticky z VBA?

Předem moc děkuji :)

Koleda
Tento komentář byl moderátorem webu minimalizován
Ahoj Crytal
co když určit stranu krychle, trojúhelníku, krabice, která musí být určena na základě délky, šířky? Prosím pomozte mi

Děkujeme
židle
Tento komentář byl moderátorem webu minimalizován
Ahoj Chairil,
S tím vám bohužel zatím nemohu pomoci. Děkuji za Váš komentář.
Tento komentář byl moderátorem webu minimalizován
Existuje způsob, jak to fungovat, pokud je buňka, kterou používáte k nastavení velikosti, výsledkem vzorce, nikoli pouze statické hodnoty, kterou ručně zadáváte?
Tento komentář byl moderátorem webu minimalizován
Ahoj mathnz, níže uvedený kód VBA vám může pomoci vyřešit problém. Stačí změnit buňky hodnot a názvy tvarů v kódu na základě vašich vlastních dat.
Private Sub Worksheet_Calculate()
'Aktualizováno Extendoffice 20211105
On Error Resume Next
Call SizeCircle("Oval 1", Val(Range("A1")).Value)) 'A1 je buňka s hodnotou, Oval 1 je název tvaru
Call SizeCircle("Smiley Face 2", Val(Range("A2")).Value))
Call SizeCircle("Heart 3", Val(Range("A3")).Value))

End Sub
Soukromá dílčí tabulka_Změna (ByVal Target As Range)
Ztlumit xAddress jako řetězec
On Error Resume Next
If Target.CountLarge = 1 Then
xAddress = Target.Address(0, 0)
Pokud xAddress = "A1" Pak
Call SizeCircle("Oval 1", Val(Target.Value))
ElseIf xAddress = "A2" Pak
Call SizeCircle("Smiley Face 2", Val(Target.Value))
ElseIf xAddress = "A3" Pak
Call SizeCircle("Heart 3", Val(Target.Value))

End If
End If
End Sub

Sub SizeCircle (Název jako řetězec, průměr)
Dim xCenterX jako jeden
Dim xCenterY jako Single
Dim xCircle As Shape
Dim xDiameter As Single
Při chybě GoTo ExitSub
xDiameter = Průměr
Pokud xDiameter > 10, pak xDiameter = 10
Pokud xDiameter < 1, pak xDiameter = 1
Nastavit xCircle = ActiveSheet.Shapes(Name)
S xCircle
xCenterX = .Left + (.Width / 2)
xCenterY = .Top + (.Výška / 2)
.Width = Application.CentimetersToPoints(xDiameter)
.Height = Application.CentimetersToPoints(xDiameter)
.Left = xCenterX - (.Width / 2)
.Top = xCenterY - (.Výška / 2)
Konec s
ExitSub:
End Sub

Zatím zde nejsou žádné komentáře

Sociální sítě

Copyright © 2009 - www.extendoffice.com. | Všechna práva vyhrazena. Poháněno ExtendOffice. | |. | Sitemap
Microsoft a logo Office jsou ochranné známky nebo registrované ochranné známky společnosti Microsoft Corporation ve Spojených státech a / nebo jiných zemích.
Chráněno Sectigo SSL