Me pueden decir por que este error de esta macro
Tengan buen día, mi pregunta es si alguno de ustedes puede ayudarme con esta macro vba se trata de convertir una partida de ajedrez que esta en notación algebraico y la quier ocombertir en notación coordenadas, me arroja error en la línea: columna_inicio = InStr(columnas, Mid(partida, i + 1, 1)), partida de ajedres esta en la celda A1, esta es la partida,
1. E4 e5 2. Nf3 Nc6 3. Nc3 Nf6 4. Bc4 Nxe4 5. Bxf7+ Kxf7 6. Nxe4 d5 7. Neg5+ Kg8 8. D4 h6 9. Nh3 Bg4 10. Dxe5 Nxe5 11. Nf4 c6 12. H3 Nxf3+ 13. Gxf3 Bf5 14. Be3 Bb4+ 15. C3 Ba5 16. Rg1 Qe8 17. Nxd5 Qf7 18. Nf4 Re8 19. Qb3 Bc7 20. Qxf7+ Kxf7 21. Nh5 g6 22. Ng3 Bxh3 23. O-O-O Rd8 24. Rxd8 Bxd8 25. Rh1 Bg2 26. Rxh6 Rxh6 27. Bxh6 Bxf3 28. Be3 1/2-1/2 0
La macro
Sub ConvertirNotacionAlgebraicaACoordenadas()
Dim columnas() As String
Dim filas() As String
Dim fila_inicio As Integer
Dim columna_inicio As Integer
Dim fila_fin As Integer
Dim columna_fin As Integer
Dim partida As String
Dim rango As Range
Dim celda As Range
' Definir las letras que representan las columnas del tablero
columnas = Split("a,b,c,d,e,f,g,h", ",")
' Definir las filas del tablero
filas = Split("8,7,6,5,4,3,2,1", ",")
Set rango = Range("A1:A100") ' Especifica el rango de celdas que contienen las partidas
For Each celda In rango ' Recorre todas las celdas del rango especificado
partida = celda.Value ' Obtener la partida de la celda actual
partida = Replace(partida, ".", "") ' Eliminar los números de jugada
Do While InStr(partida, " ") > 0 ' Eliminar espacios dobles
partida = Replace(partida, " ", " ")
Loop
For i = 1 To Len(partida) ' Recorrer cada caracter de la partida
If Mid(partida, i, 1) = " " And Mid(partida, i + 1, 1) Like "[a-h]" And Mid(partida, i + 2, 1) Like "[1-8]" Then
columna_inicio = InStr(columnas, Mid(partida, i + 1, 1)) ' Obtener la columna de inicio de la jugada
fila_inicio = InStr(filas, Mid(partida, i + 2, 1)) ' Obtener la fila de inicio de la jugada
columna_fin = InStr(columnas, Mid(partida, i + 4, 1)) ' Obtener la columna de destino de la jugada
fila_fin = InStr(filas, Mid(partida, i + 5, 1)) ' Obtener la fila de destino de la jugada
celda.Offset(0, 1).Value = celda.Offset(0, 1).Value & columnas(columna_inicio - 1) & filas(fila_inicio - 1) & columnas(columna_fin - 1) & filas(fila_fin - 1) & " "
End If
Next i
Next celda
End Sub
1 respuesta
Respuesta de Rafael Vera