アプリ版:「スタンプのみでお礼する」機能のリリースについて

別ブックからシートをコピーするのに以下のコードを使用しています。
ブック内の複数のシートの中からシート名を指定してコピーするものです。

これを

〇現在はシート名を指定しています。
 各シートのセルA1にはシート№(1~120まで)が振られています。
 A1のセルの値が、コードで指定した値(1,16,34,6 など複数指定したいです)と同じシートを
コピーしたいです。

〇貼付け先をWorksheets(1)、Worksheets(2)・・と指定していますが、末尾に順に追加できるよう
にしたいです。

このようなことが可能でしょうか?
宜しくお願い致します。



Sub シート取込()

Dim wb As Workbook
Dim wb2 As Workbook

Set wb = Application.ActiveWorkbook
Set wb2 = Application.Workbooks.Open("C:\aaa\bbb\Desktop\別.xlsm", ReadOnly:=True)

wb2.Sheets("宮城").Copy after:=wb.Worksheets(1)
wb2.Sheets("広島").Copy after:=wb.Worksheets(2)
wb2.Sheets("沖縄").Copy after:=wb.Worksheets(3)
wb2.Sheets("兵庫").Copy after:=wb.Worksheets(4)

Set wb = Nothing
wb2.Close SaveChanges:=False
Set wb2 = Nothing

End Sub

質問者からの補足コメント

  • ご回答ありがとうございます。
    データが増減した場合、都度 wb2.Sheets("宮城").Copy after:=wb.Worksheets(1)
    の"宮城"を消して別のシート名を入れたりしていたのですが、別ブックのシート№で指定したほうがわかりやすい思うようになりました、かつ
    wb.Worksheets(1)の番号をいちいち振るのも面倒なので、末尾に自動で追加できないかと思い質問しました。順番はどうでもよいです。
    言葉足らずで申し訳ありません。
    コードを貼り付けてみたところ、 ’ Split(Range("A1").Value, ",")部分がコメント扱いになってしまいました、すいませんおしえていただけませんでしょうか?

    No.1の回答に寄せられた補足コメントです。 補足日時:2022/04/02 16:33

A 回答 (3件)

No.1の者です。



先ずは、Splitの使い方の例を示しただけで、実際にこの関数を使うかは
質問者さん自身になるかと思います。

>myNo = Split("1,16,34,6", ",")
前半は、この様なデータの場合で、myNo(0)~myNo(3)にデータが入る。
>myNo = Split(Range("A1").Value, ",")
実際に、シートA1からデータを取る場合は、上記の様なやり方かな?と。
ただ、対象のシートがアクティブ状態でないと、違うシートからデータを
取る事になるので、一例としてメモに。

>wb2.Sheets("宮城").Copy after:=wb.Worksheets(1)
前半の"宮城"などや、最後の(1)は、どの様にされるかわからないので、
回答が難しいです。

例えば、下記の様に変更する事も可能かと思います。
(手書きなので、若しかしたらエラーになるかも知れません。)

Dim I As Long , mySh As Variant
mySh = Split("宮城,広島,沖縄,兵庫",",")
For I=1 to 4
wb2.Sheets(mySh(I-1)).Copy after:=wb.Worksheets(I)
Next I
    • good
    • 0
この回答へのお礼

検証に時間がかかり、ご連絡遅れました。
なんとか解決できました❗
ありがとうございました。

お礼日時:2022/04/06 16:24

こんばんは


こういう事かな?

For Each idx In Split(Range("a1"), ",")
wb2.Sheets(CInt(idx)).Copy after:=wb.Worksheets(Worksheets.Count)
Next
    • good
    • 0
この回答へのお礼

ありがとうございました!
大変参考になりました。

お礼日時:2022/04/06 16:24

こんばんは。



データが増減した時に、宮城、広島とかを、どうされたいか不明ですが、
例えばSplitを使えば、データを分割する事が可能ですね。

Sub test()
Dim myNo As Variant
myNo = Split("1,16,34,6", ",") ’ Split(Range("A1").Value, ",")
MsgBox myNo(0)
MsgBox myNo(1)
MsgBox myNo(2)
MsgBox myNo(3)
End Sub
この回答への補足あり
    • good
    • 0

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