Excel - Necesito macro para añadir columnas en otra hoja

 
Vista:
sin imagen de perfil

Necesito macro para añadir columnas en otra hoja

Publicado por Ser (4 intervenciones) el 22/02/2023 07:39:18
Hola a todos.

Soy nuevo en esto del excel y necesitaría una macro para añadir una columna que cambio a diario a otra hoja para que me quede un histórico con el día en la primera celda de la columna. He conseguido copiar la columna, e incluso poner la fecha en la primera celda, pero no sé cómo hacer para que las siguientes columnas se pongan a continuación. No sé si me explico. No tengo ni idea de esto, pero necesito hacer esta por un tema de salud.

Os copio el código para ver si me podéis ayudar. Muchas gracias.

Sub CopiarCeldas()

'Definir objetos a utilizar
Dim wsOrigen As Excel.Worksheet, _
wsDestino As Excel.Worksheet, _
rngOrigen As Excel.Range, _
rngDestino As Excel.Range
Dim NuevaColumna As Integer

'Indicar las hojas de origen y destino
Set wsOrigen = Worksheets("Calculator")
Set wsDestino = Worksheets("Log")

'Indicar la celda de origen y destino
Const celdaOrigen = "G4:G56"
Const celdaDestino = "A2"

'Inicializar los rangos de origen y destino
Set rngOrigen = wsOrigen.Range(celdaOrigen)
Set rngDestino = wsDestino.Range(celdaDestino)

'Seleccionar rango de celdas origen
rngOrigen.Select
Selection.Copy

'Pegar datos en celda destino
rngDestino.PasteSpecial xlPasteValues

With ThisWorkbook.Sheets("Log")

'------ MI DUDA----: Necesito obtener variables para .cells(1,1) para que cada vez añada en una columna nueva
.Cells(1, 1).Value = Date
End With

Application.CutCopyMode = False


End Sub
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Antoni Masana
Val: 4.908
Oro
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Necesito macro para añadir columnas en otra hoja

Publicado por Antoni Masana (2477 intervenciones) el 22/02/2023 14:46:57
Como no se exactamente que haces voy a suponer algunas cosas.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
Sub CopiarCeldas()
    'Definir objetos a utilizar
    Dim wsOrigen As Excel.Worksheet, _
    wsDestino As Excel.Worksheet, _
    rngOrigen As Excel.Range, _
    rngDestino As Excel.Range
    Dim NuevaColumna As Integer
 
    'Indicar las hojas de origen y destino
    Set wsOrigen = Worksheets("Calculator")
    Set wsDestino = Worksheets("Log")
 
    ' ---&--- Busca la primera columna vacia
    Columna=2
    While wsDestino.Cells(1, Columna) <> Empty
        Columna = Columna + 2
    Wend
    'Indicar la celda de origen y destino
    Const celdaOrigen = "G4:G56"
    Const celdaDestino = "A" & Columna
 
    'Inicializar los rangos de origen y destino
    Set rngOrigen = wsOrigen.Range(celdaOrigen)
    Set rngDestino = wsDestino.Range(celdaDestino)
 
    'Seleccionar rango de celdas origen
    rngOrigen.Select
    Selection.Copy
 
    'Pegar datos en celda destino
    rngDestino.PasteSpecial xlPasteValues
 
    With ThisWorkbook.Sheets("Log")
 
        '------ MI DUDA----: Necesito obtener variables para .cells(1,1) para que cada vez añada en una columna nueva
        .Cells(1, Columna).Value = Date
    End With
 
    Application.CutCopyMode = False
End Sub

Te pongo en negrita los cambios realizados.
Como no lo puedo probar no se si se me ha colado un gazapo.
La idea es buscar la primera columna libre antes de copiar y utilizar la variable para posicionarse en la columna.

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Necesito macro para añadir columnas en otra hoja

Publicado por Ser (4 intervenciones) el 22/02/2023 17:19:22
Muchas gracias Antoni.

Has entendido perfectamente, pero me da un error de que es necesaria una expresión de constante. Adjunto el Excel. Es un tema de cálculo de proteínas y calorías. Necesito tener un histórico de lo que relleno de la columna verde de la hoja calculator , en la hoja log, con la fecha cada día porque tengo que seguir un tratamiento comiendo unos mínimos. Es la única forma que se me ocurre de hacerlo, porque las apps son demasiado generales.


