Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 7 Professional : Excel 2010)
OFFSET関数の基準を可変にしたい
投稿日時: 18/11/05 10:58:18
投稿者: NagaNaga97

OFFSET関数は、
OFFSET(基準,行数,列数,高さ,幅)
という構成ですが、この"基準"を固定値ではなく可変にして選択範囲を設定したいのですが、
そのやり方がわかりません。
具体的には、普通は
Range("Offset(BM3,0,0,$A$1,1)").Selectのように記述しますが、
この"BM3"を
For Nextで、移して現在のACTIVECELLにしたいのです。
 
色々調べたのですが、見つからなかったので、教えて頂ければ幸いです。

回答
投稿日時: 18/11/05 13:22:47
投稿者: WinArrow
投稿者のウェブサイトに移動

ワークシート関数とVBA記述と混乱していませんか?
 
ワークシート関数の
OFFSET

VBAの
OFFSET
は、使い方が異なります。
  
ワークシートでは
BM3の1行した、1列右という場合。
=OFFSET(BM3,1,1)
と入力しますが
  
VBAでは
Range("BM3").Offset(1,1)
と記述します。
Activecell
にするのは、
Activecell.Offset(1,1)
とするだけでOKです。
  
  

回答
投稿日時: 18/11/06 11:54:44
投稿者: WinArrow
投稿者のウェブサイトに移動

例示のスタイルを使うとしたら
 
    Range("OFFSET(" & ActiveCell.Address & ",0,0,$A$1,1)").Select
 
こんな感じになるでしょう。
 
VBAのOFFSETプロパティでは
 
    ActiveCell.Offset(0, 0).Resize(Range("A1").Value, 1).Select
 
という感じです。

回答
投稿日時: 18/11/06 18:21:20
投稿者: WinArrow
投稿者のウェブサイトに移動

引用:

具体的には、普通は
Range("Offset(BM3,0,0,$A$1,1)").Selectのように記述しますが

 
質問者さんは「普通」と書かれていますが、
シートを選択する
という前提で考えているならば「普通」かもしれませんが、
処理の効率化を前提とした
シートを選択しない
記述では、若干の違和感があります。
 

回答
投稿日時: 18/11/06 19:47:38
投稿者: WinArrow
投稿者のウェブサイトに移動

WinArrow さんの引用:

例示のスタイルを使うとしたら
 
    Range("OFFSET(" & ActiveCell.Address & ",0,0,$A$1,1)").Select
 
こんな感じになるでしょう。
 
VBAのOFFSETプロパティでは
 
    ActiveCell.Offset(0, 0).Resize(Range("A1").Value, 1).Select
 
という感じです。

 
よく考えたら、
後者のコードについて
Offset部分は不要だよね。
間違いではないが・・・・
 

投稿日時: 18/11/07 12:43:45
投稿者: NagaNaga97

WinArrow様、ご回答ありがとうございます。
 
Range("OFFSET(" & ActiveCell.Address & ",0,0,$A$1,1)").Select
で狙い通りの作動となりました。
 
一般的なプログラムでなないので、苦労しましたが、とても助かりました。
本当にありがとうございます。[/quote]