extraer de una celda números separados por ;

Solo consultas sobre macros y código VBA Excel.

Reglas del Foro
1. Antes de hacer tu pregunta intenta con el buscador de este foro (muchas preguntas ya fueron respondidas antes!)
2. Si haces una nueva pregunta, es muy recomendable que adjuntes el ejemplo Excel para poder comprenderla mejor!
3. Realiza tu pregunta de forma clara, explicando bien cada paso de lo que haces y tendrás más probabilidad de respuesta!
Compartir en:
     

extraer de una celda números separados por ;

Notapor kryocys » 12 Jun 2006 09:20

Hola,

necesito detectar si una celda contiene varios números separados por punto y coma y meterlos en variables.

El formato de la celda en estos casos es:
por ej: 1546;1547;1548

La celda puede contener dos, tres, cuatro... números.

La macro debe asignar (si la celda está activa) en este caso:
var1 = 1546
var2 = 1547
var2 = 1548

Gracias y un saludo,

kryocys
* Te recomendamos estos productos Excel: Manual de Macros | Manual de Funciones | Nuevas Funciones | ddTraDa
kryocys
Miembro Frecuente
Miembro Frecuente
 
Registrado: 05 Mar 2006 08:15

Re: extraer de una celda números separados por ;

Notapor kryocys » 12 Jun 2006 09:51

La idea es de una cadena extraer los números que contenga.
* Te recomendamos estos productos Excel: Manual de Macros | Manual de Funciones | Nuevas Funciones | ddTraDa
kryocys
Miembro Frecuente
Miembro Frecuente
 
Registrado: 05 Mar 2006 08:15

Re: extraer de una celda números separados por ;

Notapor KL » 12 Jun 2006 10:20

Hola kryocys,

Para eso esta la funcion SPLIT que almacena los elementos de una cadena de texto en base a un separador (si introdujo a partir de XL2000), prueba algo asi:

Código: Seleccionar todo
Sub test1()
    Matriz = Split("1546;1547;1548", ";")
    MsgBox "El segundo elemento es: " & Matriz(2)
End Sub


si quieres ver todos los elementos a la vez:

Código: Seleccionar todo
Sub test2()
    Dim msg As String
   
    Matriz = Split("1546;1547;1548", ";")
    For i = 0 To UBound(Matriz)
        msg = msg & Matriz(i) & Chr(13)
    Next i
    MsgBox msg
End Sub


si quieres introducir las variables (para uso repetido):

Código: Seleccionar todo
Sub test3()
    Dim Matriz As Variant
    Dim Separador As String
    Dim txt As String
    Dim msg As String
   
    txt = Range("A1")
    Separador = ";"
   
    Matriz = Split(txt, Separador)
    For i = 0 To UBound(Matriz)
        msg = msg & Matriz(i) & Chr(13)
    Next i
    MsgBox msg
End Sub


si quieres copiar la matriz obtenida a un rango de celdas:

Código: Seleccionar todo
Sub test4()
    Dim Matriz As Variant
    Dim Separador As String
    Dim txt As String
    Dim msg As String
   
    txt = "1546;1547;1548" 'txt = Range("A1")
    Separador = ";"
   
    Matriz = Split(txt, Separador)
   
    'Horizontal
    Range("E1").Resize(, UBound(Matriz) + 1) = Matriz
    'Vertical
    Range("C1").Resize(UBound(Matriz) + 1) = _
        Application.Transpose(Matriz)
End Sub
* Te recomendamos estos productos Excel: Manual de Macros | Manual de Funciones | Nuevas Funciones | ddTraDa
KL
Miembro Frecuente
Miembro Frecuente
 
Registrado: 18 Mar 2006 13:57
Ubicación: Madrid

Re: extraer de una celda números separados por ;

Notapor p@li » 12 Jun 2006 10:30

creo que te solucione el problema, fijate si esto te sirve
Saludos
No tiene los permisos requeridos para ver los archivos adjuntos a este mensaje.
* Te recomendamos estos productos Excel: Manual de Macros | Manual de Funciones | Nuevas Funciones | ddTraDa
Avatar de Usuario
p@li
Miembro Frecuente
Miembro Frecuente
 
Registrado: 04 Oct 2005 16:55
Ubicación: Argentina

Re: extraer de una celda números separados por ;

Notapor p@li » 12 Jun 2006 10:51

