Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
944to948
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
944to948
944to948
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Array verwenden

Array verwenden
24.01.2008 17:29:07
Andi
Hallo zusammen,
ich habe folgendes Problem, ich möchte eigentlich von Excel wegkommen und mehr mit VB und VBA arbeiten. Das Problem was ich nun habe ist, dass ich nun auf die Zellen in den Arbeitsblättern verzichten muss. Das geht sicherlich nur mit Arrays. Ich habe aber noch einige Verständnisprobleme zu diesem Thema.
Mein eigentliches Ziel ist es, die Daten als Array auszulesen und im letzten Teil des unteren Programms wieder zu verwenden und ebenso als Array auszugeben. So wie das Programm abgebildet ist, funktioniert es super. Es geht halt „nur“ um die Ein- und Auslesen. Würde mich freuen, wenn mir jemand helfen würde.
Den Grundcode habe ich www.rhirte.de entnommen und für meine spezielle Anwendung verändert.
Kann man so etwas in der Art für Arrays verwenden und wie kann ich das einbinden (nur als Test geschrieben. Sicher etwas einfach, aber funktioniert)?

Private Sub CommandButton3_Click()
'Array fester Größe deklarieren
Dim myArray(1, 19) As Variant
myArray(1, 19) = Tabelle1.Range("A1:B20")
myArray(0, 19) = Tabelle1.Range("E1:E20")
Tabelle2.Range("A1:B20") = myArray(1, 19)
Tabelle2.Range("E1:E20") = myArray(0, 19)
End Sub


Viele Grüße
Andi
mein verwendeter Programmcode:
…………..
'Auslesen der in einer Excelmappe geöffneten Textdaten (nicht angegeben)
'und Suche der richtigen Zeilennummer (hier beginnt das Programm)
Sheets("Tabelle1").Cells.Find(What:="Nummer:", After:=ActiveCell, LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False, SearchFormat:=False).Activate
Sheets("Tabelle1").Cells.FindNext(After:=ActiveCell).Activate
n = ActiveCell.Row
Range("A" & n & ":Q" & n + 24 & "").Select 'Spalten sind nicht variabel, nur Zeilen
n = 0
Selection.Copy
Windows("Test.xls").Activate
Sheets("Tabelle1").Activate
Range("A1").Select
ActiveSheet.Paste
'Datei wird wieder geschlossen (nicht angegeben)
………………………………
'Programm geht jetzt in anderem Modul weiter und es werden die Messdaten zur Interpolation
'eingelesen ……. Berechnet ……. und im Range(B2 +Anzahl errechneter Werte) ausgegeben
Option Explicit
Const step = 0.025
Sub Mer()
Dim x(1000) As Double, y(1000) As Double
Dim n%
Sheets("Tabelle1").Select
n = 23
x(1) = Range("A2"): y(1) = Range("B2")
x(2) = Range("A3"): y(2) = Range("B3")
x(3) = Range("A4"): y(3) = Range("B4")
x(4) = Range("A5"): y(4) = Range("B5")
x(5) = Range("A6"): y(5) = Range("B6")
x(6) = Range("A7"): y(6) = Range("B7")
x(7) = Range("A8"): y(7) = Range("B8")
x(8) = Range("A9"): y(8) = Range("B9")
x(9) = Range("A10"): y(9) = Range("B10")
x(10) = Range("A11"): y(10) = Range("B11")
x(11) = Range("A12"): y(11) = Range("B12")
x(12) = Range("A13"): y(12) = Range("B13")
x(13) = Range("A14"): y(13) = Range("B14")
x(14) = Range("A15"): y(14) = Range("B15")
x(15) = Range("A16"): y(15) = Range("B16")
x(16) = Range("A17"): y(16) = Range("B17")
x(17) = Range("A18"): y(17) = Range("B18")
x(18) = Range("A19"): y(18) = Range("B19")
x(19) = Range("A20"): y(19) = Range("B20")
x(20) = Range("A21"): y(20) = Range("B21")
x(21) = Range("A22"): y(21) = Range("B22")
x(22) = Range("A23"): y(22) = Range("B23")
x(23) = Range("A24"): y(23) = Range("B24")
splines n, x, y
End Sub


