2

特定のカテゴリの列を検索し、条件が満たされた場合 (変更する必要があるカテゴリの場合)、そのカテゴリを別の名前に変更しようとしています。単一の変数を使用して行ごとに列をループする方法は知っていますが、行と列の組み合わせを配列に宣言しようとすると (ループを高速化するために)、ハングアップします。私は VBA を初めて使用し、過去に配列を使用したことがありません。以下は私がこれまでに持っているコードです。

Dim myArray(1 To 1000, 3 To 3)
Dim i As Integer

For i = 1 To 1000
 myArray(i, 3) = Worksheets("Sheet1").Cells(i, 3)

 Next i

If myArray(i) = "Category1" Then
myArray(i) = "DifferentCategory"
4

3 に答える 3

0

アレイの使用法に一貫性がありません。名前を変更するだけの場合は、多次元配列を使用する必要はありません。

あなたのコードがあなたが持っているものであると仮定すると、以下が機能するはずです:

Dim myArray(1 To 1000)
Dim i As Integer

For i = 1 To 1000
 myArray(i) = Worksheets("Sheet1").Cells(i, 3)

 Next i

If myArray(i) = "Category1" Then
myArray(i) = "DifferentCategory"
于 2012-11-16T12:01:56.697 に答える
0

次の 1 つのライナーは、最初の文で説明したことを行います。

Range(Worksheets("Sheet1").Cells(1, 3), Worksheets("Sheet1").Cells(1000, 3)).Replace "Category1", "DifferentCategory"

または、より読みやすいバージョンの行を増やします。

Dim targetRange As Range
With Worksheets("Sheet1")
    Set targetRange = .Range(.Cells(1, 3), .Cells(1000, 3))
    targetRange.Replace "Category1", "DifferentCategory"
End With

ご覧のとおり、値を探してそれを置き換えるため、配列は必要ありません。

ただし、本当に配列を使用したい場合は、これがより高速な方法の 1 つです。

Dim myArray
Dim i As Integer
With Worksheets("Sheet1")
    'myArray will now be a (1 to 1000, 1 to 1) array with all the cell values.
    myArray = .Range(.Cells(1, 3), .Cells(1000, 3))
End With
For i = 1 To 1000
    If myArray(i, 1) = "Category1" Then myArray(i, 1) = "DifferentCategory"
Next
于 2012-11-16T13:59:31.980 に答える
0

セルの値を変更したい場合:

Dim i As Integer

For i = 1 To 1000
   If Worksheets("Sheet1").Cells(i, 3).Value2 = "Category1" Then
       Worksheets("Sheet1").Cells(i, 3).Value2 = "DifferentCategory"
    End If
 Next i

myArrayまたは、コードでさらに使用するためにローカル変数 ( ) を変更する必要があります。

Dim myArray(1 To 1000) As String
Dim i As Integer

For i = 1 To 1000
    MyArray(i) = Worksheets("Sheet1").Cells(i, 3).Value2 
    If MyArray(i) = "Category1" Then
       myArray(i) = "DifferentCategory"
    End If
 Next i
于 2012-11-16T12:40:39.877 に答える