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.
No responses yet