I just wrote this up. I am not sure how well it will work with other tables out there but this is set up for cells that aren't merged. It cycles through the specified start column and stops at the specified stop column and then goes down through the rows until it finds a cell in the first column that is blank. The output is placed on a new sheet in the first cell.
There's no error handling for the input boxes so if you enter something out of range or just random characters, it won't work.
Sub CreateBBTable()
Dim startColumn As String, stopColumn As String, startRow As Integer
Dim curCol As Integer, curRow As Integer
Dim outputStr As String
Const sctr = "[center]"
Const ectr = "[/center]"
Const sright = "[right]"
Const eright = "[/right]"
startColumn = InputBox("Enter the column to start at (A - Z)", "Start Column")
stopColumn = InputBox("Enter the column to stop at (A - Z)", "Stop Column")
startRow = InputBox("Enter the row to start at (1 and up)", "Start Row")
curRow = startRow
outputStr = "[table]"
Do Until Range(startColumn & curRow) = ""
outputStr = outputStr & "[tr]"
curCol = Asc(startColumn)
Do Until curCol > Asc(stopColumn)
outputStr = outputStr & "[td]"
Select Case Range(Chr(curCol) & curRow).HorizontalAlignment
Case xlCenter
outputStr = outputStr & sctr & Range(Chr(curCol) & curRow) & ectr
Case xlRight
outputStr = outputStr & sright & Range(Chr(curCol) & curRow) & eright
Case Else
outputStr = outputStr & Range(Chr(curCol) & curRow)
End Select
outputStr = outputStr & "[/td]"
curCol = curCol + 1
Loop
outputStr = outputStr & "[/tr]" & vbCrLf
curRow = curRow + 1
Loop
outputStr = outputStr & "[/table]"
Sheets.Add After:=Sheets(Sheets.count)
Sheets(Sheets.count).Select
Range("A1") = outputStr
End Sub
edit: Edited one of the declarations