En este grupo En todos

Foro de Excel

como poder dividir en hojas

Emmanuel
Economista unam
Escrito por Emmanuel Becerril Aguilar
el 25/03/2010

Tengo una base de datos la cual necesito dividir por hojas:

El problema es que necesito copiar por ejemplo la columna “AA: AH” en todos mis filas Mediante macros



Columna “A” hasta “G” y después los datos de AA hasta AH taba1 en hoja 1

Columna “H” hasta “N” y después los datos de AA hasta AH taba2 en hoja 2

Columna “O” hasta “U” y después los datos de AA hasta AH taba3 en hoja 3

Columna “V” hasta “Z” y después los datos de AA hasta AH taba4 en hoja 4

Agradecería que me pudieran AYUDAR

Armando Montes
Foro excel emagister
Escrito por Armando Montes
el 25/03/2010

Hola Emmanuel, este complemento lo hace facilmente:
http://www.ddtrada.cl/ejemplos/ddTraDa_Ejm023. Htm

Escrito por Emmanuel Becerril Aguilar
el 25/03/2010

Armando gracias por la respuesta pero el problema que tengo no es tanto la division en hojas sino que cada tabla se tiene que repetir los datos de la columna AA hasta AH de cada una de las filas yaque tengo una tabla general que abarca de A hasta AH

la macro que encontre tine como base de separacion es la columna C pero yo quisiera que se pudiera escoger mediante una lista de opciones o

la macro que encontre es la siguiente:


la macro es la siguiente:

Sub ExtractReps()
Dim ws1 As Worksheet
Dim wsNew As Worksheet
Dim rng As Range
Dim r As Integer
Dim c As Range
Set ws1 = Sheets("Sheet1")
Set rng = Range("Database")

'extract a list of Sales Reps
ws1. Columns("C:C"). Copy _
Destination:=Range("L1")
ws1. Columns("L:L"). AdvancedFilter _
Action:=xlFilterCopy, _
CopyToRange:=Range("J1"), Unique:=True
r = Cells(Rows. Count, "J"). End(xlUp). Row

'set up Criteria Area
Range("L1"). Value = Range("C1"). Value

For Each c In Range("J2:J" & r)
'add the rep name to the criteria area
ws1. Range("L2"). Value = c. Value
'add new sheet (if required)
'and run advanced filter
If WksExists(c. Value) Then
Sheets(c. Value). Cells. Clear
rng. AdvancedFilter Action:=xlFilterCopy, _
CriteriaRange:=Sheets("Sheet1"). Range("L1:L2"), _
CopyToRange:=Sheets(c. Value). Range("A1"), _
Unique:=False
Else
Set wsNew = Sheets. Add
wsNew. Move After:=Worksheets(Worksheets. Count)
wsNew. Name = c. Value
rng. AdvancedFilter Action:=xlFilterCopy, _
CriteriaRange:=Sheets("Sheet1"). Range("L1:L2"), _
CopyToRange:=wsNew. Range("A1"), _
Unique:=False
End If
Next
ws1. Select
ws1. Columns("J:L"). Delete
End Sub
Function WksExists(wksName As String) As Boolean
On Error Resume Next
WksExists = CBool(Len(Worksheets(wksName). Name) > 0)
End Function


espero y me puedas ayudar y muchas gracias por los aporte ya que con ellos yo estoy aprendiendo a modificar macros y espero despues crear las mias propias

Armando Montes
Foro excel emagister
Escrito por Armando Montes
el 26/03/2010

El complemento permite seleccionar rangos.

Escrito por Emmanuel Becerril Aguilar
el 26/03/2010

Gracias armando sigo intentando cuando encuentre la respuesta la pondre para facilitar la creacion de base de datos

Armando Montes
Foro excel emagister
Escrito por Armando Montes
el 27/03/2010

Emmanuel, te prepare un ejemplo sencillo que puedes descargar desde aqui:
http://grupos.emagister.com/documento/copiar_columnas_a_diferentes_hojas/6610-414851

Escrito por Emmanuel Becerril Aguilar
el 28/03/2010

Armando muchas gracia por tu ayuda y muchas gracias por la presentacion enviada, ya la empece a leer y me a ayudado mucho ahora lo que me causa inquietud o duda es lo siguinte: como adapto la opcion que me mandaste

Sub CopiarCols()
Range("A:F,Z:AG"). Copy Sheet1. Range("A1")
Range("G:L,Z:AG"). Copy Sheet2. Range("A1")
Range("M:R,Z:AG"). Copy Sheet3. Range("A1")
Range("R:X,Z:AG"). Copy Sheet4. Range("A1")

End Sub


con

Sub Macro105()
Dim Rng As Range, Hj As Worksheet
[a4:ah65536]. Delete xlShiftUp
Application. ScreenUpdating = False

'omitimos mensajes
Application. DisplayAlerts = False


For Each Hj In ActiveWorkbook. Worksheets
If Hj. Name = ActiveSheet. Name Then GoTo NextSheet
If Hj. AutoFilterMode Then Hj. AutoFilterMode = False

' rango para copiar informacion de los formatos a -ah

Set Rng = Range(Hj. [a18], Hj. [ah65536]. End(xlUp). Offset(, 1))

Hj. [a1:ah1]. AutoFilter
Hj. [a1:ah1]. AutoFilter Field:=1, Criteria1:="<>", Operator:=xlAnd, Criteria2:="<>"

Rng. Offset(1). Copy [a65536]. End(xlUp). Offset(4)

NextSheet:
Next Hj

Application. ScreenUpdating = True
Set Rng = Nothing
End Sub

y ya abusando de ti me surgio otra duda que es la siguiente:
en una hoja de calculo que tiene formulas por decir comuna A por columna B es igual a C en esas tres columnas no las puedeo proteger pero estan validados para que no pueda meter datos distintos que no sean los solicitados como puedo proteger para que no arrastren la celda no protegidas por que me causan error de referencia # ¡REF!

Armando Montes
Foro excel emagister
Escrito por Armando Montes
el 28/03/2010

Adaptaren que sentido? Creo que solo debes ajustar las referencias.
Lo ultimo no me queda claro.

Escrito por Emmanuel Becerril Aguilar
el 28/03/2010

Perdón por no explícame bien pero en lo que tengo duda es precisamente es en el rango a modificar Como son de selección discontinuas como reasigno el rango:

Original

Set Rng = Range(Hj. [A18], Hj. [AG65536]. End(xlUp). Offset(, 1))

Rng. Offset(1). Copy [A65536]. End(xlUp). Offset(4)


Propuesto pero no sé si sea lo correcto:

Necesito que empiece a copiar desde la fila 18 hasta el final de datos y que las columnas de la Z ala AG se repitan en las cuatro secciones


Set Rng = Range(Hj. [A18], Hj. [F65536] & uf & Hj. [Z18], Hj. [AG65536]. End(xlUp). Offset(, 1))

Set Rng = Range(Hj. [G18], Hj. [L65536] & uf & Hj. [Z18], Hj. [AG65536]. End(xlUp). Offset(, 1))

Set Rng = Range(Hj. [M18], Hj. [R65536] & uf & Hj. [Z18], Hj. [AG65536]. End(xlUp). Offset(, 1))

Set Rng = Range(Hj. [R18], Hj. [X65536] & uf & Hj. [Z18], Hj. [AG65536]. End(xlUp). Offset(, 1))

Rng. Offset(1). Copy [a65536]. End(xlUp). Offset(4)


Y la otra duda es si se puede bloquear o proteger un rango de datos para que no muevan los valores de lugar (NO remplazar celdas por otras)pero que a su vez se puedan introducir datos en las mismas celdas protegidas .


GRACIAS ARMANDO

Armando Montes
Foro excel emagister
Escrito por Armando Montes
el 28/03/2010

Es mas facil con lo que te mande:
Sub CopiarCols()
Range("A18:F100,Z18:AG100"). Copy Sheet1. Range("A1")
Range("G18:L100,Z18:AG100"). Copy Sheet2. Range("A1")
Range("M18:R100,Z18:AG100"). Copy Sheet3. Range("A1")
Range("R18:X100,Z18:AG100"). Copy Sheet4. Range("A1")
End Sub
Por supuesto en lugar del numero 100 puedes usar una variable como esto:
LR = Range("A" & Rows. Count). End(xlUp). Row
y quedaria asi:
Range("A18:F" &LR,"Z18:AG" &LR)...

Escrito por Emmanuel Becerril Aguilar
el 29/03/2010

ARMANDO MUCHAS GRACIAS


ya entendi como son las referecias a los rango y sigo con la otra duda,
ya que no e encontrado lo que te comentaba de como bloquear la celdas para que no la muevan de lugar por decir la celda A1 la muevan a A2 pero el problemas es A1 es un complemento de una formula C1 =A1*B1
y no es lo mismo C2=A1*B2 el resultado de que el usuario muevea la celda da el problema de referencia
o simplemente remplaza la celda probocando errores en el formulario

Armando Montes
Foro excel emagister
Escrito por Armando Montes
el 29/03/2010

Las celdas no se mueven, las referencias si.
Para dejar fijas estas se usa $ y se vuelven absolutas, por ej. $A$1, ve estos links:
http://www.aulaclic.es/excel2002/a_13_2_1. Htm
http://grupos.emagister.com/documento/excelvigo/6610-269792

Escrito por Emmanuel Becerril Aguilar
el 29/03/2010


ARMANDO GRACIAS POR LOS EXCELENTES MATERIALES

que me has mandado.

PERDON que sigo de necio pero necesito evitar lo que se muestra en la imagen que subi haber si me puedes ayudar ya que me urge en otros foros me dicen que no se puede pero evisto que tu pusiste una macro que protege la informacion segun criterios me imagino que seria algo asi, pero al evento del mouse clip sostenido pero no lo encuertro la forma.

http://grupos.emagister.com/imagen/como_evitar_remplazar_celdas/6610-416684

Armando Montes
Foro excel emagister
Escrito por Armando Montes
el 29/03/2010

Segun entiendo lo que quieres es evitar el reemplazo del contenido, protegerlo, si es asi esta es una forma de lograrlo, sin macros:
http://support.microsoft.com/kb/550840/es

Escrito por Emmanuel Becerril Aguilar
el 29/03/2010

ARMANDO

perdon que siga de necio pero mi hoja y el libro ya los tengo protegida el problema es que tengo que dejar varios rango sin proteger por que los usuarios tienen que meter informacion, el problemas es como evitar que por descuido o apropocito remplacen las celdas.

Armando Montes
Foro excel emagister
Escrito por Armando Montes
el 29/03/2010

Si deben meter info no pueden o no deben protegerse, a no ser que se protejan despues de meter algo o usando validacion, no me queda clara la situacion.

Escrito por Emmanuel Becerril Aguilar
el 30/03/2010

Bueno todas la columnas tienen validacion ya sea por valores o listas de infomacion y otras por formulas.

precisamente ese es el dilema que tengo no puedo proteger las celdas porque se va a introduccir infomacion

de plano no se puede proteger? Paque no remplacen las celdas? La otra solucion que pense es dehabilitar el evento de mouse?

pero lo busque y no encuentro como hacerlo.



ARMANDO MUCHAS GRACIAS POR EL TIEMPO DE DICADO A ACLARAR MIS DUDAS.

Armando Montes
Foro excel emagister
Escrito por Armando Montes
el 30/03/2010

Este codigo protege/bloquea las celdas de la hoja y rango especificado despues de llenarlas:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim MyRange As Range
Set MyRange = Intersect(Range("A1:D100"), Target)
If Not MyRange Is Nothing Then
Sheets("Sheet1"). Unprotect password:="hello"
MyRange. Locked = True
Sheets("Sheet1"). Protect password:="hello"
End If
End Sub
Ajusta las referencias: ("Sheet1"), ("A1:D100") y el password

Escrito por Emmanuel Becerril Aguilar
el 30/03/2010

ARMANDO GRACIAS por todos los códigos que me has mandado me han ayudado para esclarecer mis dudas y a buscar más información de manera correcta en términos o vocablo que no manejaba.

De plano para evitar ese tipo de error se tiene que utilizar un formulario para captura para evitar esos errores verdad?


Armando Montes
Foro excel emagister
Escrito por Armando Montes
el 30/03/2010

No es indispensable, generalmente prefiero usar plantillas porque me resulta mas comodo modificarlas.
Tan pronto lo consideres conveniente cerrare este debate.