muy bueno KL
* Te recomendamos estos productos Excel: Manual de Macros | Manual de Funciones | Nuevas Funciones | ddTraDa
Avatar de Usuario
p@li
Miembro Frecuente
Miembro Frecuente
 
Registrado: 04 Oct 2005 16:55
Ubicación: Argentina

Re: extraer de una celda números separados por ;

Notapor KL » 12 Jun 2006 15:17

Hola chicos,

Fe de erratas. En el siguiente codigo el indice 2 no significa el segundo elemento de la matriz sino el tercero ya que la cuenta de los elementos empieza por 0:

KL";p="27314 escribió:
Código: Seleccionar todo
Sub test1()
    Matriz = Split("1546;1547;1548", ";")
    MsgBox "El segundo elemento es: " & Matriz(2)
End Sub


o sea deberia ser asi:

Código: Seleccionar todo
Sub test1()
    Matriz = Split("1546;1547;1548", ";")
    MsgBox "El segundo elemento es: " & Matriz(1)
End Sub
* Te recomendamos estos productos Excel: Manual de Macros | Manual de Funciones | Nuevas Funciones | ddTraDa
KL
Miembro Frecuente
Miembro Frecuente
 
Registrado: 18 Mar 2006 13:57
Ubicación: Madrid

Re: extraer de una celda números separados por ;

Notapor kryocys » 13 Jun 2006 09:51

Muchas gracias a los dos aunque con lo de p@li me ha sido suficiente.

Ahora otra pregunta relacionado con el tema. ¿Como puedo hacer en un Do While Not IsEmpty(ActiveCell) que la macro entre en las celdas si estas contienen un ; ?

Es decir:

If Active.Cell (contiene ; ) Then
.
.
.
.
End If

Gracias de nuevo
* Te recomendamos estos productos Excel: Manual de Macros | Manual de Funciones | Nuevas Funciones | ddTraDa
kryocys
Miembro Frecuente
Miembro Frecuente
 
Registrado: 05 Mar 2006 08:15

Re: extraer de una celda números separados por ;

Notapor p@li » 13 Jun 2006 11:37

Jajaja, disculpen aprete reportar sin querer, no se ni que significa eso

Bueno te respondo

mmm....
Tenes que usar instr(activecell,";")

ejemplo
cadena = "132;456"
numero = instr(cadena,";")

'numero va a ser = a la pocision de ";" dentro de la variable cadena, en este caso 4

'cambiemos esto
cadena = "123456"
numero = instr(cadena,";")

'numero va a ser = a 0, porque la cadena no contiene el caracter que buscamos

por lo tanto podemos hace algo asi
dim fila as lonf, columna as byte
fila = 1
columna = 2
do while not isempty(cells(fila,columna))
if instr(cells(fila,columna),";") then
'aca pones el codigo que quieras o llamar una funcion para extraer los numeros de factura, etc
end if
loop

saludos y exitos
* Te recomendamos estos productos Excel: Manual de Macros | Manual de Funciones | Nuevas Funciones | ddTraDa
Avatar de Usuario
p@li
Miembro Frecuente
Miembro Frecuente
 
Registrado: 04 Oct 2005 16:55
Ubicación: Argentina

Re: extraer de una celda números separados por ;

Notapor p@li » 13 Jun 2006 11:39

mejor usa este, porque los tipos de variable "lonf" no existen, jaja

por lo tanto podemos hace algo asi
dim fila as long, columna as byte
fila = 1
columna = 2
do while not isempty(cells(fila,columna))
if instr(cells(fila,columna),";") then
'aca pones el codigo que quieras o llamar una funcion para extraer los numeros de factura, etc
end if
loop
* Te recomendamos estos productos Excel: Manual de Macros | Manual de Funciones | Nuevas Funciones | ddTraDa
Avatar de Usuario
p@li
Miembro Frecuente
Miembro Frecuente
 
Registrado: 04 Oct 2005 16:55
Ubicación: Argentina

Re: extraer de una celda números separados por ;

Notapor kryocys » 14 Jun 2006 04:48

Muchas gracias P@li, me estás ayudando un montón :-)

Por último (creo), ¿es posible hacer que una macro se active cuando se abre una hoja pero únicamente la primera vez?

Ahora estoy usando esto:

Private Sub Worksheet_Activate()

Pero cada vez que paso de hoja y vuelvo a la anterior se me activa de nuevo la macro, y yo solo quiero que me haga el calculo una vez.

Gracias y un saludo,

kryocys
* Te recomendamos estos productos Excel: Manual de Macros | Manual de Funciones | Nuevas Funciones | ddTraDa
kryocys
Miembro Frecuente
Miembro Frecuente
 
Registrado: 05 Mar 2006 08:15

Re: extraer de una celda números separados por ;

Notapor p@li » 14 Jun 2006 13:20

lo unico que se me ocurre es esto
en el codigo de la hoja agrega una variable Public de tipo boolean, (true o false), mientras que la variable sea false realiza una instruccion, de lo contrario salimos de la sub. cuando se inicia por primera vez ejecuta la instruccion, y despues le da valor de true a la variable. por ejemplo:


Public Activada As Boolean
Private Sub Worksheet_Activate()
If Activada = True Then Exit Sub 'la primera vez siempre va a ser false
MsgBox "hola"


'al final de la instruccion
Activada = True
End Sub
* Te recomendamos estos productos Excel: Manual de Macros | Manual de Funciones | Nuevas Funciones | ddTraDa
Avatar de Usuario
p@li
Miembro Frecuente
Miembro Frecuente
 
Registrado: 04 Oct 2005 16:55
Ubicación: Argentina

Re: extraer de una celda números separados por ;

Notapor KL » 14 Jun 2006 13:47

Hola chicos,

Yo evitaria almacenar la variable en la memoria y usaria una celda, un comentario, un nombre definido o una propiedad de documento personalizada la cual limpiaria cada vez al abrir el libro (siempre y cuando no sea la hoja en cuestion.

Razones:

- evitar la perdida del valor de la variable en caso de fallos del codigo
- ahorrar la memoria
* Te recomendamos estos productos Excel: Manual de Macros | Manual de Funciones | Nuevas Funciones | ddTraDa
KL
Miembro Frecuente
Miembro Frecuente
 
Registrado: 18 Mar 2006 13:57
Ubicación: Madrid

Re: extraer de una celda números separados por ;

Notapor p@li » 14 Jun 2006 17:04

Es una buena idea.
1. Aunque mucha memoria no consume una variable de tipo boolean, si la fuera variant entonces te doy la razon.
2. Es una Lastima que las hojas y libros de excel no tengan la propiedad "tag", donde uno puede escribir un dato de tipo string a gusto, en ese caso se podria usar para estos, pero no existe tal propiedad.
3. Usar una celda, es un poco complicado para mi gusto, en los programas no tenes celdas para trabajar, no me gusta acostumbrarme a estas cosas, y peor usar una hoja para guardar las propiedades, en todo caso, usaria el registro de windows para almacenas datos que quiero recuperar en el futuro. Esa creo es la mejor opcion, pero es demasiado complicada para el uso que le estariamos dando en este caso.
4. Estaria bueno que nos des algun ejemplo.

saludos
* Te recomendamos estos productos Excel: Manual de Macros | Manual de Funciones | Nuevas Funciones | ddTraDa
Avatar de Usuario
p@li
Miembro Frecuente
Miembro Frecuente
 
Registrado: 04 Oct 2005 16:55
Ubicación: Argentina

Re: extraer de una celda números separados por ;

Notapor KL » 14 Jun 2006 17:22

p.ej. algo asi:

Código: Seleccionar todo
Sub test1()
    ThisWorkbook.Names.Add "Status", True, False
End Sub

Sub test2()
    ThisWorkbook.Names("Status").Value = True
End Sub

Sub test3()
    MsgBox Evaluate(ThisWorkbook.Names("Status").Value)
End Sub
* Te recomendamos estos productos Excel: Manual de Macros | Manual de Funciones | Nuevas Funciones | ddTraDa
KL
Miembro Frecuente
Miembro Frecuente
 
Registrado: 18 Mar 2006 13:57
Ubicación: Madrid

Re: extraer de una celda números separados por ;

Notapor KL » 14 Jun 2006 17:24

aunque al principio solo se vea un procedimiento, en realidad he puesto 3 o sea que es cuestion de expandir el cuadro de codigo.
* Te recomendamos estos productos Excel: Manual de Macros | Manual de Funciones | Nuevas Funciones | ddTraDa
KL
Miembro Frecuente
Miembro Frecuente
 
Registrado: 18 Mar 2006 13:57
Ubicación: Madrid


Compartir en:
     

  • Anuncio
Manual Excel avanzado

Volver a Macros

¿Quién está conectado?

Usuarios navegando por este Foro: Bing [Bot], Google [Bot], Inti y 7 invitados