- ベストアンサー
エクセルの select case文
Dim i For i = 1 To 5 Select Case Cells(i, "A") Case "午前" Range("w1").Select Selection.Copy Cells(i, "C").Select ActiveSheet.Paste Case "午後" Range("x1").Select Selection.Copy Cells(i, "d").Select ActiveSheet.Paste End Select Next i Dim j For j = 1 To 5 Select Case Cells(j, "A") Case "関東" Range("y1").Select Selection.Copy Cells(j, "e").Select ActiveSheet.Paste Case "関西" Range("z1").Select Selection.Copy Cells(i, "F").Select ActiveSheet.Paste End Select Next i 毎回皆様にはお世話になっています。 あるセルを参照してその入力結果により 違うセルを貼り付けるマクロを組みました。 参照するセルが複数個(この例だと2セル)あるので それぞれに変数を宣言してfor nextで まわしています。 この内容を変数ひとつだけで すっきりと記述することは可能でしょうか? 参照するセルや判別する内容が増えると 記述が膨大になって マクロが 見にくくなるので 良い方法がありましたら 御教授ねがいます。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。maruru01です。 両方とも、A列を参照していますが、これは単なる間違いでしょうか? 単なる間違いなら、わざわざ2回ループを廻す必要はないと思います。 あと、CopyとPasteメソッドでいちいちSelectしない方がいいです。 Dim i As Long For i = 1 To 5 Select Case Cells(i, 1).Value Case "午前" Range("W1").Copy Cells(i, 3) Case "午後" Range("X1").Copy Cells(i, 4) End Select Select Case Cells(i, 2).Value Case "関東" Range("Y1").Copy Cells(i, 5) Case "関西" Range("Z1").Copy Cells(i, 6) End Select Next i
その他の回答 (1)
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
iとjは、同じなので、1つにできます。 ついでに、select→copy→select→pasteしなくても cells(x,y)=range("??").value できると思います。
お礼
無事に解決いたしました ありがとうございます。 御回答のおかけで 見やすい記述ができました 補足でも申し上げましたが コピーペエストの記述の簡略化についても ありがとうございました
補足
御回答ありがとうございます どこの部分に2個目の記述を 書いたらいいんでしょうか? select→copy→select→paste の部分に関しては 貼り付けたい内容が 文字と○(オートシェイプ)なもので こういう方法を取っています。 こちらについても御指摘ありがとうございました。 文字だけの場合はおっしゃるとおりの方法を ためさせていただきたいです
お礼
無事に解決いたしました。 コピペーストの記述の簡略化まで 御指摘いただきありがとうございました。 おかけですっきりした記述ができました。
補足
御回答ありがとうございます 御指摘の通りに 1回目の参照先列はAで二回目はBでした。 質問の記載間違い、大変失礼いたしました。