4

実際には、コードではなく、Excel VBA に関するいくつかのレッスンを提供するのを手伝う必要があるだけです。

問題:

ここに画像の説明を入力

コードの主な行は非常に基本的なもので、VBA の経験はありませんが、理解できます

Sheets.Add().Name = Name_of_Sheet

次のような名前のリストを定義するとNameList =Array("SheetA", "SheetB", "SheetC","SheetD")、 for ループを実行します

 For I = LBound(NameList) To UBound(NameList) 
    Sheets.Add().Name = Tabs(I) 
 Next I 

ただし、多くの場合、シートの命名には標準があり、Visual Basic でマクロを編集するのはあまり効率的ではありません。セルの内容からシートを作成したい

私の質問:

1) 選択したデータ (1D 列、1D 行、または複数行 x 複数列) のインデックスはどのように機能しますか?

2) これらのセルのコンテンツにアクセスするにはどうすればよいですか?

4

4 に答える 4

4

あなたの質問は非常に自由です。これが「1D列」の側面に取り組むスタートです。これを行うには多くの方法がありますが、となどの基本的なVBA構造をいくつか含めましFor EachWith/End With。変数を他のワークブック、ワークシート、またはセルに簡単に向けることができます。すでに存在するシート名を使用しようとすると、少しエラー処理が発生します。

Sub AddSheets()
Dim cell As Excel.Range
Dim wsWithSheetNames As Excel.Worksheet
Dim wbToAddSheetsTo As Excel.Workbook

Set wsWithSheetNames = ActiveSheet
Set wbToAddSheetsTo = ActiveWorkbook
For Each cell In wsWithSheetNames.Range("A2:A5")
    With wbToAddSheetsTo
        .Sheets.Add after:=.Sheets(.Sheets.Count)
        On Error Resume Next
        ActiveSheet.Name = cell.Value
        If Err.Number = 1004 Then
          Debug.Print cell.Value & " already used as a sheet name"
        End If
        On Error GoTo 0
    End With
Next cell
End Sub

もう1つのアプローチは、セルの内容を配列にロードすることです。これは、実際には2次元である場合(および名前が大量にある場合)に役立つ可能性がありますが、やり過ぎかもしれません。

于 2012-05-03T03:39:36.027 に答える
1

ありがとうダグ、これは素晴らしい。範囲の名前を変更する必要を避けるためのわずかな変更:

    'select list range before running procedure
Sub AddSheets()
Dim cell As Excel.Range
Dim wbToAddSheetsTo As Excel.Workbook

Set wbToAddSheetsTo = ActiveWorkbook
For Each cell In Selection
    With wbToAddSheetsTo
        .Sheets.Add after:=.Sheets(.Sheets.Count)
        On Error Resume Next
        ActiveSheet.Name = cell.Value
        If Err.Number = 1004 Then
          Debug.Print cell.Value & " already used as a sheet name"
        End If
        On Error GoTo 0
    End With
Next cell
End Sub
于 2014-09-12T06:35:20.743 に答える
-1
with sheets
     .add.name="SheetA"
     .add.name="SheetB"
     .add.name="Sheetc"
end with
于 2017-09-21T09:44:57.460 に答える