Wer regelmĂ€Ăig Daten aus Excel ins SQL-System ĂŒbertragen muss, weiĂ: Copy & Paste ist fehleranfĂ€llig – und spĂ€testens bei Automatisierungen keine Option mehr. Hier zeige ich Dir, wie Du mit einem VBA-Skript aus einem Tabellenblatt in Excel einen vollstĂ€ndigen SQL-Befehl erzeugst – bestehend aus CREATE TABLE und den passenden INSERT INTO-Statements.
đĄ Was das Makro kann:
- Liest eine Tabelle aus einem Excel-Blatt (z. B. ab Zelle A1 mit Ăberschriften).
- Wandelt die SpaltenĂŒberschriften in SQL-Spaltennamen um.
- Erzeugt einen
CREATE TABLE-Befehl. - Erzeugt fĂŒr jede Datenzeile einen
INSERT INTO-Befehl. - Gibt das fertige SQL-Skript in einer MsgBox oder in einer Textdatei aus.
đ§ Der VBA-Code
Sub ExportTableToSQL()
Dim ws As Worksheet
Dim lastRow As Long, lastCol As Long
Dim row As Long, col As Long
Dim tableName As String
Dim createSQL As String, insertSQL As String, fullSQL As String
Dim colNames() As String
Dim dataType As String
Dim cellValue As String
' Tabelle auswÀhlen
Set ws = ActiveSheet
tableName = "MeineTabelle" ' Alternativ: InputBox("Tabellenname eingeben")
' Letzte Zeile und Spalte ermitteln
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
lastCol = ws.Cells(1, ws.Columns.Count).End(xlToLeft).Column
' SpaltenĂŒberschriften lesen
ReDim colNames(1 To lastCol)
For col = 1 To lastCol
colNames(col) = ws.Cells(1, col).Value
Next col
' CREATE TABLE generieren
createSQL = "CREATE TABLE [" & tableName & "] (" & vbCrLf
For col = 1 To lastCol
' Datentyp vereinfachend auf NVARCHAR(MAX) gesetzt - kann erweitert werden
dataType = "NVARCHAR(MAX)"
createSQL = createSQL & " [" & colNames(col) & "] " & dataType
If col < lastCol Then createSQL = createSQL & "," & vbCrLf
Next col
createSQL = createSQL & vbCrLf & ");" & vbCrLf & vbCrLf
' INSERT INTO generieren
For row = 2 To lastRow
insertSQL = insertSQL & "INSERT INTO [" & tableName & "] ("
For col = 1 To lastCol
insertSQL = insertSQL & "[" & colNames(col) & "]"
If col < lastCol Then insertSQL = insertSQL & ", "
Next col
insertSQL = insertSQL & ") VALUES ("
For col = 1 To lastCol
cellValue = Replace(ws.Cells(row, col).Value, "'", "''")
insertSQL = insertSQL & "'" & cellValue & "'"
If col < lastCol Then insertSQL = insertSQL & ", "
Next col
insertSQL = insertSQL & ");" & vbCrLf
Next row
' Gesamten SQL-Text kombinieren
fullSQL = createSQL & insertSQL
' Ausgabe z.B. in MsgBox (besser: in Textdatei)
Dim fso As Object, txtFile As Object
Set fso = CreateObject("Scripting.FileSystemObject")
Set txtFile = fso.CreateTextFile(Application.DefaultFilePath & "\" & tableName & ".sql", True)
txtFile.Write fullSQL
txtFile.Close
MsgBox "SQL-Skript wurde gespeichert in: " & Application.DefaultFilePath & "\" & tableName & ".sql", vbInformation
End Sub
đ§Ș Beispiel
Wenn Dein Excel-Sheet so aussieht:
| ID | Name | Alter |
|---|---|---|
| 1 | Alice | 31 |
| 2 | Bob | 45 |
Dann erzeugt das Makro folgendes SQL:
CREATE TABLE [MeineTabelle] (
[ID] NVARCHAR(MAX),
[Name] NVARCHAR(MAX),
[Alter] NVARCHAR(MAX)
);
INSERT INTO [MeineTabelle] ([ID], [Name], [Alter]) VALUES ('1', 'Alice', '31');
INSERT INTO [MeineTabelle] ([ID], [Name], [Alter]) VALUES ('2', 'Bob', '45');
đ ïž Erweiterungen möglich
- Automatische Datentyp-Erkennung pro Spalte
- UnterstĂŒtzung fĂŒr
NULL-Werte - Export in verschiedene Datenbankformate (z. B. PostgreSQL, MySQL)
- Direkter Upload per ADO in eine Datenbank
đ„ Wenn Du öfter solche Exporte brauchst oder SQL-Skripte automatisiert generieren willst, lohnt sich die Integration in ein gröĂeres Tool oder die Nutzung der Power Platform. Ich helfe Dir gerne bei der Umsetzung.
đ Möchtest Du Deine Excel-Prozesse automatisieren und SQL-Workflows vereinfachen? Schreib mir – ich entwickle die passende Lösung fĂŒr Dein Unternehmen.