Extraer coordenadas desde una celda cadena

kratk

New Member
Joined
Oct 25, 2010
Messages
19
Estimados:

Lo que necesito es extremadamente simple, pero en la práctica de hacer una macro o ponerlo en código se me ha hecho tremendamente difícil.
Desde AutoCad yo extraigo la siguiente información:

Command: ID Specify point: X = 5068.7648 Y = 224.3896 Z = -4063.3161

Esto me queda copiado completo en la celda A1 (excel 2003). Lo que yo necesito es que me queden los valores X,Y & Z en las columnas B1, C1 Y D1 (en cualquier celda si es necesario) lo único que necesito es extraer las coordenadas desde la única celda. Hasta el momento la única forma que he encontrado de separar la información es con el comando Text To Columns.... del menu Data, pero comprenderán que hacerlo para 150 puntos es bastante engorroso.

Desde ya agradezco cualquier comentario u ayuda que puedan brindarme.
 

Excel Facts

How to calculate loan payments in Excel?
Use the PMT function: =PMT(5%/12,60,-25000) is for a $25,000 loan, 5% annual interest, 60 month loan.
Hola,

con B como una columna de ayuda

(fórmulas en Inglés)

fórmula en B1
=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A1,"Command: ID Specify point: X = ","")," ",""),"=","")

fórmula en C1
=MID(B1,1,SEARCH("y",B1)-1)

fórmula en D1
=MID(B1,SEARCH("Y",B1)+1,SEARCH("Z",B1)-SEARCH("Y",B1)-1)

fórmula en E1
=RIGHT(B1,LEN(B1)-SEARCH("Z",B1))

copia a abajo B1, C1, D1 y E1

Espero que esto ayude

M.
 
Upvote 0
Marcelo:

Una vez mas muchisimas gracias, sirvió de maravilla (igual que cuando me ayudaste con lo de los formatos condicionales) Lo cual me lleva a otra consulta. Hay alguna una forma en la cual yo pueda separar la cantidad de datos a la mitad... te explico.

Las coordenadas que estoy extrayendo corresponden a inicio y final de una linea, es decir:

Command: ID Specify point: X = 5068.7648 Y = 224.3896 Z = -4063.3161 corresponde al inicio de una linea.

Yo identifico todos los inicios de linea y los copio al excel, esta sería la primera mitad de la información. Luego identifico todos los finales de linea y los copio al excel, mi segunda mitad. La idea es generar un archivo de las siguientes características:

inicio X | inicio Y | inicio Z | final X | final Y | final Z |

Para generar la tabla, la variable de entrada seria la cantidad de lineas a exportar, para que el excel me ordene la tabla que necesito.

Te lo agradecería bastante
 
Upvote 0
Kratk,

Si usted ya tiene las coordenadas de inicio y final en, por ejemplo, Hoja1 c1, d1, e1 (inicio) y i1, j1,k1 (final) creo que podría colocar en Hoja2
A2, B2, C2, D2, E2, F2 (headers na linea 1)

A2 = Hoja1!C1
B2 = Hoja1!D1
......
......

M.
 
Upvote 0
Marcelo:

Jajajaja, se que ese método es una alternativa, pero la idea es que la tabla se ordene sola ya que son muchos archivos los que tengo que tratar por día (alrededor de 7 archivos, cada uno con 300 lineas a exportar) y lo que yo estoy generando es una plataforma de comunicación con otro programa especializado (algo así como una traducción de archivo para que el otro programa entienda la información).

Si lo hiciera así concatenando los datos de la hoja 1 en la hoja 2 igual tendria que hacerlo manualmente, en cambio si defino una variable de entrada como por ejemplo N° de lineas, yo sabría que la desde la mitad de ese numero (N° de lineas) hacia abajo corresponderá a los finales de linea y luego seleccionar ese rango y moverlo quizás a la la columna D1, por ejemplo.

Yo entiendo de programación, el problema es que soy nuevo en el lenguaje excel y aun no entiendo toda la sintaxis que debo escribir.

Mi idea:

Sub nombre()

Dim N°lineas as Long, Narchivo As string

Narchivo=Application.InputBox_(Prompt:= "Ingrese nombre de archivo", Type:=2)
' Aqui no se que hacer con la variable de entrada, podrá ser algo así??
Narchivo = String(Narchivo)

Nlineas=Application.InputBox_(Prompt:= "Ingrese Numero de lineas", Type:=1)
If Narchivo < 1 then exit Sub
Nlineas = Cint(Nlineas)

Select.Range(Nlineas/2:Dn) porque son 3 dimensiones y Dn porque no sé la dimensión de la seleccion

Move.Range(Nlineas/2:Dn) to D1................ Me entiendes????

