vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#

https://www.vbarchiv.net
Rubrik: Excel   |   VB-Versionen: VBA10.11.04
2-dimensionales Datenfeld in Excel-Tabelle eintragen

Mit diesem Code lässt sich schnell und komfortabel ein 2-dimensionales Daten-Array in ein Excel-Tabellenblatt bringen.

Autor:   Friedrich GrathBewertung:  Views:  34.289 
ohne HomepageSystem:  Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11kein Beispielprojekt 

Mit nachfolgendem Code lässt sich unter Zuhilfenahme der Zwischenablage schnell und komfortabel ein 2-dimensionales Datenfeld (Array(x,y)) in ein Excel-Tabellenblatt bringen.

' WICHTIG:
' Microsoft Forms 2.0 Object Library unter Extras\Verweise setzen
 
' 2-dimensionales DATENFELD in EXCELTABELLE eintragen
' -------------------------------------------------------------------------
' 
' Sehr schnelles und komfortables Eintragen der Daten eines 2-dimensionalen
' Datenfeldes (Datenfeld(x,y)) in ein Excel-Tabellenblatt (horizontale oder
' vertikale Richtung) mit Hilfe der Zwischenablage.
' 
' Funktionsweise:
' Mit den Daten eines 2-dimensionalen Datenfeldes (Daten(x,y)) wird ein
' String gebildet und dann über die Zwischenablage in die Tabelle eingetragen.
' -------------------------------------------------------------------------
' 
' Aufruf: Call Daten_in_Tabelle(Datenfeld(), Startzelle, Tabelle, Richtung)
' 
' Datenfeld() ---> Datenfeld(x, y), Datentyp Variant
' Startzelle ---> linke oberste Zelle
' Tabelle ---> Exceltabelle, in die die Daten geschrieben werden
' 5 ---> fünftes Tabellenblatt
' keine Angabe ---> aktives Tabellenblatt
' Richtung 1 ---> Datenrichtung der 1. Dimension horizontal
' 0 ---> Datenrichtung der 1. Dimension vertikal
' keine Angabe ---> Datenrichtung der 1. Dimension vertikal
 
' Beispiele für den Aufruf:
' Call Daten_in_Tabelle(Daten(), "A1")
' Call Daten_in_Tabelle(Daten(), "C4", 2)
' Call Daten_in_Tabelle(Daten(), "B17", "Tabelle3")
' Call Daten_in_Tabelle(Daten(), "X19", "Tabelle3", 1)
' 
' -------------------------------------------------------------------------
 
Function Daten_in_Tabelle(FELD(), startZELLE As String, _
  Optional TABELLE As Variant, _
  Optional RICHTUNG As Byte = 0)
 
  Dim x&, y&, Zeile$, Matrix$, Clip As DataObject
 
  Set Clip = New DataObject
 
  On Error GoTo PROC_EXIT
  Application.ScreenUpdating = False
 
  ' wenn keine Tabellenbezeichnung, dann aktive Tabelle
  If IsMissing(TABELLE) Then TABELLE = ActiveSheet.Name
 
  ' In die Tabelle eintragen
  If RICHTUNG = 0 Then ' horizontale Datenrichtung
    For x = LBound(FELD(), 1) To UBound(FELD(), 1)
      Zeile = vbNullString
      For y = LBound(FELD(), 2) To UBound(FELD(), 2)
        If y <> UBound(FELD(), 2) Then
          Zeile = Zeile & FELD(x, y) & Chr(9)
        Else
          Zeile = Zeile & FELD(x, y)
        End If
      Next y
      Matrix = Matrix + Zeile + Chr(13)
    Next x
 
  Else ' vertikale Datenrichtung
    For y = LBound(FELD(), 2) To UBound(FELD(), 2)
      Zeile = vbNullString
      For x = LBound(FELD(), 1) To UBound(FELD(), 1)
        If x <> UBound(FELD(), 1) Then
          Zeile = Zeile & FELD(x, y) & Chr(9)
        Else
          Zeile = Zeile & FELD(x, y)
        End If
      Next x
      Matrix = Matrix + Zeile + Chr(13)
    Next y
  End If
 
  With Clip
    .Clear ' Zwischenablage löschen
    .SetText Matrix
    .PutInClipboard
  End With
 
  With Worksheets(TABELLE)
    ' Eingabebereich der Tabelle löschen
    x = Range(startZELLE).Row
    y = Range(startZELLE).Column
 
    If RICHTUNG = 0 Then
      .Range(Cells(x, y), _
        Cells(x + UBound(FELD(), 1) - LBound(FELD(), 1), _
        y + UBound(FELD(), 2) - LBound(FELD(), 2))).ClearContents
    Else
      .Range(Cells(x, y), _
        Cells(x + UBound(FELD(), 2) - LBound(FELD(), 2), _
        y + UBound(FELD(), 1) - LBound(FELD(), 1))).ClearContents
    End If
 
    .Range(startZELLE).Select
    .Paste
    .Range(startZELLE).Select
  End With
 
PROC_EXIT:
  Set Clip = Nothing
  Application.ScreenUpdating = True
End Function

Aufrufbeispiel:

Sub Aufruf()
  Dim datenArray(1 To 250, 1 To 200)
  Dim n&
 
  ' Füllen des Datenarrays (50000 Elemente)
  For x = 1 To 250
    For y = 1 To 200
      datenArray(x, y) = n
      n = n + 1
    Next y
  Next x
 
  ' Aufruf
  Call Daten_in_Tabelle(datenArray(), "A1", "Tabelle1", 0)
End Sub



Anzeige

Kauftipp Unser Dauerbrenner!Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv  Vol.6

Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
- nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten
- Symbol-Galerie mit mehr als 3.200 Icons im modernen Look
Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m.
 
 
Copyright ©2000-2024 vb@rchiv Dieter OtterAlle Rechte vorbehalten.


Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.