- ベストアンサー
VBAアクティブセルの作業に関する質問
- VBAを使用してアクティブセルに対して作業を行う方法を教えてください。
- 具体的には、アクティブセルを指定して、セルの値をコピーし、オフセットした位置にペーストする方法と、フィルダウンさせる方法について教えてください。
- 変数の使い方についても教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
(1)のVBAの一例としては以下の様なVBAとなります。 Sub QNo9157101_VBA_アクティブセルに対しての作業に関して1() Const OffsetValueCell = "O1991" Dim buf As Variant, myOffset As Long buf = Range(OffsetValueCell).Value If buf <> "" And IsNumeric(buf) Then _ myOffset = Int(buf) With Application .ScreenUpdating = False .Calculation = xlManual End With If buf = myOffset And myOffset + ActiveCell.Row >= 1 _ And myOffset + ActiveCell.Row <= Rows.Count Then ActiveCell.Offset(myOffset).Value = ActiveCell.Value Else MsgBox OffsetValueCell _ & "セルに入力された値が、現在選択されている" _ & "セルの行番号に対して有効な範囲にありません" End If With Application .Calculation = xlAutomatic .ScreenUpdating = True End With End Sub (2)のVBAの一例としては以下の様なVBAとなります。 Sub QNo9157101_VBA_アクティブセルに対しての作業に関して2() Const OffsetValueCell = "O1991" Dim buf As Variant, myOffset As Long buf = Range(OffsetValueCell).Value If buf <> "" And IsNumeric(buf) Then _ myOffset = Int(buf) With Application .ScreenUpdating = False .Calculation = xlManual End With If buf = myOffset And myOffset + ActiveCell.Row >= 1 _ And myOffset + ActiveCell.Row <= Rows.Count Then Range(ActiveCell, ActiveCell.Offset(myOffset)).Value = ActiveCell.Value Else MsgBox OffsetValueCell _ & "セルに入力された値が、現在選択されている" _ & "セルの行番号に対して有効な範囲にありません" End If With Application .Calculation = xlAutomatic .ScreenUpdating = True End With End Sub
その他の回答 (1)
- imogasi
- ベストアンサー率27% (4737/17069)
この質問は2通前後して同じものが重複してませんか。質問が長く1字1句比較してませんが。 ーーー エクセルVBAには、イベントプロシージュアーという仕組みがあります。 それを考えないでよいところの、質問者のニーズですか。初心者らしいので意識してないのだろうが。 >アクティブセルを指定した段階で 普通の例では、Activateイベントの中に、コピーと貼り付けを済ませイベントを無効にして終わるのかと思うが、するとそれ以後のActivateイベントは働かなるし、有効にしておくと、 操作者の他の作業のステップで、どこかのセルをアクチブにした時も、このイベントプロシが働いて、おかしなことになり、困るとおもう。 それでActivateイベントの効果を発揮するセル(番地)を、イベントの中で限定するのだが、本質問では、アクチブにする番地を固定できない(しない)ことを考えているらしい。 イベントの考えは、便利(必須の場合があるの)ですが、初心者には、むつかしく、勉強や経験が進んでから、本件を考えてはどうだろう。 とりあえず、イベント利用になりますが、コマンドボタンを設けて、本件の実行は操作者がコマンドボタンを押したときに実行する仕組みにしては。 ーー 質問者が聞いていることと、違う方向のアドバイスかもしれないが、質問者が初心者とすれば、こういう方向違いのコード例例を出している質問になる恐れがある。そういうこわいケースではないか?それに引きずられて回答すると間違うので。 ーー (初心者の場合は、自分で作ったコードそのものに、見当はずれの場合も多いので)コードを長々と記述するのでなく、文章で 「どこそこのセル(セル番地は不定で、かつ時をおいて、2回以上指定があり得るを)をクリックしたら、O列1991行(固定か?)にアクチブセルの値と書式を張り付けたい」など。(これは推測で書いているが)。コピーの点も、小生が思うには、コピーでなく、右辺の=XXによる、値の代入で済むのでは。 と表現すべきだと思う。初心者はコー貼り付けを好むが、VBA対象のデータの場合は、代入で済む場合が多い。 ーー 不勉強化もしれないがオフセット(値)にセル番地を指定している例も解説書で出くわしたことがない。もし固定セルならOffsetを使わなくてよいのでは。
お礼
返事が遅れてしまいましたことお詫びします ごめんなさい(:>_<:謝 またこういった知識等身に付けるにあたり お勧めの本やサイトがございましたら差し支えのない 範囲で構わないので教えてくださいね それでは長文では相手にも目を疲れさせてしまうので これで失礼させて頂きますね(゜д゜)/
お礼
返事が遅れてしまいましたことお詫びします ごめんなさい(:>_<:謝 説明不足によりやりたいことが伝わりにくいかなと内心不安でしたが コード表記載せていただきまして大変恐ありがとうございました♪≧∀≦ まだまだVBAや関数は初心者で、色々と説明不足な点も多々多くあると思いますが 機会があれば、ご教授のほど宜しくお願い致します (>_<一礼)ペコリ それでは長文では相手にも目を疲れさせてしまうので これで失礼させて頂きますね(゜д゜)/ 色々助言頂きましてどうも ありがとうございました(>_<)ペコッ