1

同じブック内の複数のワークシートにまたがる範囲を参照する、「Sheet1:Sheet5!A1:D10」という形式の文字列を VBA サブルーチンに渡しました (Sheet2、Sheet3、Sheet4 は Sheet1 と Sheet5 の間にあります)。

私が抱えている問題は、この参照を範囲変数に適用できないことです。これは、私が知る限り、複数の参照が原因であり、範囲が異なるシートにあるため application.union を使用できません。

この文字列から、Sheet1!A1:D10、Sheet2!A1:D10 などの 5 つの個別の範囲を抽出するにはどうすればよいですか?

4

2 に答える 2

3

これにより、それぞれの文字列表現が取得され、配列に格納されます。いくつかの仮定があります (シートが存在する、最初にリストされたシートがインデックス順で最初にある、インデックスに関して 2 つの間のすべてが必要であるなど) が、状況によってはうまくいく場合があります。

Sub Parse()

    Dim wbk As Workbook
    ' Arbitrary array size of 10 to store the ranges (as an example)
    Dim myRanges(10) As Variant

    Set wbk = ActiveWorkbook

    ' Split the string at the !
    s = "Sheet1:Sheet3!A1:D10"
    s = Split(s, "!")

    ' Range is the second element of the split (A1:D10)
    TargetRange = s(1)

    ' The first contains the sheets, so split on the :
    SheetNames = Split(s(0), ":")

    ' These sheets are the lower/upper bounds, so use their indices in a loop
    ' that cycles over the sheets in between them (inclusive)
    j = 0 ' This is for the array - you may not need it
    For i = wbk.Sheets(SheetNames(0)).Index To wbk.Sheets(SheetNames(1)).Index
      ' Range is the concatenation of the sheet at this index and the target range
      Set Rng = Range(wbk.Sheets(i).Name & "!" & TargetRange)
      ' Drop it in to our array (or handle how you want)
      myRanges(j) = Rng
      j = j + 1
    Next i

End Sub
于 2012-11-14T16:53:18.900 に答える
0

サブパース()

Dim wbk As Workbook
' Arbitrary array size of 10 to store the ranges (as an example)
Dim myRanges(10) As Variant

Set wbk = ActiveWorkbook

' Split the string at the !
s = "Sheet1:Sheet3!A1:D10"
s = Split(s, "!")

' Range is the second element of the split (A1:D10)
TargetRange = s(1)

' The first contains the sheets, so split on the :
SheetNames = Split(s(0), ":")

' These sheets are the lower/upper bounds, so use their indices in a loop
' that cycles over the sheets in between them (inclusive)
j = 0 ' This is for the array - you may not need it
For i = wbk.Sheets(SheetNames(0)).Index To wbk.Sheets(SheetNames(1)).Index
  ' Range is the concatenation of the sheet at this index and the target range
  Set Rng = Range(wbk.Sheets(i).Name & "!" & TargetRange)
  ' Drop it in to our array (or handle how you want)
  myRanges(j) = Rng
  j = j + 1
Next i

サブ終了

于 2014-04-15T08:47:34.180 に答える