Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Convert an entire range to uppercase without looping through all the cells

right now I'm using the following code to convert a list of ticker symbols from lowercase to upper case letters:

Dim Tickers As String
Dim n As Integer
For n = 2 To Last
    Tickers = UCase(W.Cells(n, 1).Value)
    W.Cells(n, 1).Value = Tickers
Next n

Is there a method I can use to convert the whole range in one line? something like:

Range("A1:A20").convertouppercasesomehow
like image 825
DBWeinstein Avatar asked Nov 14 '13 18:11

DBWeinstein


People also ask

How do I convert multiple cells to uppercase in Excel?

Tip: Use the formula =UPPER(A1) for all UPPERCASE; =LOWER(A1) for all lowercase.

How do you automatically convert to uppercase in Excel?

Use =UPPER(A2) in cases where you need to convert text to uppercase, replacing A2 with the appropriate cell reference. Now, fill down the formula in the new column.

How do you capitalize all letters in Excel VBA?

In Excel worksheet, the UPPER function converts all the lowercase characters of a text string into uppercase. There is a similar function in that also does the same – the UCase function. The VBA UCase function takes a string as the input and converts all the lower case characters into upper case.


2 Answers

Is there a method I can use to convert the whole range in one line?

Yes you can convert without looping. Try this

Sub Sample()
    [A1:A20] = [INDEX(UPPER(A1:A20),)]
End Sub

Alternatively, using a variable range, try this:

Sub Sample()
    Dim rng As Range
    Set rng = Range("A1:A20")
    rng = Evaluate("index(upper(" & rng.Address & "),)")
End Sub

As per your example

W.Range("A1:A20") = [index(upper(A1:A20),)]

Explanation

There are two parts to [A1:A20] = [INDEX(UPPER(A1:A20),)]

PART 1

As shown above, [A1:A20] is nothing but just a short way of writing Range("A1:A20")

PART 2

[INDEX(UPPER(A1:A20),)]

Index and Upper are worksheet functions. So you can use Application.Worksheetfunction.Index() but since we don't have an equivalent of UPPER like Application.Worksheetfunction.UPPER(), we can only write it as [cell] = [UPPER(cell)]

Now with that line we are instructing VBA to return an array and this is where INDEX comes into play. (As we are aware, there are two forms of the INDEX function: the array form and the reference form.) By not specifying a row or a column of the array, we are simply letting Excel know that we want the whole array. (Mentioned in VBA help as well) So basically what we are doing is converting each cell in [A1:A20] into uppercase

like image 74
Siddharth Rout Avatar answered Sep 18 '22 19:09

Siddharth Rout


You can't do it in one line like that, but you can do it for a given range like:

Sub Test()
    Dim Rng As Range
    Dim c As Range

    Set Rng = ActiveSheet.Range("A1:A20")
    For Each c In Rng
        c.Value = UCase(c.Value)
    Next c
End Sub

Which is rather simple and intuitive.

like image 30
Netloh Avatar answered Sep 21 '22 19:09

Netloh