通过几列Excel的单元格值来定义范围

我有一组超过1500行的数据分散成几列。 我想find每列中不同参数的最小值(每列有5个参数,我想从每个列中find最小值)。 我用macros的帮助写了一个VBA代码:

Sub MinimumValue() Selection.EntireRow.Insert , CopyOrigin:=xlFormatFromLeftOrAbove Range("A1").Select ActiveCell.FormulaR1C1 = "Parameter" Range("B1").Select ActiveCell.FormulaR1C1 = "300" Range("C1").Select ActiveCell.FormulaR1C1 = "700" Range("D1").Select ActiveCell.FormulaR1C1 = "1000" Range("E1").Select ActiveCell.FormulaR1C1 = "1200" Range("F1").Select ActiveCell.FormulaR1C1 = "1600" '' stating the parameters Dim s1 As String Dim s2 As String Dim s3 As String Dim s4 As String Dim s5 As String s1 = Range("H1") s2 = Range("I1") s3 = Range("J1") s4 = Range("K1") s5 = Range("L1") Sheets.Add After:=Sheets(Sheets.Count) Range("B1").Select ActiveCell.FormulaR1C1 = "=MIN(Sheet1!B1:s1)" Range("B2").Select ActiveCell.FormulaR1C1 = "=MIN(Sheet1!s1:s2)" Range("B3").Select ActiveCell.FormulaR1C1 = "=MIN(Sheet1!s2:s3)" Range("B4").Select ActiveCell.FormulaR1C1 = "=MIN(Sheet1!s3:s4)" Range("B5").Select ActiveCell.FormulaR1C1 = "=MIN(Sheet1!s4:s5)" Range("B1:B6").Select Selection.AutoFill Destination:=Range(Selection, Selection.End(xlToRight)), Type:=xlFillDefault Range("B1:J6").Select 

我想在另一个工作表上粘贴不同的最小值,并尝试声明一个string,该string转换为从单元本身获取值的单元格区域,但它告诉我#NONAME,因为它无法识别s1,s2,s3,和S4。 我尝试了一个公式与间接和连接,它的工作,但只有一列,我需要它的几列,这将需要大量的时间来手动重写它们。

感谢您的帮助

更多的是这样,利用variables。

 Sub MinimumValue() Dim sht As Worksheet Dim rng As Range Range("A1").Value = "Parameter" Range("B1").Value = "300" Range("C1").Value = "700" Range("D1").Value = "1000" Range("E1").Value = "1200" Range("F1").Value = "1600" Dim s1 As String Dim s2 As String Dim s3 As String Dim s4 As String Dim s5 As String s1 = "H1" s2 = "I1" s3 = "J1" s4 = "K1" s5 = "L1" Set sht = Worksheets.Add(After:=Sheets(Sheets.Count)) Set rng = sht.Range("B1:B6") With sht .Range("B1").Formula = "=MIN(Sheet1!B1:" & s1 & ")" .Range("B2").Formula = "=MIN(Sheet1!" & s1 & ":" & s2 & ")" .Range("B3").Formula = "=MIN(Sheet1!" & s2 & ":" & s3 & ")" .Range("B4").Formula = "=MIN(Sheet1!" & s3 & ":" & s4 & ")" .Range("B5").Formula = "=MIN(Sheet1!" & s4 & ":" & s5 & ")" End With rng.AutoFill Destination:=Range(rng, rng.End(xlToRight)) End Sub 

许多事情可以使你的代码更好,但要使其可行,试试这个:

 Option Explicit Sub MinimumValue() Dim s1 As String Dim s2 As String Dim s3 As String Dim s4 As String Dim s5 As String Selection.EntireRow.Insert , CopyOrigin:=xlFormatFromLeftOrAbove Range("A1").FormulaR1C1 = "Parameter" Range("B1").FormulaR1C1 = "300" Range("C1").FormulaR1C1 = "700" Range("D1").FormulaR1C1 = "1000" Range("E1").FormulaR1C1 = "1200" Range("F1").FormulaR1C1 = "1600" s1 = Range("H1") s2 = Range("I1") s3 = Range("J1") s4 = Range("K1") s5 = Range("L1") Sheets.Add After:=Sheets(Sheets.Count) Range("B1").Formula = "=MIN(Sheet1!B1:s1)" Range("B2").Formula = "=MIN(Sheet1!s1:s2)" Range("B3").Formula = "=MIN(Sheet1!s2:s3)" Range("B4").Formula = "=MIN(Sheet1!s3:s4)" Range("B5").Formula = "=MIN(Sheet1!s4:s5)" Range("B1:B6").Select Range("B1:B6").AutoFill Destination:=Range(Selection, Selection.End(xlToRight)), Type:=xlFillDefault Range("B1:J6").Select End Sub 

你应该使用ActiveCell.Formula = "=MIN(Sheet1!s1:s2)"而不是FormulaR1C1 。 FormulaR1C1的function是什么?

编辑:

要将s1s2s5用作地址,请将代码修改为以下内容:

 Range("B1").Formula = "=MIN(Sheet1!B1:" & s1 & ")" Range("B2").Formula = "=MIN(Sheet1!B1:" & s2 & ")"