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