Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Tabellenbereich in Array einlesen

Tabellenbereich in Array einlesen
27.10.2004 13:57:40
Bex
Hallo erstmal,
ich hab folgendes Problem:
Ich möchte für Excel eine Funktion schreiben, bei der man in dem aufpoppenden Funktionsargumente-Fenster einen Datenbereich angeben kann,welcher dann in einen Array einlesen wird, um später mit diesen werten zu rechnen.
Habe es bislang nur durch explizite Angabe der Zellen im Quellcode geschafft.
Der Berech soll jedoch nicht vorher festgelegt sein, sondern durch den Anwender frei bestimmbar.
Über Ratschläge und Tips würde ich mich freuen.
Gruß Bex
Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Tabellenbereich in Array einlesen
Ramses
Hallo
das "aufpopende" Fenster kann ich dir nicht liefern, aber eine Möglichkeit zur Übergabe des Bereiches

Function mySum(Bereich As Range) As Double
MsgBox Application.WorksheetFunction.Sum(Bereich)
End Function

wird aufgerufen in der Zelle mit
=mySum(A1:B10)
Gruss Rainer
Anzeige
AW: Tabellenbereich in Array einlesen
Bex
Das Fenster kommt doch von alleine, wenn ich die Funktion später in der Tabelle aufrufe.
Bei deinem Code bekomm ich ein Popup mit einem Wert. ich will jedoch einen Wertebereich einlesen, um später mit einzelnen Werten aus diesem Bereich zu rechnen.
Entschuldigung
Ramses
Hallo
Ich bitte höflichst um Entschuldigung dass ich deine Frage zur Übergabe eines Zellbereiches an eine Funktion beantwortet habe :-(
Wenn jemand von Daten Einlesen in ein Array spricht, gehe ich davon aus, dass er die Grundbegriffe von VBA hinter sich hat.
Wie bereits im meinem Beitrag geschrieben, sollte dies nur als Beispiel dienen, wie ein Zell-Bereich an eine Funktion übergeben wird.
Ich dachte den Rest hättest du verstanden.
Sorry nochmals für die inadäquate Beantwortung deiner Frage-
Gruss Rainer
Anzeige
AW: Entschuldigung
Bex
Ich bin mir nich ganz sicher, ob nich ein wenig Ironie im letzten Beitrag enthalten ist. Natürlich bin ich über jeden Beitrag dankbar, habe mich wahrscheinlich nur etwas unglücklich ausgedrückt.
Ich beschäftige mich noch nicht lange mit VB, versuche nur Analogien zu anderen Sprchen zu finden und habe wohl dem falschen Programmteil zu viel Aufmerksamkeit gewidmet.
Range stellt den Datenbereich da, wenn ich mich nich irre
wie kann ich jedoch auf die Eingelesenen Daten zugreifen um nur einzelne zur Berechnung zu nutzen?
Bei einem Array würd ich mir das so vorstellen "a(1,2)" zum Beispiel
Natürlich bin ich für deinen Post dankbar und hoffe meine nachfrage wurde nicht falsch aufgefasst.

Anzeige
AW: Entschuldigung
Ramses
Hallo
hier mal ein kurzes Beispiel wie ein Bereich an ein Array übergeben wird:

Function give_Range(rngStr As String)
Dim rngStr As String
Dim myR As Range
Set myR = Range(rngStr)
Arr_Check myR.Rows.Count, myR.Columns.Count
End Function


Sub Arr_Check(a As Integer, b As Integer)
Dim myArr() As Variant
'Hier wird das Array dimensioniert
ReDim myArr(a, b)
End Sub

Aufgerufen wird das ganze in der Tabelle mit
=Give_Range(A1:B12)
Ich muss jetzt leider weg.
Bei Bedarf melde ich mich heute Abend, ober bei euch, morgen früh nochmals
Gruss Rainer
Anzeige
AW: Tabellenbereich in Array einlesen
Udo
Das macht der Funktionsassisistent schon, wenn die Function definiert ist.
Udo
;
Anzeige
Anzeige

Infobox / Tutorial

Tabellenbereich in Array einlesen


Schritt-für-Schritt-Anleitung

Um einen Tabellenbereich in ein Array in Excel VBA einzulesen, folge diesen Schritten:

  1. Öffne den VBA-Editor: Drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Erstelle ein neues Modul: Klicke mit der rechten Maustaste auf „VBAProject (DeinArbeitsblattName)“ und wähle „Einfügen“ > „Modul“.
  3. Füge den folgenden Code ein:

    Function Give_Range(rngStr As String) As Variant
       Dim myR As Range
       Set myR = Range(rngStr)
       Dim myArr() As Variant
       ReDim myArr(1 To myR.Rows.Count, 1 To myR.Columns.Count)
    
       Dim i As Integer, j As Integer
       For i = 1 To myR.Rows.Count
           For j = 1 To myR.Columns.Count
               myArr(i, j) = myR.Cells(i, j).Value
           Next j
       Next i
    
       Give_Range = myArr
    End Function
  4. Verwende die Funktion in der Tabelle: Gib in eine Zelle die folgende Formel ein:
    =Give_Range("A1:B10")

    Ersetze A1:B10 durch den gewünschten Bereich.


Häufige Fehler und Lösungen

  • Fehler: „Typ nicht übereinstimmend“

    • Lösung: Stelle sicher, dass der Range-String korrekt formatiert ist und auf existierende Zellen zeigt.
  • Fehler: „Array außerhalb des Bereichs“

    • Lösung: Überprüfe die Dimensionierung des Arrays. Achte darauf, dass die Indizes im richtigen Bereich liegen.

Alternative Methoden

  • Excel VBA intelligente Tabelle in Array einlesen: Verwende den Namen der Tabelle direkt in der Funktion, um Daten aus einer intelligenten Tabelle in ein Array zu laden.

    Function Read_Table_Data(tableName As String) As Variant
      Dim tbl As ListObject
      Set tbl = ActiveSheet.ListObjects(tableName)
      Dim myArr() As Variant
      myArr = tbl.DataBodyRange.Value
      Read_Table_Data = myArr
    End Function
  • Excel VBA Range in Array schreiben: Nutze die Value-Eigenschaft, um einen Bereich direkt in ein Array zu schreiben:

    Dim myArr As Variant
    myArr = Range("A1:B10").Value

Praktische Beispiele

  1. Summe eines Bereichs mithilfe eines Arrays

    Function Sum_Array(rngStr As String) As Double
       Dim myArr As Variant
       myArr = Give_Range(rngStr)
       Dim total As Double
       Dim i As Integer, j As Integer
    
       For i = LBound(myArr, 1) To UBound(myArr, 1)
           For j = LBound(myArr, 2) To UBound(myArr, 2)
               total = total + myArr(i, j)
           Next j
       Next i
    
       Sum_Array = total
    End Function
  2. Zugriff auf bestimmte Werte im Array

    Dim myArr As Variant
    myArr = Give_Range("A1:B10")
    MsgBox myArr(1, 1) ' Gibt den Wert in der Zelle A1 zurück

Tipps für Profis

  • Verwende Option Explicit am Anfang deines Moduls, um sicherzustellen, dass alle Variablen deklariert sind. Dies hilft, Fehler zu vermeiden.
  • Nutze Fehlerbehandlungsroutinen, um sicherzustellen, dass dein Code robust ist und unerwartete Fehler behandelt werden.
  • Experimentiere mit dynamischen Arrays, um die Flexibilität deiner Funktionen zu erhöhen.

FAQ: Häufige Fragen

1. Wie kann ich einen mehrdimensionalen Array in VBA erstellen?
Um einen mehrdimensionalen Array zu erstellen, kannst du die ReDim-Anweisung mit mehreren Dimensionen verwenden, z.B. ReDim myArr(1 To 3, 1 To 2).

2. Kann ich Daten aus einer Tabelle in ein Array einlesen?
Ja, du kannst die Daten aus einer intelligenten Tabelle mit der ListObject-Methode in ein Array einlesen, wie im Abschnitt „Alternative Methoden“ beschrieben.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige