Saltar al contenido

Separar letras de celda


kanll

Recommended Posts

publicado

Buenas tardes, aquí con un trabajo que no he conseguido realizar.

Tengo una fila con datos, de los cuales tengo que separar las letras en la columnas contiguas.

De este problema tengo que realizar lo siguiente:

Hoja 01

1) Tengo que separar solo las consonantes y unir las tres primeras consonantes de las letras separadas. Ejemplo:

CAMISA=CMS

Pero si existe otro valor igual le asigne una secuencia numérica.

(CAMISETA=CMS)), pero como se repite debería pasar a (CMS001) y sucesivamente.

Hoja 02

2) Separar letras y unir las tres primeras. Ejemplo:

CAMISA=CAM

Pero si existe otro valor igual le asigne una secuencia numérica. (CAMARA=CAM), pero como se repite debería pasar a (CAM001) y sucesivamente.

Hoja 03

3) Existen Valores con tres o mas palabras, debe quedar así:

CAMISA POLO 38=CAMP38

Ojala me haya explicado bien, por su valiosa ayuda y tiempo, Muchas Gracias.

Adjunto Archivo.

Separar Letras.xls

publicado

Wow... muy buen reto!

Mi solucion no requirio de programar simplemente usar funciones y listo! Hago uso de la funcion "ExtraerPatron" la cual me permite hacer uso de expresiones regualares en Excel sin necesidad de tener que programar, el unico requisito para tener diponible la funcion y ver como funciona mi solucion es descargarse el complemento que puse en el area de aportes, instalarlo y listo, cualquier problema de este tipo puede ser facilmente resuelto sin necesidad de programar!

aqui el link del complemento:

https://www.ayudaexcel.com/foro/threads/mx-utilities-el-complemento-de-excel-que-hace-el-trabajo-mas-facil.36961/

Saludos!

P.D.

Por cierto me he dado cuenta que puedo mejorar mi funcion de ExtraerPatron, en este caso me llevo mas pasos ya que debo poner un separador (en este caso "|") para que me devuelva todas las coincidencias. No se por que microsoft no permite usar expresiones regulares en la interfaz de usuario? en fin,,, no necesito esperar a que MS decida implementar dicha funcionalidad.

Separar Letras.xls

publicado

Buena la Solución de @digitalboy, pero en el trabajo me obligan a trabajar con VBA, entonces la solución que me brinda [uSER=46507]@Macro Antonio[/uSER] se adapta a lo que realizo, pero como se lo puedo realizar para que no tenga que ser fija la fila, es decir; puedo encontrarme en otra fila ya la operación ya no me la realiza.

Gracias.

Separar Letras01.xls

publicado

Buena la Solución de @digitalboy, pero en el trabajo me obligan a trabajar con VBA, entonces la solución que me brinda [uSER=46507]@Macro Antonio[/uSER] se adapta a lo que realizo

Es una pena... :( aun asi fue divertido e interesante poder probar la funcionalidad de mi complemento en este problema. Si logro disponer de algo de tiempo lo que resta del fin de semana y aun no cierran el tema... quizas pueda brinda la solucion empleando VBA!

Aun que la verdad creo que ya la solucion del colega MacroAntonio resolvera sin duda tu problema!

Saludos!

publicado

En mi intento lo estaba realizando, pero me demoraba ("Con decir que aun no terminaba con la tarea"), ahora veo que no se nada en comparación de los MAESTROS en VBA, la verdad estoy muy agradecido de formar parte de este foro aunque sea solo para hacer consultas.

Algún día, espero llegar a ser la mitad de los MAESTROS.

Muchas Gracias, por la ayuda.

Tema Solucionado.

publicado

Hola! aqui esta mi aportacion haciendo uso de la clase clsString... la verdad debo reconocer que me sorprendio la simplicidad con la que [uSER=46507]@Macro Antonio[/uSER] resolvió el problema (ya estuve estudiando el codigo, primero extrae los caracteres y luego hace el conteo,,, ja quien lo hubiera pensado). Me gusta esa simplicidad, he aprendido mas de lo pensaba de este tema!

Saludos!

Separar Letras.xls

publicado

[uSER=128107]@kanll[/uSER]

Aunque ya diste por solucionado el tema, con posterioridad has recibido una nueva respuesta.

¿Te sirvió la ayuda? ¿Cerramos el tema?

Saludos

publicado

Muy buenas amigos @digitalboy y [uSER=46507]@Macro Antonio[/uSER], la solución es muy útil a las necesidades que tengo, pero al ejecutar el código note;

1) Que no enumera desde el principio, es decir;

CAMISA=CAM

CAMISETA=CAM-001

Cuando debería se así;

CAMISA=CAM-001

CAMISETA=CAM-002

2) También me genera un nuevo libro cuando debería crear la secuencia al lado de donde se selecciona los datos y respetando los espacios vacíos. ya que el orden debe ser igual.

Muy agradecido por la ayuda, pero si es posible ayudar con esas observaciones....

Mientras, Voy a intentar generar una combinación de las dos respuestas.

Muchas Gracias y disculpen las molestias.

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.

  • 109 ¿Te parecen útiles los tips de las funciones? (ver tema completo)

    1. 1. ¿Te parecen útiles los tips de las funciones?


      • No
      • Ni me he fijado en ellos

  • Ayúdanos a mejorar la comunidad

    • Donaciones recibidas este mes: 0.00 EUR
      Objetivo: 130.00 EUR
  • Archivos

  • Estadísticas de descargas

    • Archivos
      188
    • Comentarios
      98
    • Revisiones
      29

    Más información sobre "Cambios en el Control Horario"
    Última descarga
    Por pegones1

    4    1

  • Crear macros Excel

  • Mensajes

    • Hola, veo que tienes 365, así que esta forma funcionará   Almacen.xlsx
    • Buenos días  @LeandroA espero estes bien Tengo un caso idéntico al planteado en la siguiente pregunta: Sin embargo, a diferencia de quien planteo originalmente la pregunta al correr el código no obtengo ningún resultado podrían ayudarme a resolver este inconveniente y que al hacer click en el Botón Guardar (CommandButton3) del Formulario RCS (frmrcs) el archivo pdf quede configurado con orientación vertical, márgenes superior, inferior, derecho e izquierdo = 1 y en página tamaño carta. Si acaso influye uso Microsoft Excel LTSC MSO (versión 2209 Compilación16.0.1.15629.20200) de 64 bits Mucho le sabre agradecer la ayuda que me pueda dar  RCS PRUEBA - copia.xlsm
    • @JSDJSDCon gusto mi estimado Para la opción 1: Sub Surtirhastadondealcanse() Dim ws As Worksheet Set ws = ThisWorkbook.Sheets(1) Dim filaInicio As Integer: filaInicio = 4 Dim filaFin As Integer: filaFin = 7 Dim colInventario As Integer: colInventario = 2 Dim colSolicitudesInicio As Integer: colSolicitudesInicio = 4 ' Columna C Dim colResultadoInicio As Integer: colResultadoInicio = 9 ' Columna I Dim colTotalSurtido As Integer: colTotalSurtido = 12 ' Columna L Dim colFinalInventario As Integer: colFinalInventario = 13 ' Columna M Dim numClientes As Integer: numClientes = 3 Dim fila As Integer, i As Integer For fila = filaInicio To filaFin Dim inventario As Double inventario = Val(ws.Cells(fila, colInventario).Value) Dim solicitudes(1 To 3) As Double Dim surtido(1 To 3) As Variant Dim totalSurtido As Double: totalSurtido = 0 ' Leer solicitudes For i = 1 To numClientes If IsNumeric(ws.Cells(fila, colSolicitudesInicio + i - 1).Value) Then solicitudes(i) = CDbl(ws.Cells(fila, colSolicitudesInicio + i - 1).Value) Else solicitudes(i) = 0 End If surtido(i) = "POR FALTA STOCK" Next i ' Surtir de acuerdo al inventario disponible For i = 1 To numClientes If solicitudes(i) > 0 Then If inventario >= solicitudes(i) Then surtido(i) = solicitudes(i) inventario = inventario - solicitudes(i) totalSurtido = totalSurtido + solicitudes(i) ElseIf inventario > 0 Then surtido(i) = inventario totalSurtido = totalSurtido + inventario inventario = 0 Else surtido(i) = "POR FALTA STOCK" End If End If Next i ' Escribir resultados en las columnas correspondientes para cada cliente For i = 1 To numClientes With ws.Cells(fila, colResultadoInicio + i - 1) If surtido(i) = "POR FALTA STOCK" Then .Value = surtido(i) .Font.Color = vbRed Else .Value = surtido(i) .Font.Color = vbBlack End If End With Next i ' Escribir total surtido y existencia final ws.Cells(fila, colTotalSurtido).Value = totalSurtido ws.Cells(fila, colFinalInventario).Value = inventario Next fila MsgBox "Resultado surtido cargado con éxito...", vbInformation End Sub Para la opción 2:   Sub surtirenpartesiguales() Dim ws As Worksheet Set ws = ThisWorkbook.Sheets(1) Dim filaInicio As Integer: filaInicio = 13 Dim filaFin As Integer: filaFin = 16 Dim colInventario As Integer: colInventario = 2 Dim colSolicitudesInicio As Integer: colSolicitudesInicio = 4 ' Columna C Dim colResultadoInicio As Integer: colResultadoInicio = 9 ' Columna I Dim colTotalSurtido As Integer: colTotalSurtido = 12 ' Columna L Dim colFinalInventario As Integer: colFinalInventario = 13 ' Columna M Dim numClientes As Integer: numClientes = 3 Dim fila As Integer, i As Integer For fila = filaInicio To filaFin Dim inventario As Double inventario = Val(ws.Cells(fila, colInventario).Value) Dim solicitudes(1 To 3) As Double Dim surtido(1 To 3) As Variant Dim totalSurtido As Double: totalSurtido = 0 Dim totalPedido As Double: totalPedido = 0 ' Leer solicitudes For i = 1 To numClientes If IsNumeric(ws.Cells(fila, colSolicitudesInicio + i - 1).Value) Then solicitudes(i) = CDbl(ws.Cells(fila, colSolicitudesInicio + i - 1).Value) totalPedido = totalPedido + solicitudes(i) Else solicitudes(i) = 0 End If surtido(i) = 0 Next i ' Si hay suficiente inventario, surtir lo que el cliente pide If inventario >= totalPedido Then For i = 1 To numClientes If solicitudes(i) > 0 And inventario >= solicitudes(i) Then surtido(i) = solicitudes(i) inventario = inventario - solicitudes(i) totalSurtido = totalSurtido + solicitudes(i) End If Next i Else ' Reparto base igualitario Dim baseSurtido As Long baseSurtido = Int(inventario / numClientes) For i = 1 To numClientes If solicitudes(i) > 0 Then If solicitudes(i) <= baseSurtido Then surtido(i) = solicitudes(i) inventario = inventario - solicitudes(i) totalSurtido = totalSurtido + solicitudes(i) Else surtido(i) = baseSurtido inventario = inventario - baseSurtido totalSurtido = totalSurtido + baseSurtido End If End If Next i ' Repartir sobrante restante uno por uno, respetando lo pedido Do While inventario > 0 For i = 1 To numClientes If surtido(i) < solicitudes(i) Then surtido(i) = surtido(i) + 1 totalSurtido = totalSurtido + 1 inventario = inventario - 1 If inventario = 0 Then Exit For End If Next i Loop End If ' Escribir resultados en las columnas correspondientes para cada cliente For i = 1 To numClientes With ws.Cells(fila, colResultadoInicio + i - 1) If surtido(i) = 0 Then .Value = "POR FALTA STOCK" .Font.Color = vbRed Else .Value = surtido(i) .Font.Color = vbBlack End If End With Next i ' Escribir total surtido y existencia final ws.Cells(fila, colTotalSurtido).Value = totalSurtido ws.Cells(fila, colFinalInventario).Value = inventario Next fila MsgBox "Resultado surtido cargado con éxito...", vbInformation End Sub Saludos, Diego
    • Buenos dias.  Estoy trabajando en una hoja para poder llevar un control de un pequeño almacén.  Tengo un pedido con varias líneas y "lotes" y necesito sacar las ubicaciones que coincidan con la referencia y lote que pone en el pedido. El problema viene cuando tengo la misma referencia y mismo lote en ubicaciones diferentes y necesito sacar la información en columnas diferentes. No se si  me he explicado bien, pero creo que con el ejemplo adjunto se entiende mejor. Agradecería mucho si me pudieran ayudar  Libro1.xlsx
    • Exelente solución mil gracias 
  • Visualizado recientemente

    • No hay usuarios registrado para ver esta página.
×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.