Sub splines(n As Integer, x() As Double, y() As Double)
Dim a(1000) As Double, b(1000) As Double, c(1000) As Double, D(1000) As Double
Dim T(1000) As Double, Ta(1000) As Double, Tl(1000) As Double, Tu(1000) As Double, Tz(1000) As Double
Dim Value As Double
Dim i%, j%, m%, txt As String
For i = 1 To n
a(i) = y(i)
Next
m = n - 1
'Tridiagonale Matrix erstellen und lösen
For i = 1 To m
T(i) = x(i + 1) - x(i)
Next
For i = 2 To m
Ta(i) = 3 * (a(i + 1) * T(i - 1) - a(i) * (x(i + 1) - x(i - 1)) + a(i - 1) * T(i)) / (T(i) * T(i - 1))
Next
Tl(1) = 1: Tu(1) = 0: Tz(1) = 0
For i = 2 To m
Tl(i) = 2 * (x(i + 1) - x(i - 1)) - T(i - 1) * Tu(i - 1)
Tu(i) = T(i) / Tl(i)
Tz(i) = (Ta(i) - T(i - 1) * Tz(i - 1)) / Tl(i)
Next
Tl(n) = 1: Tz(n) = 0: c(n) = Tz(n)
For i = 1 To m
j = n - i
c(j) = Tz(j) - Tu(j) * c(j + 1)
b(j) = (a(j + 1) - a(j)) / T(j) - T(j) * (c(j + 1) + 2 * c(j)) / 3
D(j) = (c(j + 1) - c(j)) / (3 * T(j))
Next
'txt = "Splines mit " & n & " Stützstellen"
'zeig txt
ausgabe x, a, b, c, D, n
End Sub


Sub ausgabe(x() As Double, a() As Double, b() As Double, c() As Double, D() As Double, n%)
Dim i%, j%, dx As Double, txt As String, wort(1000) As Double, Value As Double
i = 1
j = 0
dx = x(1)
Do
Do
txt = txt & dx & " " & a(i) + b(i) * (dx - x(i)) + c(i) * (dx - x(i)) ^ 2 + D(i) * (dx - x(i)) ^ 3 & vbCrLf
wort(j) = a(i) + b(i) * (dx - x(i)) + c(i) * (dx - x(i)) ^ 2 + D(i) * (dx - x(i)) ^ 3
'Ausgabe der interpolierten Werte
Sheets("Spline").Select
Range("B" & 2 + j) = wort(j)
dx = dx + step
j = j + 1
Loop Until dx > x(i + 1)
i = i + 1
Loop Until i > n
End Sub


3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Array verwenden
24.01.2008 19:27:55
ransi
HAllo
Deine Berechnungen kann ich nicht nachvollziehen, darum nur ein paar Worte zum Ein-und Auslesen von Tabellenbereichen in ein Array:
Wenn du einen TAbellenbereich in ein Array Ein- und Auslesesen möchtest musst du das Array nicht dimensionieren. Überlass das Excel.
Beim Ausgeben musst du allerdings aufpassen.
Hier ist mal ein gaaaanz stark vereinfachter Beispielcode wie man sowas machen kann.
Option Explicit


Public Sub test()
Dim MyArray
Dim Z As Long
Dim S As Integer
'Einlesen
MyArray = Tabelle1.Range("A1:B20")
'Bearbeiten
For Z = 1 To UBound(MyArray, 1) '1te Dimension(Zeilen)
    For S = 1 To UBound(MyArray, 2) '2te Dimension(Spalten)
        MyArray(Z, S) = "Mach was mit " & MyArray(Z, S)
    Next
Next
'Ausgeben
Tabelle2.Range("A1").Resize(UBound(MyArray, 1), UBound(MyArray, 2)) = MyArray
End Sub

ransi

Anzeige
AW: Array verwenden
25.01.2008 09:27:00
Andi
hallo ransi,
sorry für die verspätete meldung, mein internet wollte gestern abend nicht so wie ich. Habe mir gerade deinen vorschlag angesehen, vielen dank erstmal dafür. Die arrays nicht zu dimensionieren ist besser, davon hatte ich gelesen. Ich versuch das mal bei mir einzubauen und wenns nicht klappt schreib ich noch mal :o)
viele grüße
Andi

AW: Array verwenden
25.01.2008 10:57:00
Andi
hallo ransi,
habe doch noch ein kleines problem. Ich weiß nicht so recht, wie ich die werte für x und y aus dem Array zuordnen kann. Hast du eine idee? Bisher hab ich´s ja ohne Array so gemacht:
x(1) = Range("A2"): y(1) = Range("B2")
x(2) = Range("A3"): y(2) = Range("B3")
x(3) = Range("A4"): y(3) = Range("B4")
x(4) = Range("A5"): y(4) = Range("B5")
x(5) = Range("A6"): y(5) = Range("B6")
Wie kann ich zum beispiel das Array an der stelle "A2" für x(1) auslesen?
Andi
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige