
Estoy intentando crear una hoja de cálculo que recopile los datos de varias celdas.
Básicamente, quiero que la celda A1
refleje Sheet1
la Sheet2
misma información ingresada por el usuario sin eliminar la fórmula cuando se ingresan datos.
Necesito que los usuarios puedan ingresar datos en estas celdas, pero al usar =Sheet2!A1
o =Sheet1!A1
estoy creando una referencia circular y también dejando que los usuarios puedan eliminar la fórmula.
¿Alguien puede recomendar una forma de resolver esto?
Respuesta1
No puede ingresar datos en una celda que contiene una fórmula y al mismo tiempo conservar la fórmula.
Una solución es hacer que el usuario ingrese datos en una celda diferente y luego haga referencia a esa celda en A1
ambas hojas.
Respuesta2
No puedes hacerlo sin una Macro. Este código debería funcionar:
Private Sub Worksheet_Change(ByVal Target As Range)
therow = 1
thecolumn = 1
Dim wks As Worksheet
cellrow = Target.Row
cellcolumn = Target.Column
If (cellrow = therow And cellcolumn = thecolumn) Then
Set wks = ThisWorkbook.Worksheets("Sheet2")
wks.Cells(cellrow, cellcolumn) = Target.Value
End If
End Sub
Abra Macros con ALT+ F11, haga doble clicHoja1en el lado izquierdo y pega el código en el lado derecho. Este código se ejecuta en Sheet 1
, por lo que copia los cambios Sheet1 A1
en Sheet2 A1
.
Cada vez que hay un cambio en la hoja de trabajo se ejecuta esta macro. Comprueba si la celda cambiada está en la fila 1 y la columna 1 (celda A1) y luego copia el valor en la misma celda enHoja2.
Si desea comprobar los cambios deHoja2aHoja1además entonces:
- Haga doble clicHoja2en el lado izquierdo.
- Pega el código en el lado derecho.
- Cambie la línea
Set wks = ThisWorkbook.Worksheets("Sheet2")
para indicar el nuevo destino:Set wks = ThisWorkbook.Worksheets("Sheet1")
.
En este momento, esta macro usa las variablesLa filayla columnapara tomar la decisión de copiar el valor a la otra hoja de trabajo. Al principio se ponen a 1 en las líneas therow=1
y thecolumn=1
significa que estamos interesados en la celda.A1. Y además verificamos si la celda modificada coincide con estos valores en la línea If (cellrow = therow And cellcolumn = thecolumn) Then
.
Puedes modificar los valores para personalizarlo según tus necesidades, incluso comprobando una columna o fila completa, por ejemplo:
Cambiar la línea de verificación If (cellcolumn = thecolumn) Then
copiará los cambios que ocurran en la columna que tiene el mismo valor que la variable thecolumn
sin importar qué fila sea.
Otro ejemplo:
Cambiar la línea de verificación If (cellcolumn > thecolumn) Then
copiará los cambios que ocurran en cualquier columna mayor que el valor de cualquier fila, thecolumn
sin importar qué fila sea.