Mover cada celda después de la columna A en la nueva línea

Me gustaría exportar algunos datos en MySQL, sin embargo antes de que me gustaría dar formato a los datos. No estoy seguro de cómo explicarlo, así que hice algunas capturas de pantalla.

¿Cómo podría cambiar esto:

Introduzca aquí la descripción de la imagen

¿Dentro de esto?

1 23 1 5 1 20 2 3 2 5 3 67 3 24 3 653 3 43 

La cantidad de columnas a la derecha después de la Column B podría ser infinita. Pero tengo que poner todas las cosas en las Columns C,D,E...etc en una nueva línea en la Column B

Gracias

Esto creará una nueva hoja llamada "For MySQL" y colocará el resultado allí:

 Option Explicit Public Sub rowToCol() Const FC As Long = 1 'first col (ID) Const FR As Long = 2 'first row Const NEXT_COL As Long = FC + 1 Const DB_WS_NAME As String = "For MySQL" Dim ws As Worksheet, db As Worksheet, lr As Long, lc As Long, maxRow As Long Dim arr1 As Variant, arr2 As Variant, i As Long, j As Long, k As Long Set ws = Worksheets("Sheet1") 'main sheet ----------------------------------------- lr = ws.Cells(ws.UsedRange.Rows.Count + 1, FC).End(xlUp).Row lc = ws.UsedRange.Columns.Count If lr >= FR Then maxRow = (lr - (FR - 1)) * (lc - FC) + FR 'set result area Application.ScreenUpdating = False: Application.DisplayAlerts = False For Each db In Worksheets If db.Name = DB_WS_NAME Then db.Delete: Exit For End If Next Set db = Worksheets.Add(After:=ws): db.Name = DB_WS_NAME arr1 = ws.Range(ws.Cells(FR, FC), ws.Cells(lr, lc)).Value2 arr2 = db.Range(db.Cells(FR, FC), db.Cells(maxRow, NEXT_COL)).Value2 k = FR - 1 For i = FR - 1 To lr - (FR - 1) 'all rows For j = NEXT_COL To lc 'all cols If Len(arr1(i, j)) = 0 Then Exit For 'exit inner For (this row is done) arr2(k, FC) = arr1(i, FC) arr2(k, NEXT_COL) = arr1(i, j) k = k + 1 Next Next db.Range(db.Cells(FR, FC), db.Cells(maxRow, NEXT_COL)).Value2 = arr2 Application.DisplayAlerts = True: Application.ScreenUpdating = True End If End Sub 

Resultado:

Introduzca aquí la descripción de la imagen

Aquí hay una pequeña macro para exportar directamente sus datos a un archivo de texto sin necesidad de una hoja adicional

  • Cambie "D:\sql_import.txt" a la ruta de salida deseada
  • Cambie [B2:E4] al rango de entrada de Excel deseado

Código VBA

 Sub ExportForSql() Open "D:\sql_import.txt" For Output As #1 For Each cell In [B2:E4] If Not cell.Value = vbNullString Then Print #1, Cells(cell.Row, 1) & vbTab & cell.Value End If Next cell Close #1 End Sub 

O lo exporta de inmediato con la sintaxis SQL correcta mediante el uso de algo similar a este

 Print #1, "INSERT INTO " & Cells(cell.Row, 1) & " VALUES (" & cell.Value & ")" 

Resultados con sus datos de ejemplo

Introduzca aquí la descripción de la imagen Introduzca aquí la descripción de la imagen