1

特定の条件下で特定のセルを変更するワークシートのみを指定する 1 つの文字列を含む定式化されたセルがあります。

注: ワークシート "Total" と "Test1" から "Test20" は同じ形式です (まったく変更したくない名前と形式の異なるワークシートが他にもあります)。

ワークシート「Total」、「Test2」、「Test7」、「Test12」のセル A5 を変更したいとします。

非表示の定式化セル (B50 としましょう) は、次のテキスト文字列を取得するように定式化されています: "Array("Total", "Test2", "Test7", "Test12")". Sheets(SheetNamesList).Select が実際に Sheets(Array("Total", "Test2", "Test7", "Test12")).Select になる vba コードの一部になることを期待して、この値を変数に割り当てています。

Suscript out of range エラーが発生し、デバッグ時に行 [Sheets(SheetNamesList).Select] が強調表示されます。

以下は私のコードです。コメントしてくださってありがとうございます

Sub Active_to_Installed()

Dim SheetNamesList As String

SheetNamesList = Sheets("Names").Range("B50").Value

If Range("B50").Value = "A" Then

Range("B50").Activate
Sheets(SheetNamesList).Select
ActiveSheet.Activate
Range("A5").Select
ActiveCell.FormulaR1C1 = "I"

Else

Range("A5").Activate
Sheets(SheetNamesList).Select
ActiveSheet.Activate
Range("A5").Select
ActiveCell.FormulaR1C1 = "A"

End If
End sub
4

1 に答える 1

0

適切な構文は次のとおりですSheets(Array("Sheet4", "Sheet5")).Selectが、文字列である可能性が最も高いセルの値を使用しています。その文字列を配列に変換する必要がありますSheets

Dim SheetNameArray As Variant
Dim Counter As Integer

SheetNameArray = Split(Worksheets("Names").Range("B50").Value, ",")
Sheets(SheetNameArray).Select

実際、同時に複数のシートを選択したことはありません。また、アクティブなシートを複数持つことはできないため、アクティブにすることはできません。また、ここで一度にすべての数式を変更することはできません。そのためには、次のようにシートを反復処理する必要があります。

Dim SheetNameArray As Variant
Dim Counter As Integer

SheetNameArray = Split(Worksheets("Names").Range("B50").Value, ",")
For Each s In SheetNameArray
   Worksheets(s).Range("A5").Formula = "=2+3"
Next s

Sheets(SheetNameArray).Select

Array("Total", "Test2", "Test7", "Test12")注: B50 の値を からに変更する必要があります。Total, Test2, Test7, Test12

于 2013-10-23T18:34:50.907 に答える