Home |
Search |
Today's Posts |
|
#1
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
I have code that creates new worksheets using automation. I need to fill a
range in each worksheet with a formula after it is created. What I currently have looks like this: With xlapp.Workbooks(strXlsFile).Worksheets(sn(i)) lc = .Range("A1").SpecialCells(xlCellTypeLastCell).Colu mn lr = .Range("A1").SpecialCells(xlCellTypeLastCell).Row .Cells(1).EntireRow.HorizontalAlignment = xlCenter .Cells(1).EntireRow.Font.Bold = True .Range("B2:B" & lr).Formula = "=AVERAGE(E2:AH2)" End With The problem is I don't know how many columns I'm going to have. So "=AVERAGE(E2:AH2)" is just a guess - I could have more or less columns than "AH". I have the value of the last column expressed as an integer in the variable lc - but how do I use this? Is there a way to translate that value to the corresponding letter value? The formula has to be a sting value to fill down to the last column, correct? This may be a simple question, but I have not worked with Excel to much... Thanks. |
#2
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
Try something along these lines.
lcl = Left(Columns(lc).Address(0, 0), 2 + (lc < 27)) MyRange = "E2:" & lcl + "2" Range("a7") = "=Average(" & MyRange + ")" Donna |
#3
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
With xlapp.Workbooks(strXlsFile).Worksheets(sn(i))
lc = .Range("A1").SpecialCells(xlCellTypeLastCell).Colu mn lr = .Range("A1").SpecialCells(xlCellTypeLastCell).Row .Cells(1).EntireRow.HorizontalAlignment = xlCenter .Cells(1).EntireRow.Font.Bold = True .Range("B2",.Cells( lr,lc).Formula = "=AVERAGE(E2:AH2)" End With -- Regards, Tom Ogilvy "deko" wrote in message om... I have code that creates new worksheets using automation. I need to fill a range in each worksheet with a formula after it is created. What I currently have looks like this: With xlapp.Workbooks(strXlsFile).Worksheets(sn(i)) lc = .Range("A1").SpecialCells(xlCellTypeLastCell).Colu mn lr = .Range("A1").SpecialCells(xlCellTypeLastCell).Row .Cells(1).EntireRow.HorizontalAlignment = xlCenter .Cells(1).EntireRow.Font.Bold = True .Range("B2:B" & lr).Formula = "=AVERAGE(E2:AH2)" End With The problem is I don't know how many columns I'm going to have. So "=AVERAGE(E2:AH2)" is just a guess - I could have more or less columns than "AH". I have the value of the last column expressed as an integer in the variable lc - but how do I use this? Is there a way to translate that value to the corresponding letter value? The formula has to be a sting value to fill down to the last column, correct? This may be a simple question, but I have not worked with Excel to much... Thanks. |
#4
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
With xlapp.Workbooks(strXlsFile).Worksheets(sn(i))
lc = .Range("A1").SpecialCells(xlCellTypeLastCell).Colu mn lr = .Range("A1").SpecialCells(xlCellTypeLastCell).Row .Cells(1).EntireRow.HorizontalAlignment = xlCenter .Cells(1).EntireRow.Font.Bold = True .Range("B2",.Cells( lr,lc).Formula = "=AVERAGE(E2:AH2)" End With Actually, the range in which the formula is inserted is okay. It's the range specified within the formula that needs to be made dynamic. "=AVERAGE(E2:AH2)" specifies a fixed number of columns. I need a way to dynamically adjust up to AI or down to AG, for example. I'm wondering if I can use a different syntax within the formula - will the R1C1 syntax work? That way I could substitute the lc variable for AH. I suppose I could write a function that translates the lc value into a letter value... but I doubt that's the best soution. |
#5
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
"=AVERAGE(" & .Range(.Cells(2,5),.Cells(rw,col).Address & ")"
rw and col are integers. -- Regards, Tom Ogilvy "deko" wrote in message . com... With xlapp.Workbooks(strXlsFile).Worksheets(sn(i)) lc = .Range("A1").SpecialCells(xlCellTypeLastCell).Colu mn lr = .Range("A1").SpecialCells(xlCellTypeLastCell).Row .Cells(1).EntireRow.HorizontalAlignment = xlCenter .Cells(1).EntireRow.Font.Bold = True .Range("B2",.Cells( lr,lc).Formula = "=AVERAGE(E2:AH2)" End With Actually, the range in which the formula is inserted is okay. It's the range specified within the formula that needs to be made dynamic. "=AVERAGE(E2:AH2)" specifies a fixed number of columns. I need a way to dynamically adjust up to AI or down to AG, for example. I'm wondering if I can use a different syntax within the formula - will the R1C1 syntax work? That way I could substitute the lc variable for AH. I suppose I could write a function that translates the lc value into a letter value... but I doubt that's the best soution. |
#6
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
"=AVERAGE(" & .Range(.Cells(2,5),.Cells(rw,col).Address & ")"
This is close: With xlapp.Workbooks(strXlsFile).Worksheets(sn(i)) .Range("B2:B" & lr).Formula = "=AVERAGE(" & xlapp.Workbooks _ (strXlsFile).Worksheets(sn(i)).Range(xlapp.Workboo ks(strXlsFile).Worksheets _ (sn(i)).Cells(2, 5), xlapp.Workbooks(strXlsFile).Worksheets(sn(i)).Cell s _ (2, lc)).Address & ")" End with The problem is that the formula appearing in the worksheet looks like this: =AVERAGE($E$2:$AG$2) so the same formula is applied to the entire B column. The formula should be relative to the B cell: =AVERAGE(E2:AG2) =AVERAGE(E3:AG3) =AVERAGE(E4:AG4) and so on. Is there a way to make the range relative? |
#7
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
"=AVERAGE(" & .Range(.Cells(2,5),.Cells(rw,col).Address(0,0) & ")"
-- Regards, Tom Ogilvy "deko" wrote in message . com... "=AVERAGE(" & .Range(.Cells(2,5),.Cells(rw,col).Address & ")" This is close: With xlapp.Workbooks(strXlsFile).Worksheets(sn(i)) .Range("B2:B" & lr).Formula = "=AVERAGE(" & xlapp.Workbooks _ (strXlsFile).Worksheets(sn(i)).Range(xlapp.Workboo ks(strXlsFile).Worksheets _ (sn(i)).Cells(2, 5), xlapp.Workbooks(strXlsFile).Worksheets(sn(i)).Cell s _ (2, lc)).Address & ")" End with The problem is that the formula appearing in the worksheet looks like this: =AVERAGE($E$2:$AG$2) so the same formula is applied to the entire B column. The formula should be relative to the B cell: =AVERAGE(E2:AG2) =AVERAGE(E3:AG3) =AVERAGE(E4:AG4) and so on. Is there a way to make the range relative? |
Reply |
Thread Tools | Search this Thread |
Display Modes | |
|
|
![]() |
||||
Thread | Forum | |||
Fill range don't change the formula, Help was no help. Please hel | Excel Worksheet Functions | |||
I Need a Formula to Auto-fill Phone Numbers in a Range | Excel Worksheet Functions | |||
Formula to count the cells in a range that have a fill color. | Excel Discussion (Misc queries) | |||
Formula to count the cells in a range that have a fill color. | Excel Discussion (Misc queries) | |||
Excel - formula to calculate colored fill cells within a range wi. | Excel Worksheet Functions |