• ベストアンサー

EXCEL 異なった行に振り分ける方法

自動記録マクロがやっと出来る超初心者です。 よろしくお願いします。 EXCELです。 A1のセルに 1か2か3の数字が入っています。 2行目にA2~CX2まで項目が入っています。 A1が1の時 2行目のA2~CX2列の内容を4行目に移し A1が2の時 2行目のA2~CX2列の内容を5行目に移し A1が3の時 2行目のA2~CX2列の内容を6行目に移します。 どのようにしたら良いのか教えてください。 マクロ超初心者ですので、わかりやすく教えていただける大変助かります。よろしくお願いいたします。

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

  • ベストアンサー
  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.2

No.1です。 移動でなくて、コピーですね。それで、一点確認があるのですが、 > また、その値+1の行に必ず移す、という規則性があります とありますが、質問文ではA1が1のときは4行目、というように+3になっています。とりあえず+3で書いてみました。A1が文字列やマイナス、空白の場合はエラーを出すようにしていますが、0以上の数値だと4以上でもエラーにはしていません。 ご希望の動作と違うようでしたら、また補足をお願いします。 Sub Furiwake()   Dim CopyRow As Variant   CopyRow = Range("A1").Value   If Not IsNumeric(CopyRow) Or CopyRow < 0 Then     MsgBox "A1のセルに0以上の数値を入力してください", vbExclamation, "入力エラー"     Exit Sub   End If   CopyRow = CopyRow + 3   Range("A2", "CX2").Copy (Cells(CopyRow, 1)) End Sub

pi-man39
質問者

お礼

助かりました。 本当に有難うございました

その他の回答 (1)

  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.1

「移す」というのは、2行目は空になる、ということでいいですか? それならこんな感じでしょうか。A1の値がもっとたくさんあり、その値+1の行に必ず移す、という規則性があればSelect CaseでなくIf文を使った方がいいと思いますが、とりあえずこれで。(If文を使ったやり方はご自分で考えてみてください) Dim CopyRow As Integer Sub Furiwake()   Select Case Range("A1").Value     Case 1       CopyRow = 4     Case 2       CopyRow = 5     Case 3       CopyRow = 6     Case Else       Exit Sub   End Select   Range("A2", "CX2").Cut   ActiveSheet.Paste (Cells(CopyRow, 2)) End Sub

pi-man39
質問者

補足

早速有難うござました。 すみませんでした。言葉がたらなくて申し訳ございません。 「移す」ではなく。「コピー」です。 すみませんがよろしくお願いします。 IFを使ったやり方の方が易しいようですので 申し訳ございませんが、よろしかったらそちらも教えていただけますか。 また、その値+1の行に必ず移す、という規則性があります よろしくお願いいたします。

関連するQ&A