1つのブックの中に約40ぐらいシートがあり、そのうちの約30ぐらいのシートの最終行と最終列を知りたいのです。
シート名は統一されていないのでいろいろな名前になっています。
今は
Set ws1 = Sheets("田中")
Set ws2 = Sheets("本田")
というように各シートをws1, ws2...としてVBAで処理しています。
これを以下のようにすることはできないのでしょうか?
MyArray = Array("田中","本田","南","上田",...)
For i = 1 to 30
Set ws & i = Sheets(MyArray(i))
Next i
ネットで検索しましたが探しきれませんでした。識者の方、アドバイスお願いいたします。m(__)m
No.3
- 回答日時:
ちょっとミスでした。
>Set ws(i + 1) = Sheets(MyArray(i + 1))
は
Set ws(i + 1) = Sheets(MyArray(i))
でしたね。
ところで、
>1つのブックの中に約40ぐらいシートがあり、そのうちの約30ぐらいのシート
この【約30シート】とは連続したシートなのでしょうか?
仮に個人データ管理と捉えるなら後ろの方にあると考えた時、例えばシートインデックス5~34位?とも思えます。
だとしたら簡易検証ですが、
Sub try() '検証でシート数は10個用意
Dim ws() As Worksheet
Dim i As Integer
ReDim ws(1 To 1)
For i = 6 To Worksheets.Count '6はデータシートの開始インデックス番号
ReDim Preserve ws(1 To i - 5) '5は除外する最終インデックス番号
Set ws(i - 5) = Worksheets(i)
Next
For i = 1 To UBound(ws)
Debug.Print ws(i).Name
Next
End Sub
結果:
Sheet6
Sheet7
Sheet8
Sheet9
Sheet10
とインデックス番号を用いてシートを指定するのが楽かもです。
若しくは途中をくり抜くならインデックス番号をSelect CaseやIf文で分岐させると言う方法も取れそうです。
あとは、
>最終行と最終列
がどの程度の範囲なのか(開始セルはどこ?判断する基準行列番号は?)、データがないように見えて実は数式が埋まっているとか?
でしょうか。
しかし実際に必要なのはシートの配列なのか、シート毎のセル範囲情報なのかによっては、連想配列とか上記に構造体を組み合わせと言うのもあるかと。
配列の配列でも良いかもですが。
忙しい中、回答ありがとうございます。
>この【約30シート】とは連続したシートなのでしょうか?
何回もシートを削除したりしているので連続したシートではないのです。
VBEの画面でシートのインデックス番号(オブジェクト名)を書き換えることはできるようなのですが、書き換えても問題はないのでしょうか?もし書き換え可能なら、それが一番簡単な方法かもしれません。
>しかし実際に必要なのはシートの配列なのか、シート毎のセル範囲情報なのかによっては、連想配列とか上記に構造体を組み合わせと言うのもあるかと。
質問がわかりにくくてすみません。今回はシートの配列です。
ただ別の質問でシートごとの特定の範囲を格納した部分を配列のように扱うことができるのかという質問をしています。もし可能でしたら、そちらの質問にも回答していただけると助かります。よろしくお願いいたします。
No.2
- 回答日時:
以下のようにしてください。
各シートのA1セルにシート名を設定しています。
Public Sub シート試験()
Dim ws() As Worksheet
Dim arr As Variant
Dim i As Long
arr = Array("田中", "本田", "南", "上田")
ReDim ws(UBound(arr))
For i = 0 To UBound(arr)
Set ws(i) = Worksheets(arr(i))
Next
'各シートのA1セルにシート名を設定する
For i = 0 To UBound(ws)
ws(i).Cells(1, 1).Value = ws(i).Name
Next
End Sub
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルの複数シートの保護を...
-
Accessのスプレッドシートエク...
-
複数のシートの同じセルに入力...
-
エクセルでファイルを開いたと...
-
エクセルのシート名をリスト化...
-
Excelのシートを、まとめて表示...
-
エクセルでファイル保存時に複...
-
別シートの最終行に貼り付けす...
-
シートの保護のあとセルの列、...
-
別シート参照のセルをシート毎...
-
エクセル計算式解説
-
エクセルVBAでパスの¥マークに...
-
VBAで条件によりフォントサイズ...
-
エクセルで毎回1枚目のシートを...
-
エクセル 計算式も入っていない...
-
Excelで同じシートのコピーを一...
-
EXCEL:同じセルへどんどん足し...
-
MIDで指定するセル番号を、別の...
-
Excel、同じフォルダ内のExcel...
-
sumif関数を使って複数シートに...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルの複数シートの保護を...
-
Excelで金銭出納帳。繰越残高を...
-
エクセルVBAでパスの¥マークに...
-
EXCEL:同じセルへどんどん足し...
-
前の(左隣の)シートを連続参...
-
VBAでシートコピー後、シート名...
-
別シート参照のセルをシート毎...
-
エクセルでファイルを開いたと...
-
Excelで同じシートのコピーを一...
-
Excelのシートを、まとめて表示...
-
EXCELで1ヶ月分の連続した日付...
-
Excel、同じフォルダ内のExcel...
-
Accessのスプレッドシートエク...
-
シートの保護のあとセルの列、...
-
複数シートの特定の位置に連番...
-
特定のシートの削除を禁止した...
-
エクセル 計算式も入っていない...
-
複数シートの色付きセルがある...
-
EXCELで同一フォーマットのシー...
-
excelでシート毎の最終更新日を...
おすすめ情報