- ベストアンサー
Excel VBAについての質問です
シート1のセルA1で文字が入力されたら3つ下へ(A4へ)、A4で文字が入力されたら3つ下(A7へ)…としたいのですが、どうすれば良いのですか? VBAを使う方法と使わない方法をそれぞれ、もしくは一方を教えて頂きたいのですが、よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
マクロだと副作用に頭を悩ます恐れがあるので、B列を作業列として使う方法を示します。 B4以下に式「=(MOD(Row(),3)=1)*1」をオートフィルします。 A,B列を選択して「データ」ー「フィルタ」-「オートフィルタ」します。 B1のリストから「1」を選択します。(これで4行目、7行目、・・・が選択されます) あとは、A列にデータを入力するだけです。
その他の回答 (2)
- imogasi
- ベストアンサー率27% (4737/17069)
エクセルで、こんなことを認識してない質問が結構ある。 「エクセルの数式は、セルに入れて後、そのセルに他の値や数式を入れると、そのセルの以前の値や数式は壊れてしまう。」 だからVBAを使わない方法というのは、エクセル関数しかないので、考えるほうがおかしい。(他は人間が計算して、セルに値を入れるのがあるが論外だろう) VBAにならざるを得ない。 それもイベントという仕組みを使わざるをえない。質問者のVBAの経験度合はどうなんだろう。経験があればもう少し質問が具体的に ピンポイントになるだろう。 色々の場合を考えると、難しい面があると思うが、セルの値のChangeイベントを使うしかないだろう。 「VB Change イベント」でGoogleででも照会して勉強したらよい。 ーー 課題によっては関数式でも入力した値はそのままで、作業セル的なセルを設けることで、できるばあいがあるように思う。 質問には>A1で文字が入力されたら3つ下へ(A4へ)、A4で文字が入力されたら3つ下(A7へ)…の背景(そうする理由)が具体的に書かれていないので、考えようが無い。 オレの考えたとおりやれ、という風だが、この質問ということではなく、一般論では、質問者の発想そのものが、至らない・難しくしている場合も考えられる。
お礼
初心者ですみません。
- DreamyCat
- ベストアンサー率56% (295/524)
これだけだと何か困る場合があるかもしれませんが、 入力があった場合にそのセルから3つ飛んでいきます。 Private Sub Worksheet_Change(ByVal Target As Range) Target.Offset(3).Activate End Sub
お礼
回答ありがとうございます。 入力に関してはOKですが、最後にA列を削除する所があるんですけど、そこでエラーになってしまします。
お礼
回答ありがとうございます。 こういう考えもあるんですね。勉強になります。 今回の質問は、質問の仕方が良くなかったみたいです。すみません。Worksheet_Changeイベントを使うと、最後にA列を削除する所が有るのですが、そこで引っかかってしまい、質問させていただきました。マクロを組まず、できればいいなと思っていたので、とてもうれしいです。 この方法を実行して気付いたのですが、B列にフラグを立てる事により、Worksheet_Changeイベントでもできることに気付きました。 ありがとうございました。