Sub input_output() Dim newrange_array() 'you will see this again later 'First let's create a range that is input 'One way to do this is to have the user select the range Dim rangein As Range Set rangein = Selection 'That's all you have to do... now whatever the user had selected 'before starting the program will be in the variable rangein 'I now have a range in the variable rangein 'I have no idea whether that range is a column 'row, square, or rectangle... 'but I can find out as follows Dim rows As Integer, cols As Integer 'set up two variables to hold number of rows and columns 'Now actually load up rows and cols with numerical values rows = rangein.rows.Count cols = rangein.Columns.Count 'Now let's change the values in rows and columns somewhat 'First we need a two-dimensional array to hold the values in ReDim newrange_array(rows, cols) 'Notice it is redim... which means redimension... this forces a 'dynamic array ... the only way this would work For i = 1 To rows For j = 1 To cols newrange_array(i, j) = rangein(i, j) / 2 Next Next 'now I would like to output the results somewhere Dim outsheet As String, outrange As String outsheet = "input_output" 'the name of the sheet where I want output outrange = "f18" 'the name of the starting cell where I want output Set rangeout = Worksheets(outsheet).Range(outrange) 'last line just creates the actual range For i = 1 To rows For j = 1 To cols rangeout(i, j) = newrange_array(i, j) Next Next 'I'm done End Sub