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で質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) コード名シートA列と集計シートA列のコードが一致したら、コード名シートA5からk12の範囲をコピーし 1 2022/08/29 23:46
- Visual Basic(VBA) 最終行の指定について教えてください。 複数シートを1シートへまとめる下記マクロでは各シートの6行目を 1 2022/10/04 18:37
- Visual Basic(VBA) 複数シート一括作成後に、特定範囲の数式は値で貼り付けしたい 3 2022/10/07 11:18
- Visual Basic(VBA) excel vbaでvlooupの変数がわかりません。 7 2022/05/30 09:35
- Excel(エクセル) VBAのoffsetの動き方について教えてください 3 2022/11/25 23:36
- Visual Basic(VBA) エクセルVBAで教えて頂きたいのですが? 2 2022/12/31 20:28
- Visual Basic(VBA) 集計シートA列のコードと一致する右に並んだシート名(コード)の3行目から10行目をコピーして貼り付け 4 2022/08/18 15:24
- Visual Basic(VBA) エクセルのマクロで対象ごとにシート分けしてその内容をセルに書き込みたい 9 2022/08/24 13:23
- Visual Basic(VBA) まとめシートから集計シートへA列のコードが一致したら1行コピーするマクロをネット上で見つけました。こ 1 2022/08/30 14:11
- Visual Basic(VBA) 別ブックからシートのコピー 3 2022/04/01 20:07
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelで同じシートのコピーを一...
-
特定のシートの削除を禁止した...
-
EXCELで1ヶ月分の連続した日付...
-
オートフィルタの青い三角が見...
-
シート1に列挙したNGワードを...
-
EXCELで同一フォーマットのシー...
-
前の(左隣の)シートを連続参...
-
【エクセルVBA】一部シートのみ...
-
エクセルVBAでパスの¥マークに...
-
VBAでシートコピー後、シート名...
-
エクセルで前シートを参照して...
-
Excelが開かない!印刷プレビュ...
-
【Excel マクロ】 同一book内で...
-
VBA セルの値と同じ名前のシー...
-
Excel、同じフォルダ内のExcel...
-
エクセルで学年会計簿を作りたい。
-
コード追加編集方法は?36回の...
-
Excel その都度コピー追加した...
-
別シート参照のセルをシート毎...
-
エクセルVBA 串刺し計算の際、...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelで同じシートのコピーを一...
-
エクセルの複数シートの保護を...
-
エクセルVBAでパスの¥マークに...
-
前の(左隣の)シートを連続参...
-
Excelで金銭出納帳。繰越残高を...
-
EXCEL:同じセルへどんどん足し...
-
EXCELで1ヶ月分の連続した日付...
-
シートの保護のあとセルの列、...
-
別シート参照のセルをシート毎...
-
エクセルでファイルを開いたと...
-
EXCELで同一フォーマットのシー...
-
エクセルで前のシートを連続参...
-
エクセルで前シートを参照して...
-
VBAでシートコピー後、シート名...
-
Accessのスプレッドシートエク...
-
エクセルのシート名をリスト化...
-
複数シートの特定の位置に連番...
-
Excelのシートを、まとめて表示...
-
エクセル 計算式も入っていない...
-
スプレッドシートの関数VLOOKUP...
おすすめ情報