重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

いつもお世話になります

今、外部から指定された複数のシートを(ここでは2個にします)
下記のようにAraay関数で削除しようとしています
    Worksheets(Array("B2側壁⑯", "B2側壁⑰")).Delete

ところが、削除するシートの数が決まっていない場合のArrayの作り方が
分かりません
例えば
   moji2 = Array("B2側壁⑯", "B2側壁⑰")
   Worksheets(moji2).Delete
は上手く行くのでが
Arrayの中を別の変数で組み立ててから行うとインデックスエラーになります
   moji1 = """B2側壁⑯""" & ", " & """B2側壁⑰"""
   moji2 = Array(moji1)
   Worksheets(moji2).Delete

シートの数が任意なのでどうしても外で組み立てなければならないと思います
以上の解決方法が有りましたら教えてください
尚、For文で一つづつ削除するのではなくこの方法で何とかお願いします

A 回答 (2件)

No1です。



>Splitはよく使いますが、Array文にも使えるのですか?
ArrayとSplitは別物です。
文字列をArrayにぶち込もうとしてうまく行かないようですので、Split関数で文字列を分割して配列に入れれば宜しいかと。
参考サイトに示される通り、文法は
 Split(対象文字列, 区切り文字)
で、配列を得られます。
(デフォルトでは、添字が0始まりの配列だったと思います)
例えば、
 Split("ああ,いい,うう", ",")
で、["ああ", "いい", "うう"] という配列が得られます。


>UserFormのListviewに出力した中から選択されたものをになります
Listviewは使ったことがないのでよくわかりませんが、選択項目を取得するのにループで取得していたりしませんか?
 ListView.SelectedItems(i)
のような形で取得しているのなら、わざわざ文字連結をしなくても、直接その値を順に配列に入れてゆけば、(文字列を介する必要も無く)そのループ処理だけで配列を作成できるだろうという意味です。
    • good
    • 0
この回答へのお礼

いつもありがとうございます

ちょっと、Arrayという文字に拘り過ぎました
ご指摘通り、Splitで配列を作りうまく行きそうです
また、文字に対しては環境依存文字も扱えるようにしているため
ListView上では?になる文字をカバーするために別な配列も
用意して対処しています

シート番号を使うことも考えられますが
ここからDocuWorksに出力もできるようにしているため
ファイル名の処理などすべてを文字操作で行っています

シートが多くなると扱いづらくなるのでUserFormを使って
操作しやすくしています

以上、本当にありがとうございました

お礼日時:2025/05/01 10:13

こんにちは



どうしても文字列で処理したいのなら、ArrayではなくSplit関数を用いれば、結果を配列として取得できます。
https://learn.microsoft.com/ja-jp/office/vba/lan …

なお、
>For文で一つづつ削除するのではなく~~
と同様の考え方ではありますが、事前に配列を定義しておいて、ループで要素として追加してゆく方法でも、上記と同様の配列を得ることが可能でしょう。

個々のシート名をどのようにして得ているのか不明ですが、通常は配列などで受け取るのではないでしょうか?
あるいは、何かの処理をループで行って、該当するものだけピックアップするとかであれば、わざわざ一旦文字列化するようなことをしなくても、そのループの中で配列にピックアップしてゆけばすむと思いますけれど・・・
    • good
    • 0
この回答へのお礼

こんにちは
いつもありがとうございます

Splitはよく使いますが、Array文にも使えるのですか?
もし、具体的な例が有ったらお願いします
尚、削除するシートはUserFormのListviewに出力した中から
選択されたものをになります(マルチ選択ON)

お礼日時:2025/04/30 18:42

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A