- ベストアンサー
VBAで範囲指定をかえるには?
マクロで範囲の選択したいのですが、任意のセルの値で範囲の大きさをかえるということは可能でしょうか? 例:range("A1:C5").seiect 任意のセルの値より range("B1:D6").seiect という具合です 全くのトーシローなんで宜しくお願いします。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
#3です。 >(A1:B20)、(A1:C20)・・・・といった具合に範囲指定したいのです。 もう少し早く、このルール性(規則性)を言ってくれれば。質問の内容を誤解していました。 第1月 A1:B20 第2月 A1:C20 第3月 A1:D20 ・・・ ・・・・ 第10月 A1:K20 ・・のように指定したいのなら簡単。 Range(Cells(1,1),Cells(20,n+1)).Select で良い。 そのnですが,例えばA21に2003/1といれる。すると自動的に2003/1/1となる。表示形式をユーザー定義yy/mmとすると03/01となる。これはスタート月です。そして2003/7月に 最近月をA2に2003/7といれる。すると自動的に2003/7/1となる。表示形式をユーザー定義yy/mmとする。 するとA2は03/07になる。 そしてA3に=DATEDIF(A1,B1,"m")をいれる。これで何ヶ月目かが出る。 そしてn=cells(21,3)として、次ぎに Range(Cells(1,1),Cells(20,n+1)).Select とする。
その他の回答 (5)
- imogasi
- ベストアンサー率27% (4737/17070)
#3の者です。私の言う(1)の場合なら Case の後の1と書いた1を(私が勝手に決めて書いたので)ご質問者の場合の値に置換える。文字列が入って判別するなら、値を””で囲うこと。また場合の数が10通りまで(これ以上でもやりたければ増やせます)ぐらいなら、Case文を下に書き連ねれば解決すると思いますよ。制御構造のCase文とRangeのSelectの問題を解説書で読んでください。
補足
再度の回答有難うございます。 知らないことばかりですが、Case文は勉強になりました。 ただ1ヶ月ごとに1行づつ増やしていかなければならないので1年で12通り 5年先ぐらいは作っておきたいので、60通り・・・ う~ん、やってやれないことはないのですが・・・ 他の方法と組み合わせてやってみます。有難うございました。
- taknt
- ベストアンサー率19% (1556/7783)
>a="A"の部分を1ならAのセル2ならBのセルという変数にしたいのですが 数値を文字にしてあげればいいでしょう。 c=1 a=mid("ABCDEFGHIJKLMNOPQRSTUVWXYZ",c,1) で cに数字を入れれば 文字として出せます。 ただし 27以上は 別処理をしないといけません。 a="" if c>26 then a="A" c=c-26 end if a=a+mid("ABCDEFGHIJKLMNOPQRSTUVWXYZ",c,1) これで52までの数字に対応できます。
補足
再度の回答有難うございます。 MID関数は便利ですね、知りませんでした。 でもこれだと1文字しか対応しないんですね? AA・AB・・・は無理ということでしょうか? 結構セル数が多いんです・・・(^^;) 1A 2B 3C ・・ ・・ でVLOOKUPで引張ってくるしかないのでしょうか? う~む、なんか格好悪いなぁ・・・ E方法あれば教えてください。 m(__)m
- imogasi
- ベストアンサー率27% (4737/17070)
2つのどちらかがハッキリしません。 (1)例えばB1セルに入っている値に「よって」(左右されて)変えるケース。 Select Case range("b1") Case 1 range("A1:C5").seiect Case 2 range("B1:D6").seiect ・ ・ End Select (2)B1にA1:C5と入れたときはrange("A1:C5").seiect と B1にB1:D6と入れたときはrange("B1:D6").seiect にしたいのか、どちらですか。後者は Sub test01() Dim a As String Worksheets("sheet3").Activate a = Cells(1, 2) Range(a).Select End Sub B1にA3:D8といれて、実行すると、A3:D8が範囲指定で黒く なりました。(テスト済み)
補足
早速の回答有難うございます。 (2)を試してみました、おっしゃる通りうまくいくのですが どうやら私がやりたいのは(1)の方で任意のセル(日付)で、(A1:A20)、 (A1:B20)、(A1:C20)・・・・といった具合に範囲指定したいのです。 全く説明不足ですね。トーシローは質問の仕方もよく分からんもんです・・・ 宜しくお願いします。
- tksoft
- ベストアンサー率36% (99/273)
例えばSheet1のA1セルにB1:D6と入れてあるとすれば。 Sub SelectTest() Dim s As String s = Worksheets("Sheet1").Range("A1") Range(s).Select End Sub で範囲選択できます。あとはA1セルに任意の文字列(但し、Excelのセル範囲を指定できる文字列)をいれればOKです。
補足
早速の回答有難うございます。 任意のセルは文字列ではなく日付で対応させたいのですが 可能でしょうか? 宜しくお願いします。
- taknt
- ベストアンサー率19% (1556/7783)
a="A" b=1 range(a & b & ":" & a & b+5).select などというふうに変数で範囲指定ができます(未確認ですが) あとは、どのように変数にセットするかだけですけど。
補足
早速の回答有難うございます。 試してみた結果これ自体はうまくいくのですが a="A"の部分を1ならAのセル2ならBのセルという変数にしたいのですが 具体的には日付で対応する範囲をAから順順に増やしていきたいのですが 可能でしょうか? 宜しくお願いします。
お礼
ようやく、やりたい事ができました。 長々のお付き合い有難うございました。