• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBA/シート名の指定時に変数を使いたい)

VBA/シート名の指定時に変数を使いたい

このQ&Aのポイント
  • エクセルVBAでシート名を指定する際に、変数を使用する方法について質問です。
  • 特定のシートにコピーした内容を貼り付ける際、複数のシートが存在する場合にシート名を変数として指定する方法について教えてください。
  • フォーマルなやり方でシート名を指定する方法では、エラーが発生してしまいます。どのようにすれば正しくシート名を指定できるでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

For Eachの指定で、 ×:For Each fnd In myRng.Areas ○:For Each fnd In myRng で良いのでは? 実際、エリアは複数領域でなくて1つですし。 -- For Each ~ Nextの中身を、 For Each ~  MsgBox("!") Next とかってしてみると、ループの回数が期待される10回でないって確認できたりするかも。

ljubFelix
質問者

お礼

.Areasは全く盲点でした。これを外しただけで解決できました。驚きの一言です。一人では見当違いなことばかり試していたので本当に助かりました。皆様ベストアンサーにさせていただきたいのですが、初心者目線で一番簡潔でわかりやすかったneKo_quatre様を選ばせていただきます。ありがとうございました!!

その他の回答 (2)

  • dogs_cats
  • ベストアンサー率38% (278/717)
回答No.3

その方法でも問題なく実行出来ますが。 fnd.Valueにトマトが格納されているか、デバックしていますか? http://www.excel-excel.com/vbachair/step1-7.html 仮にsheet1のA1の値をsheet2A列で検索しその行の10列分のデータを指定シートにコピーするコード化してみましたのでご参考まで。 Psr_rngのように変数格納しても構わないかと思います。お好きに方を選択下さい。 値だけの転記であれば書きのようにすれば値だけ転記出来ます。 左右のセル数が同数になるようにセル範囲を指定する必要があります。 Pst_rng .value=CP_rng.value 書式も必要なコピーは.Copy Destinationの方が処理が高速化出来ますのでお勧めです。 CP_rng.Copy Destination:=Pst_rng Sub test() Dim fnd As Range Dim Fcell As Range Dim Myrng As Range Dim CP_Rng, Pst_rang As Range Set fnd = sheets(("sheet1").Range("A1") With Sheets("sheet2") Set Myrng = Cells.Find(What:=fnd.Value, After:=Cells(1, 1), LookIn:=xlValues, LookAt:=xlWhole) If Not Myrng Is Nothing Then Set CP_Rng = .Range(Cells(Myrng.Row, 1), Cells(Myrng.Row, 10)) 'Set Pst_rng = Sheets("野菜" & fnd.Value).Range("A1:J1") CP_Rng.Copy Sheets("野菜" & fnd.Value).Range("A1").PasteSpecial End If End With End Sub

ljubFelix
質問者

お礼

このような方法もあるのですね。とても勉強になります。今後の参考にもさせていただきます。ご丁寧にコードを教えていただきありがとうございます。感謝申し上げます。

  • eden3616
  • ベストアンサー率65% (267/405)
回答No.2

「Areas」は複数のセル範囲から該当のセル範囲を指定する場合に使用します。 例えば、A、B、Cの各1~5行目から、2番目のセル範囲を取得する場合、 以下のようにすればイミディエイトに「$B$1:$B$5」が表示されます。 Sub sample() Debug.Print Range("A1:A5,B1:B5,C1:C5").Areas(2).Address End Sub 該当のコードを修正する場合、以下のようになります。 For Each fnd In myRng.Areas    ↓ For Each fnd In myRng.Areas(1)   又は For Each fnd In myRng 前者は、全てのセル範囲「A1:A10」の内、1番目のコレクションであるセル範囲「A1:A10」をセル範囲とする。 (対象のセル範囲が1つしかないので意味がない) 後者は、セル範囲「A1:A10」をセル範囲として指定する。 (対象のセル範囲が1つしかないのであればこれで良い)

ljubFelix
質問者

お礼

大変勉強になりました。こちらの方法で無事解決できました。早々にご回答くださり感謝申し上げます。

関連するQ&A