2

私は初めてでVBA、非常に単純ですが、やりたいことができません。

大きな (333x333) 空の (ゼロでいっぱいの) スプレッドシートのセルを自動的に変更する必要があります。

別のスプレッドシートに、変更するすべてのセルの行と列があります。(5000個)

このfor目的にはループが適しているようです。

これが私のマクロのコードです。問題は、最後の行の前の行に表示されます。

Dim val1 As String, val2 As String, i As Integer

For i = 1 To 333

  Sheets("Feuil2").Activate
  ActiveSheet.Cells(i, 1).Select

    val1 = Cells(i, 1).Value
    val2 = Cells(i, 2).Value

Sheets("Classeur2.csv").Select
Cells(val1, val2).Select

ActiveCell.FormulaR1C1 = "1"

Next i

問題を引き起こす行は次のとおりです: Cells(val1, val2).Select

私のエラーは構文エラーだと思います。しかし、2 つの変数「val1」と「val2」の前、後、または前後に何を追加すればよいかわかりません。

どう思いますか ?

どうもありがとうございました。ニコラス。

編集

私の問題は解決しました:

最初の答えは、私のマクロ作業を男性化するために必要なものです。2 番目の答えは、それを行うための適切で迅速な方法です。

4

2 に答える 2

4

VBA を使用している場合は、シートまたはセルをアクティブ化または選択する必要はありません。すべてに直接アクセスできます。コード:

Dim rng As Range
For Each rng In Sheets("Feuil2").Range("A1:A333")
    Sheets("Classeur2.csv").Cells(rng.Value, rng.Offset(, 1).Value) = "1"
Next rng

Joe のコードと同じ結果が得られます。

何らかの理由でシートを切り替える必要がある場合Application.ScreenUpdating = Falseは、マクロの最初 (およびApplication.ScreenUpdating=True最後) で使用します。これにより、画面のちらつきがなくなり、実行が高速化されます。

于 2013-02-18T07:15:19.830 に答える
-1

VAL1 と VAL2 は、引数として文字列ではなく整数を取る Cells の引数として使用するには、文字列ではなく整数として淡色表示にする必要があります。

Dim val1 As Integer, val2 As Integer, i As Integer

For i = 1 To 333

  Sheets("Feuil2").Activate
  ActiveSheet.Cells(i, 1).Select

    val1 = Cells(i, 1).Value
    val2 = Cells(i, 2).Value

Sheets("Classeur2.csv").Select
Cells(val1, val2).Select

ActiveCell.FormulaR1C1 = "1"

Next i
于 2013-02-18T05:14:30.763 に答える