2014-09-11 73 views
8

Quindi sto lavorando a un progetto e sto cercando di ottenere il mio codice VBA per disegnare la formula che è nella cella M3 fino in fondo alla fine dei dati impostato. Sto usando la colonna L come base per determinare quale sia l'ultima cella con i dati in essa contenuti. La mia formula è un concatenato di due celle con una virgola di testo tra loro. Quindi, in excel mia formula è = G3 & "" & L3VBA per riempire la formula fino all'ultima riga nella colonna

voglio eccellere di ritirare questa formula così nella cella M4 sarebbe = G4 & "" & L4 cellulare M5 sarebbe = G5 & " , "& L5 e così via.

mio codice è simile:

Range("$M$3").Formula = Range("G3") & (",") & Range("L3") 

Dim Lastrow As Long 

Application.ScreenUpdating = False 

Lastrow = Range("L" & Rows.Count).End(xlUp).Row 
Range("M4").FormulaR1C1 = Range("G4") & (",") & Range("L4") 
Range("M4").AutoFill Destination:=Range("M4:M" & Lastrow) 
ActiveSheet.AutoFilterMode = False 
Application.ScreenUpdating = True 

La mia uscita è semplicemente tirando verso il basso i valori di testo da cellula M3 tutta la strada fino alla fine del set di dati. Ho cercato in giro per diverse ore cercando di trovare una soluzione, ma non riesco a trovarne una che sta cercando di realizzare ciò che sto cercando.

risposta

26

In realtà è un solo rivestimento. Non c'è bisogno di utilizzare .Autofill

Range("M3:M" & LastRow).Formula = "=G3&"",""&L3" 
+0

Grazie! Questo mi fa rimpiangere di non chiedere prima! :) – MatTtT

+0

Ciao Siddharth, sto cercando di usare la stessa formula nella mia macro, ma dando errore Range ("J5: J" e LastRow) .Formula = "= IFERROR (CERCA.VERT (IF (ISNUMBER (SEARCH" TOTAL " "", RC [-9])), TRIM (LEFT (RC [-9], TROVA ("" "", RC [-9] e "" ""))), "" ""), z43. xlsx!R2C2: R137C5,3, FALSE), "" "") " Errore tempo di esecuzione 1004: Intervallo di metodi oggetto _global non riuscito – nick

+0

Potete aiutarmi per favore quale potrebbe essere la ragione? Sono nuovo a questo excel e macro – nick

7

Per le persone con una domanda simile e trovare questo post (come ho fatto io); è possibile farlo anche senza lastrow se il set di dati è formattato come tabella.

Range("tablename[columnname]").Formula = "=G3&"",""&L3" 

Rendendolo un vero unico rivestimento. Spero che aiuti qualcuno!

6

In alternativa, è possibile utilizzare FillDown

Range("M3") = "=G3&"",""&L3": Range("M3:M" & LastRow).FillDown 
0

risposta Meraviglioso! Avevo bisogno di riempire le celle vuote in una colonna dove c'erano titoli nelle celle che si applicavano alle celle vuote sotto fino alla successiva cella del titolo.

Ho utilizzato il codice qui sopra per sviluppare il codice riportato sotto il mio foglio di esempio qui. Ho applicato questo codice come macro ctl/shft/D per eseguire rapidamente la colonna copiando i titoli.

--- Foglio elettronico di esempio ------------ Il titolo1 viene copiato nelle righe 2 e 3; Il titolo2 viene copiato nelle celle sotto di esso nelle righe 5 e 6. Dopo la seconda esecuzione della macro, la cella attiva è la cella Title3.

' **row** **Column1**  **Column2** 
' 1  Title1   Data 1 for title 1 
' 2     Data 2 for title 1 
' 3     Data 3 for title 1 
' 4  Title2   Data 1 for title 2 
' 5     Data 2 for title 2 
' 6     Data 3 for title 2 
' 7 Title 3   Data 1 for title 3 

codice CopyDown ----- ----------

Sub CopyDown() 
Dim Lastrow As String, FirstRow As String, strtCell As Range 
' 
' CopyDown Macro 
' Copies the current cell to any empty cells below it. 
' 
' Keyboard Shortcut: Ctrl+Shift+D 
' 
    Set strtCell = ActiveCell 
    FirstRow = strtCell.Address 
' Lastrow is address of the *list* of empty cells 
    Lastrow = Range(Selection, Selection.End(xlDown).Offset(-1, 0)).Address 
' MsgBox Lastrow 
    Range(Lastrow).Formula = strtCell.Formula 

    Range(Lastrow).End(xlDown).Select 
End Sub 
-1

Praticamente un novizio VBA. Quando ho visto "one-liner" l'ho preso alla lettera.

noti che si devono ancora Dim LastRow e scoprire che con il codice nel PO e poi si tratta di un one-liner.

Problemi correlati