- ベストアンサー
条件による範囲指定のコピー
EXCELで、条件によって範囲指定のコピーを行いたいのですが、VBAでないと不可でしょうか? 例 A1にコピーするものとして 条件1の場合 C1:H5 をコピー 条件2の場合 C6:H10をコピー VBAのコードをご教授いただけますと幸いです。 よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
コピーする条件を選んで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 マクロの実行に当たっては「開発」タブの「マクロ」から「選択範囲のコピー貼り付け」を選択し実行すればよいでしょう。
その他の回答 (2)
- watabe007
- ベストアンサー率62% (476/760)
参考に 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
お礼
回答ありがとうございます。 メッセージのポップアップ付きのコードご教授いただきまして誠に ありがとうございます。 イメージ通りのことができました。
- Cupper-2
- ベストアンサー率29% (1342/4565)
OFFSET関数やINDIECT関数の組み合わせでできるような気がする。 指定範囲のコピーではなく、参照位置の指定と考えれば関数で処理ができます。 =OFFSET(基準,行数,列数 [,高さ,幅]) として使いますので、 =OFFSET(C1,0,0) これでC1セルの参照になり =OFFSET(C1,4,0) これでC5セルの参照になります。 質問のケースでは条件によって参照する行を変えているようですので 条件の判断は行数を指定するパラメータに対して行えばいいでしょう。 … つーか、IF関数でも良いんだけどねえ =IF(条件1,C1,IF(条件2,C5,"")) のようなやり方でも十分な気がするんだ。
お礼
回答ありがとうございます。 OFFSETで行おうとしましたが、特定の1個のセル参照ではないため うまくいきませんでした。
お礼
回答ありがとうございます。 やはりマクロでないと難しいようですね。 コードご教授いただき誠にありがとうございます。 イメージ通りのことができました。