- ベストアンサー
【Excel365マクロ】選択範囲を流動的にしたい
マクロの選択の中で、セル・行・列・シートなどを選択することが多々あります。 <例1> ・セル→ Range("C1") 、 Range("C1:D20") ・行→ Rows("5:10").Select ・列→ Columns("E:E").Select ・シート→ Sheets("Sheet1").Select 固定値は例1のようなピンポイントの文言を入れればいいのですが、常に変動する場合はどのようなマクロにすればいいのでしょうか? ググると行番号と列番号(Cells(行,列)=上から○番目、左から○番目)での指定ばかりで、セル番地での指定方法が見つかりません。 具体的には、添付画像のように特定のセルに入力したセル番地の箇所を選択(Select)したいのです。 ・セル→ B2とB3に入力したセルの範囲がマクロの対象になる ・行→ B14とB15に入力した行がマクロの対象になる ・列→ M2とM3に入力した列がマクロの対象になる ・シート→ M13に入力したシートがマクロの対象になる 添付画像は同一シート内ですが、マクロボタンを配置するのは同一シートではなく別シートの時もあります。 <例2> シート「設定用」内でシート「請求書」を選択し処理するセルを設定 → マクロが実行されるシートは「請求書」のセル 分かりにくい質問で申し訳ありませんが、よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
> シート「設定用」内でシート「請求書」を選択し処理するセルを設定 がいまいちよく分かりませんが、設定シートのA1に記載されたシートを対象にするとした場合 Sub Test() Dim SelectSheet As Worksheet Dim Ws As Worksheet Set Ws = Sheets("設定用") Set SelectSheet = Sheets(Ws.Range("A1").Value) SelectSheet.Activate '・セル→ B2とB3に入力したセルの範囲がマクロの対象になる SelectSheet.Range(Ws.Range("B2").Value & ":" & Ws.Range("B3").Value).Select End Sub あとの二つは '・セル→ B2とB3に入力したセルの範囲がマクロの対象になる SelectSheet.Range(Ws.Range("B2").Value & ":" & Ws.Range("B3").Value).Select の部分をそれぞれ以下に置き換えててください。 '・行→ B14とB15に入力した行がマクロの対象になる SelectSheet.Rows(Ws.Range("B14").Value & ":" & Ws.Range("B15").Value).Select '・シート→ M13に入力したシートがマクロの対象になる SelectSheet.Columns(Ws.Range("M2").Value & ":" & Ws.Range("M3").Value).Select
その他の回答 (3)
- umeking
- ベストアンサー率26% (25/95)
range(cells(r1,c1),cells(r2,c2)) r1,c1,r2,c2は可変
- kkkkkm
- ベストアンサー率66% (1719/2589)
No.1の説明文のコピペ間違いです > '・シート→ M13に入力したシートがマクロの対象になる > SelectSheet.Columns(Ws.Range("M2").Value & ":" & Ws.Range("M3").Value).Select は '・列→ M2とM3に入力した列がマクロの対象になる SelectSheet.Columns(Ws.Range("M2").Value & ":" & Ws.Range("M3").Value).Select でした。
お礼
ご回答ありがとうございました。
- kkkkkm
- ベストアンサー率66% (1719/2589)
No.1の訂正 > > シート「設定用」内でシート「請求書」を選択し処理するセルを設定 > > がいまいちよく分かりませんが M13に指定シートが記載されているのを見逃してました Ws.Range("A1").Value は 実際の指定シートが記載されているセルを指定してください。
お礼
ご回答ありがとうございました。
お礼
毎回ご回答ありがとうございます。 Range("セル番地").Value で設定し、シート指定の場合は Range の前に Dim SelectSheet As Worksheet~SelectSheet. を前に入れる、なるほど。 頻繁にフォーマットを修正するので、そのたびにマクロも修正しなければなりませんでした。 これでしたら、行/列を追加・削除しても、いちいちマクロを修正する必要が無くなります。 これにシート名取得のマクロを別途組み込めば、シート名を変更してもリストを自動的に更新することができます。 大変助かりました。