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