3

コードを使用して呼び出すことができるワークシートの配列をいくつか用意しようとしています。

ThisWorkbook.Sheets(Array("Sheet1", "Sheet3"))
ThisWorkbook.Sheets(Array("Sheet2", "Sheet5"))

次のような変数を設定する方法があるかどうか疑問に思っています。

Dim ArrayOne As String
Dim ArrayTwo As String

ArrayOne = ThisWorkbook.Sheets(Array("Sheet1", "Sheet3"))
ArrayTwo = ThisWorkbook.Sheets(Array("Sheet2", "Sheet5"))

ArrayOne 'Call this Array then save

Filename:="C:\Data\testfile.xls", FileFormat:= _
xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False _,
CreateBackup:=False 

ArrayTwo 'Call this array then save

Filename:="C:\Data\testfile.xls", FileFormat:= _
xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False _,
CreateBackup:=False 

あなたが私を助けることができるかどうか私に知らせてください!!

4

5 に答える 5

4

以下は、VBA で配列がどのように機能するかの例です。

Sub Example()
    Dim ArrayOne() As String
    Dim ArrayTwo() As String
    Dim ArrayThree As Variant
    Dim i As Long

    ReDim ArrayOne(1 To Sheets.Count)
    ReDim ArrayTwo(1 To 2)

    For i = 1 To Sheets.Count
        ArrayOne(i) = Sheets(i).Name
    Next

    ArrayTwo(1) = "Sheet1"
    ArrayTwo(2) = "Sheet2"

    ArrayThree = Array("Sheet1", "Sheet3")
End Sub

私が理解していることから、配列を使用したくないと思います。次のように、ワークブック内のワークシートを参照できます。

Sheets("SheetName") 'SheetName is the name of your sheet
Sheets(1)           '1 = sheet index

シートを新しいワークブックにコピーして保存する方法の 1 つは、次のとおりです。

Sub Example()
    Dim wkbk As Workbook

    ThisWorkbook.Sheets("Sheet1").Copy
    Set wkbk = ActiveWorkbook
    ThisWorkbook.Sheets("Sheet3").Copy After:=wkbk.Sheets(wkbk.Sheets.Count)

    wkbk.SaveAs FileName:="C:\New Excel Book.xlsx", _
                FileFormat:=xlOpenXMLWorkbook
    wkbk.Close
End Sub
于 2013-06-18T13:12:39.690 に答える
4

レコード マクロ機能を使用してみてください。複数のシートを選択して、新しいブックにコピーできます。次にその本を保存すると、そこにいます。次に、コードをいじって、具体的に希望どおりに動作させるようにします。

それは次のようになります。

ThisWorkbook.Sheets(Array("Sheet1", "Sheet3")).Copy
ActiveWorkbook.SaveAs ...

配列を事前に定義したい場合、それも簡単にできます。それらには、シートの名前が含まれている必要があります。配列は、Variable 変数を使用して作成できます。

Dim ArrayOne as Variant
ArrayOne = Array("Sheet1", "Sheet3")

そしてそれをで使用します.Sheets().Copy

ThisWorkbook.Sheets(ArrayOne).Copy
于 2013-06-18T13:00:08.100 に答える
0

Arthur の解決策 (最後のコメント) に従って、同様の問題が発生しました (したがって、この投稿に到達しました)。動的配列を作成しようとしていました。これにより、ワークブック内の一連のシートが配列に保存され、その配列で特定のアクションが実行されます。 .

異なる点は、ユーザーが Excel の範囲 (列) 内でシートの名前を定義することです (それらは別のマクロのシナリオを表します) が、この範囲は拡大または縮小される可能性があります。

私は 2 つの配列を使用します。最初にループを実行し、そのたびに拡張子を他の配列に保存します (透明性の理由から)。コード:

Sub testArray()
    Dim a, b As Integer
    scenarios_number = Sheets(sheet1).[c1] - 1 ' (this is where i put the # of scenarios / sheets (-1 is used as i want the array to start from 0))
    a = 0
    Dim Scenarios_array, dimension_array() As Variant
    ReDim Scenarios_array(0 To scenarios_number) '(resize array to match the #'s of scenarios)
    ReDim dimension_array(0 To a)
    For a = 0 To scenarios_number
    Scenarios_array(a) = Range("c8").Offset(a, 0).Value '(this is where my scenarios' names start within sheet1 -- using offset for the loop -- this is why i use -1 above as i want a to start @ 0)
    ReDim Preserve dimension_array(0 To a) ' (expand dimension of 2nd array)
    dimension_array(a) = Scenarios_array(a) ' (save the value in the second array, expaning its dimensions)
    Next
    MsgBox "Get Ready"
    Sheets(dimension_array()).Select
    ActiveWindow.SelectedSheets.Delete
End Sub

それが役立つことを願っています:)

于 2014-07-20T12:57:04.520 に答える
0

私もこれをやろうとしていましたが、別の方法を見つけました

私が達成しようとしていたのは、複数のシートを含むワークブックがあり、それらに名前を付けたことです。いくつかのシートを選択し、別の Excel ファイルにエクスポートする必要があるいくつかのシートを除外したかったのです。

これが(多くの検索と試行の後)私のコードです

ダスティン

Dim ii As Integer 'Counter of worksheets
Dim namefile as string 'Variable for name of the new file
namefile = "NameOfNewFile.xlsx" 'Name of new file

For ii = 1 To ThisWorkbook.Sheets.Count 'Counts from 1 to last sheetnumber
    If Sheets(ii).Name <> "Namesheet1" Then If Sheets(ii).Name <> "Namesheet2" Then Sheets(ii).Select Replace:=False 
    'NameSheet1 and NameSheet2 are being exluded from the new file
Next ii

ActiveWindow.SelectedSheets.Copy 'Copies the selected files

Set NewWb = ActiveWorkbook
NewWb.SaveAs Filename:= _
"C:\Users\" & Environ("UserName") & "\Desktop\" & namefile, FileFormat:=xlOpenXMLWorkbook 
'Saves as xlsx file to desktop
NewWb.Close 'Closes the new file
Set NewWb = Nothing 'Clear NewWb to reduce memory usage
于 2015-09-11T14:36:05.820 に答える