Forum: PC-Programmierung Excel VBA Kreis


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von siebert (Gast)


Bewertung
0 lesenswert
nicht 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:
aus

11111111111111
11111111111111
11111111111111
11111111111111
11111111111111
11111111111111
11111111111111

soll

      
    11111 
   1111111
    11111

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

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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
-1 lesenswert
nicht lesenswert
sind doch überall ferien

von siebert (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Stephan G. schrieb:
> sind doch überall ferien

???

von egbert (Gast)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht lesenswert
egbert schrieb:
> ' destination & radius (AA4...

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

von egbert (Gast)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
-1 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht lesenswert
siebert schrieb:
> Stephan G. schrieb:
>> sind doch überall ferien
>
> ???

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

von siebert (Gast)


Bewertung
0 lesenswert
nicht 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:

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

: Bearbeitet durch User
von siebert (Gast)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.