Forum: PC-Programmierung Excel VBA Kreis


von siebert (Gast)


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

von siebert (Gast)


Lesenswert?

Falls jemand eine Idee haben sollte, könnte er das zum Beispiel mit 
einem 50x50 Quadrat testen, der Radius zum Beispiel 10 Zellen.

von Stephan G. (Firma: privat) (morob)


Lesenswert?

sind doch überall ferien

von siebert (Gast)


Lesenswert?

Stephan G. schrieb:
> sind doch überall ferien

???

von egbert (Gast)


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

von siebert (Gast)


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?

von Sven K. (quotschmacher)


Lesenswert?

egbert schrieb:
> ' destination & radius (AA4...

hast du mal geguckt, ob in spalte aa4 was ist?

von egbert (Gast)


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

von siebert (Gast)


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?

von siebert (Gast)


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

von Stephan G. (Firma: privat) (morob)


Lesenswert?

siebert schrieb:
> Stephan G. schrieb:
>> sind doch überall ferien
>
> ???

die aufgabe habe ich meinen teilnehmern früher mal gestellt.

von siebert (Gast)


Lesenswert?

Stephan G. schrieb:
> die aufgabe habe ich meinen teilnehmern früher mal gestellt.

Achso, ich bin weder in der Schule noch in der Uni.
Wenn du die Aufgabe aber gestellt hast, dann hast du bestimmt eine 
Lösung ? grins

von Eric B. (beric)


Angehängte Dateien:

Lesenswert?

Es geht auch ohne VBA.
Kreis-radius in Sheet1!B1 ausfüllen,
Sheet2 anschauen und staunen ;-)

: Bearbeitet durch User
von siebert (Gast)


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

von siebert (Gast)


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.

von Eric B. (beric)


Lesenswert?

siebert schrieb:
> Kann man diese beiden Punkte so auch realisieren?

...

> Du hast die Kreisform ja praktisch erzeugt. In meinem Fall soll der
> Kreis aber aus einem vorhanden Rechteck ausgeschnitten werden.

Dann musst du halt die Eingabe-Parameter und die Formeln entsprechend 
anpassen. Ist alles einfache Mathemathik. Viel Erfolg!

: Bearbeitet durch User
von siebert (Gast)


Lesenswert?

Eric B. schrieb:
> Dann musst du halt die Eingabe-Parameter und die Formeln entsprechend
> anpassen. Ist alles einfache Mathemathik. Viel Erfolg!

Und wie? Das verstehe ich nicht

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.