• ベストアンサー

条件による範囲指定のコピー

EXCELで、条件によって範囲指定のコピーを行いたいのですが、VBAでないと不可でしょうか? 例 A1にコピーするものとして 条件1の場合 C1:H5 をコピー 条件2の場合 C6:H10をコピー VBAのコードをご教授いただけますと幸いです。 よろしくお願いします。

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

  • ベストアンサー
  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.2

コピーする条件を選んでA1セルにコピーすることは関数などではできませんね。 シート見出しを右クリックして「コードの表示」を選択し、次のマクロを入力します。 Sub 選択範囲のコピー貼り付け() Dim S As String S = Application.InputBox("1はC1:H5のコピー、2はC6:H10のコピーです。1か2の番号を入力してください。") If S = "" Then Exit Sub If S = 1 Then Range("C1:H5").Select Else Range("C6:H10").Select End If Selection.Copy Range("A1").Select ActiveSheet.Paste Application.CutCopyMode = False Range("A1").Select End Sub マクロの実行に当たっては「開発」タブの「マクロ」から「選択範囲のコピー貼り付け」を選択し実行すればよいでしょう。

xj86
質問者

お礼

回答ありがとうございます。 やはりマクロでないと難しいようですね。 コードご教授いただき誠にありがとうございます。 イメージ通りのことができました。

その他の回答 (2)

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.3

参考に Sub Test()   Dim Ret As Variant   Dim strRng As String   Ret = MsgBox("条件1:[は い]" & vbCrLf & "条件2:[いいえ]" & _     vbTab & "ボタンを押してください。", vbYesNoCancel)   Select Case Ret     Case vbYes: strRng = "C1:H5"     Case vbNo: strRng = "C6:H10"     Case Else: Exit Sub   End Select   Range(strRng).Copy Destination:=Range("A1") End Sub

xj86
質問者

お礼

回答ありがとうございます。 メッセージのポップアップ付きのコードご教授いただきまして誠に ありがとうございます。 イメージ通りのことができました。

  • Cupper-2
  • ベストアンサー率29% (1342/4565)
回答No.1

OFFSET関数やINDIECT関数の組み合わせでできるような気がする。 指定範囲のコピーではなく、参照位置の指定と考えれば関数で処理ができます。  =OFFSET(基準,行数,列数 [,高さ,幅]) として使いますので、  =OFFSET(C1,0,0) これでC1セルの参照になり  =OFFSET(C1,4,0) これでC5セルの参照になります。 質問のケースでは条件によって参照する行を変えているようですので 条件の判断は行数を指定するパラメータに対して行えばいいでしょう。 … つーか、IF関数でも良いんだけどねえ  =IF(条件1,C1,IF(条件2,C5,"")) のようなやり方でも十分な気がするんだ。

xj86
質問者

お礼

回答ありがとうございます。 OFFSETで行おうとしましたが、特定の1個のセル参照ではないため うまくいきませんでした。

関連するQ&A