• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ExcelVBA コピー範囲を変数にしたい)

ExcelVBA コピー範囲を変数にしたい

このQ&Aのポイント
  • ExcelVBAで、SHEET1の範囲にある特定のフラグがたっているセルの値をSHEET2にコピーする方法を教えてください。
  • フラグが存在しない場合も考慮して、フラグに応じた貼り付け先を変数化する方法を教えてください。
  • 20個までのフラグに対応するため、フラグを変数にしたり、貼り付け先を動的に変更する方法を教えてください。

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

  • ベストアンサー
  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.1

せっかくExcelを使うんですから、フラグの値と貼り付けセル位置の関係をリストにして別シートに持ちましょう。 そのリストからVlookupでフラグの値に一致するセル位置を取得します。 例えばSheet3のA列にフラグの値、B列に選択セル位置を入れます。 1A F15 1B G15 2A I15 2B J15 : : この状態で、元のマクロを次のように変えます(エラー処理等は手抜きです)。 Dim AA As Range Dim sString As String '<--- セル位置用 For Each AA In Range("F4:AL4") AA.Select With ActiveCell On Error Resume Next '<--- リスト不一致対策 sString = "" '<--- 編集を初期化 sString = WorksheetFunction.VLookup(.Value, Sheets("Sheet3").Range("A:B"), 2, True) '<--- リストから貼り付け位置取得 If sString <> "" Then '<--- 貼り付け位置が取得できた場合  Selection.Offset(7, 0).Select  Range(Selection, Selection.End(xlDown)).Select  Selection.Copy  Sheets("SHEET2").Select  Range(sString).Select '<--- 取得した貼り付け位置をSelect  Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False End If Sheets("sheet1").Select End With Next AA 別シートにリスト化する事でメンテナンスも容易になります。

その他の回答 (1)

  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.2

ちょっとコメント部を訂正 誤:sString = "" '<--- 編集を初期化 正:sString = "" '<--- 変数を初期化

sunu0911
質問者

お礼

適切なアドバイスありがとうございます! シート上に定義してLookupで読む方法があるのは 初めて知りました。 (毎回初めて知ることばかりなのですが・・・汗) この方法で完全に解決しました。 本当に助かりました・・・。(涙) ありがとうございました。。。

関連するQ&A

専門家に質問してみよう