Para que el resultado sea este:

X inicio | Y inicio | Z inicio | X final | Y final | Z final | Nombre archivo | N° de linea
. . . . . . . .
. . . . . . . .
. . . . . . . .

Ojalá puedas ayudarme.

Kratk.
 
Last edited:
Upvote 0
Kratk,

En que colunas de Hoja1 eston los datos a serem copiados
A, B y C ?

Se lo entendi bién quiere copiar de Hoja1 para Hoja2 en el mismo archivo.

En Hoja2 para las colunas A B C D E F G H
X inicio | Y inicio | Z inicio | X final | Y final | Z final | Nombre archivo | N° de linea

Es eso?

M.
 
Upvote 0
Marcelo:

Si, lo entendiste bien. Lo que yo necesito es lo siguiente:

En la columna A exporto la siguiente información como cadena de texto:
Code:
                                              A1
| Command: ID Specify point: X = 5068.7648 Y = 224.3896 Z = -4063.3161 |
Luego yo separo las coordenadas de la cadena, como me lo indicaste tu en el posteo anterior

Code:
          A1                     B1          C1          D1
|Command:ID Specify point:...|5068.7648 | 224.3896 | -4063.3161 |

y eso lo traslado a la hoja 2 en el siguiente formato:

Code:
Hoja 2:

    A1          B1         C1         D1        E1         F1             G1              H1
 X inicio | Y inicio | Z inicio | X final | Y final | Z final | Nombre archivo | N° de linea
Entonces lo que necesito es que ingresando el N° de lineas se me genere, en la hoja 2 el formato que te copie arriba.
 
Last edited:
Upvote 0
Kratk,

Entonces non esta usando la coluna b como ayuda?

Los datos eston en B, C y D.

Si es asi prueba esta en un archivo de ensayo.

Code:
Sub Copia()
    Dim lastRow As Long, i As Long
    Dim nombreArquivo As String
    
    nombreArquivo = Application.InputBox("Ingrese con nombre de archivo", Type:=2)
    
    With ThisWorkbook.Sheets("Hoja1")
        lastRow = .Cells(.Rows.Count, "B").End(xlUp).Row
    End With
    
    ActiveSheet.Range("B1" & ":D" & lastRow / 2).Copy _
        Destination:=ThisWorkbook.Sheets("Hoja2").Range("A2")
    
    ActiveSheet.Range("B" & 1 + lastRow / 2 & ":D" & lastRow).Copy _
        Destination:=ThisWorkbook.Sheets("Hoja2").Range("D2")
        
    Sheets("Hoja2").Activate
    With ActiveSheet
        .Range("A1") = "X Inicio"
        .Range("B1") = "Y Inicio"
        .Range("C1") = "Z Inicio"
        .Range("D1") = "X Final"
        .Range("E1") = "Y Final"
        .Range("F1") = "Z Final"
        .Range("G1") = "Nombre Arquivo"
        .Range("H1") = "No de Linea"
    End With
    
    For i = 1 To lastRow / 2
        Range("G" & i + 1) = nombreArquivo
        Range("H" & i + 1) = i
    Next i
    
    Columns("G:H").AutoFit
    
    Application.CutCopyMode = False
End Sub

M.
 
Upvote 0
Marcelo:

Funcionó genial, era exactamente lo que buscaba. Ahora me puedo ahorrar una enormidad de tiempo. Una vez mas muchisimas gracias.

Esta é a segunda vez que você me ajuda, te agradeço de coração, você é muito gentil .... Muito obrigado
 
Upvote 0

Forum statistics

Threads
1,223,956
Messages
6,175,612
Members
452,660
Latest member
Zatman

We've detected that you are using an adblocker.

We have a great community of people providing Excel help here, but the hosting costs are enormous. You can help keep this site running by allowing ads on MrExcel.com.
Allow Ads at MrExcel

Which adblocker are you using?

Disable AdBlock

Follow these easy steps to disable AdBlock

1)Click on the icon in the browser’s toolbar.
2)Click on the icon in the browser’s toolbar.
2)Click on the "Pause on this site" option.
Go back

Disable AdBlock Plus

Follow these easy steps to disable AdBlock Plus

1)Click on the icon in the browser’s toolbar.
2)Click on the toggle to disable it for "mrexcel.com".
Go back

Disable uBlock Origin

Follow these easy steps to disable uBlock Origin

1)Click on the icon in the browser’s toolbar.
2)Click on the "Power" button.
3)Click on the "Refresh" button.
Go back

Disable uBlock

Follow these easy steps to disable uBlock

1)Click on the icon in the browser’s toolbar.
2)Click on the "Power" button.
3)Click on the "Refresh" button.
Go back
Back
Top