Muchas gracias de nuevo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 4.908
Oro
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Necesito macro para añadir columnas en otra hoja

Publicado por Antoni Masana (2477 intervenciones) el 22/02/2023 20:03:35
He realizado unos csmbios en la macro y en la hoja Log

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
Sub CopiarCeldas()
    'Definir objetos a utilizar
    Dim wsOrigen As Excel.Worksheet, _
    wsDestino As Excel.Worksheet, _
    rngOrigen As Excel.Range, _
    rngDestino As Excel.Range
    Dim NuevaColumna As Integer
 
    'Indicar las hojas de origen y destino
    Set wsOrigen = Worksheets("Calculator")
    Set wsDestino = Worksheets("Log")
 
    ' ---&--- Busca la primera columna vacia
    Columna = 2
    While wsDestino.Cells(1, Columna) <> Empty And wsDestino.Cells(1, Columna) <> Date
        Columna = Columna + 1
    Wend
    'Indicar la celda de origen y destino
    Const celdaOrigen = "G4:G56"
 
    'Inicializar los rangos de origen y destino
    Set rngOrigen = wsOrigen.Range(celdaOrigen)
    Set rngDestino = wsDestino.Cells(2, Columna)
 
    'Seleccionar rango de celdas origen
    rngOrigen.Select
    Selection.Copy
 
    'Pegar datos en celda destino
    rngDestino.PasteSpecial xlPasteValues
 
    With ThisWorkbook.Sheets("Log")
         '------ MI DUDA----: Necesito obtener variables para .cells(1,1) para que cada vez añada en una columna nueva
        .Cells(1, Columna).Value = Date
    End With
 
    Application.CutCopyMode = False
End Sub

En el While he añadido una condición para que no repita la columna con la misma fecha:

1
While wsDestino.Cells(1, Columna) <> Empty And wsDestino.Cells(1, Columna) <> Date

Pero si se ha de poder repetir dcambialo por esto:

1
While wsDestino.Cells(1, Columna) <> Empty

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Necesito macro para añadir columnas en otra hoja

Publicado por Ser (4 intervenciones) el 23/02/2023 06:45:11
Muchas, muchas gracias Matías. Era lo que buscaba. Con esto creo que podré ir haciendo el histórico que busco. Un placer que haya gente como tú

. Buen día
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Necesito macro para añadir columnas en otra hoja

Publicado por Ser (4 intervenciones) el 23/02/2023 15:05:41
Otra cosilla que se me olvidaba. Intengo luego añadir 2 celdas sueltas, pero me da error 1004, ¿sabes por qué? Lo pongo en negrita más abajo. Gracias

Sub CopiarCeldas()
'Definir objetos a utilizar
Dim wsOrigen As Excel.Worksheet, _
wsDestino As Excel.Worksheet, _
rngOrigen As Excel.Range, _
rngDestino As Excel.Range
Dim Columna As Integer
Dim Calorias As Integer
Dim Proteinas As Integer
Calorias = 0
Proteinas = 0

'Indicar las hojas de origen y destino
Set wsOrigen = Worksheets("Calculator")
Set wsDestino = Worksheets("Log")

' ---&--- Busca la primera columna vacia y calcular Columna
Columna = 2
While wsDestino.Cells(1, Columna) <> Empty And wsDestino.Cells(1, Columna) <> Date
Columna = Columna + 1
Wend
'Indicar la celda de origen y destino
Const celdaOrigen = "G4:G58"

'Inicializar los rangos de origen y destino
Set rngOrigen = wsOrigen.Range(celdaOrigen)
Set rngDestino = wsDestino.Cells(2, Columna)

'Seleccionar rango de celdas origen
rngOrigen.Select
Selection.Copy

'Pegar datos en celda destino
rngDestino.PasteSpecial xlPasteValues

With ThisWorkbook.Sheets("Log")

'------ MI DUDA----: Necesito obtener variables para .cells(1,1) para que cada vez añada en una columna nueva
.Cells(1, Columna).Value = Date
'.Cells(58, Calorias).Value = Date
'.Cells(59, Proteinas).Value = Date
End With
Application.CutCopyMode = False


' Copiamos la celda de Proteinas y calorias

Range("H60").Copy
wsDestino.Range("B56").PasteSpecial x1PasteAll

Application.CutCopyMode = False

Range("J60").Copy
wsDestino.Range("B57").PasteSpecial x1PasteAll



Application.CutCopyMode = False
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar