11

現在、次のコードを使用して、ティッカー シンボルのリストを小文字から大文字に変換しています。

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

範囲全体を 1 行に変換するために使用できる方法はありますか? 何かのようなもの:

Range("A1:A20").convertouppercasesomehow
4

5 に答える 5

4

そのように1行で行うことはできませんが、次のように特定の範囲で行うことができます:

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

これはかなりシンプルで直感的です。

于 2013-11-14T18:59:05.023 に答える
2

さまざまなソースから収集したものから:

Function UcaseRangeAsArray(TargetRng As Range) As Variant()
Dim Arr()    
Arr = Evaluate("INDEX(UPPER(" & TargetRng.Address(External:=True) & "),)")    
UcaseRangeAsArray = Arr
Erase Arr
End Function
于 2018-01-07T17:33:26.160 に答える
0

Peter Albertが提示したエレガントな回答に関しては、WorksheetFunctionTranspose関数には昔ながらの制限がいくつかあります。具体的には、反転できる要素の上限は 65,535 (最大符号なし整数 -1) です。バリアント配列を一括で読み込み、「メモリ内」で処理し、その後変更された値をワークシートに返すことで、その制限を克服できます。

Sub test()
    With Worksheets("Sheet1")
        makeUpper .Range("A2:A1000000")
    End With
End Sub

Sub makeUpper(rng As Range)
    Dim v As Long, vUPRs As Variant
    With rng
        vUPRs = .Value2
        For v = LBound(vUPRs, 1) To UBound(vUPRs, 1)
            vUPRs(v, 1) = UCase(vUPRs(v, 1))
        Next v
        .Cells = vUPRs
    End With
End Sub

これは非常に迅速に処理されます。通常、100K セルのデータは 0.5 秒未満で処理され、1M セルは 4 ~ 6 秒で変換できます。


これは、 Application.Selectionプロパティでセルを操作することでメリットが得られるサブ プロシージャのタイプです。選択内のセルを処理する定型フレームワークについては、この回答を参照してください。

于 2016-02-17T03:47:04.653 に答える