Excel VBA Kreis

Gast #5506568
Lesenswert?
• ▲
▼
Servus und Hallo, ich suche nach einer Möglichkeit aus einem 
Rechteckigem Feld ein kreisförmiges zu machen. Dafür habe ich die 
Adresse des Mittelpunktes des Rechtecks bestimmt und auch den Radius, 
der in das Rechteck passen soll. Nun weiß ich aber nicht, wie ich 
radial/rund in Excel ausschneiden kann.

Zum besseren Verständnis:
1
aus
2

3
11111111111111
4
11111111111111
5
11111111111111
6
11111111111111
7
11111111111111
8
11111111111111
9
11111111111111
10

11
soll
12

13
      
14
    11111 
15
   1111111
16
    11111
17

18
(Na gut, sieht nicht so toll aus, soll aber Kreisförmig sein)
19

20
entstehen.
Dabei ist das Rechteck mit Werten gefüllt, diese spielen aber keinerlei 
Rolle!


Hat jemand eine Idee, wie das in VBA oder auch mit einfachen Funktionen 
zu lösen ist?



Grützi, Siebert
Gast #5506614
Lesenswert?
• ▲
▼
Das hier unten sollte Dein Problem lösen.

Mit bestem Gruß,
Egbert


Sub Makro1()

Dim x0, y0, x1, y1 As Integer
Dim dx, dy As Integer
Dim mx, my As Integer
Dim destx, desty, radius As Integer
Dim i, j, q, r2 As Integer

Dim v

' 16x16 Matrix (C4:R19)
x0 = 3
y0 = 4
x1 = 18
y1 = 19

' destination & radius (AA4...
destx = 27
desty = y0
radius = 5

' delta
dx = (x1 - x0)
dy = (y1 - y0)
mx = dx \ 2
my = dy \ 2
r2 = radius ^ 2

For i = 0 To dy
    For j = 0 To dx
        Cells(desty + i, destx + j) = "."
    Next j
Next i

For i = -radius To radius
    q = Sqr(r2 - i ^ 2)
    For j = -q To q
        v = Cells(y0 + my + j, x0 + mx + i)
        Cells(desty + my + j, destx + mx + i) = v
    Next j
Next i

End Sub
Gast #5506648
Lesenswert?
• ▲
▼
egbert schrieb:
> Das hier unten sollte Dein Problem lösen.

Hallo Egbert, im Voraus schon mal vielen Dank für deine schnelle 
Antwort!
Leider bin ich in VBA noch nicht sehr geübt und verstehe den Code nicht 
ganz.

So wie ich das verstehe hast du ein 16x16 Rechteck und machst Kreis mit 
radius 5 daraus, richtig?

Wenn ich das Makro ausführe, passiert bei mir nichts, was mache ich 
falsch?

egbert schrieb:
> destx = 27
> desty = y0

Was bedeuten diese Zeilen?
Gast #5506658
Lesenswert?
• ▲
▼
siebert schrieb:
> egbert schrieb:
>> Das hier unten sollte Dein Problem lösen.
>
> Hallo Egbert, im Voraus schon mal vielen Dank für deine schnelle
> Antwort!

Hallo, Siebert.

> Leider bin ich in VBA noch nicht sehr geübt und verstehe den Code nicht
> ganz.
>
> So wie ich das verstehe hast du ein 16x16 Rechteck und machst Kreis mit
> radius 5 daraus, richtig?

Ja.

>
> Wenn ich das Makro ausführe, passiert bei mir nichts, was mache ich
> falsch?

Füge zum Ausprobieren in den Zellen C4...R19 einfach beliebige Werte 
ein.

>
> egbert schrieb:
>> destx = 27
>> desty = y0
>
> Was bedeuten diese Zeilen?

"Destination", d.h. die Zielkoordinaten (hier "AA4") in welche "der 
Kreis" aus der Quellmatrix kopiert wird.

Mit bestem Gruß,
Egbert
Gast #5506707
Lesenswert?
• ▲
▼
Sven A. schrieb:
> hast du mal geguckt, ob in spalte aa4 was ist?

egbert schrieb:
>> egbert schrieb:
>>> destx = 27
>>> desty = y0
>>
>> Was bedeuten diese Zeilen?
>
> "Destination", d.h. die Zielkoordinaten (hier "AA4") in welche "der
> Kreis" aus der Quellmatrix kopiert wird.

Ah, deswegen habe ich es nicht gesehen. Jetzt funktioniert es und sieht 
wirklich super aus!

Wenn ich meinen Durchmesser aus einer Zelle übernehmen möchte, schreibe 
ich dann:

radius = Range("A3")

wenn mein Wert in A3 steht?
Gast #5506814
Lesenswert?
• ▲
▼
Bei näherer Betrachtung ist mir hier aufgefallen, dass der Radius aber 
nicht wirklich 5 ist.
So habe ich in der obersten Zeile des Kreises 5 vertikale Zellen, in der 
untersten nur eine.

Hast du noch eine Idee, wie man dies gleichmäßig lösen kann?

MfG
Gast #5507421
Lesenswert?
• ▲
▼
Eric B. schrieb:
> Es geht auch ohne VBA.
> Kreis-radius in Sheet1!B1 ausfüllen,
> Sheet2 anschauen und staunen ;-)

Hallo Eric, die Lösung gefällt mir eigentlich sehr gut, da der Kreis 
einen konstanten Radius aufweist.
Allerdings fehlen mir hier noch 2 wichtige Dinge:
- Kreis aus einem Rechteck ausschneiden
- "Startpunkt" ,also  des Kreises festlegen

Kann man diese beiden Punkte so auch realisieren?

MfG Siebert
Gast #5507422
Lesenswert?
• ▲
▼
Du hast die Kreisform ja praktisch erzeugt. In meinem Fall soll der 
Kreis aber aus einem vorhanden Rechteck ausgeschnitten werden.

Das heißt:

Ich habe ein Rechteck von A1 bis AZ60

nun soll ein Kreis aus dem Rechteck mit dem Radius x (Z.B. = 10) 
ausgeschnitten werden, die Werte außerhalb des Kreises können entweder 
gelöscht oder auf einen anderen Wert (z.B. -1) gesetzt werden.

Ansonsten, wie schon gesagt, gefällt mir dies sehr gut.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.