• ベストアンサー

Excel 条件に従いセル移動するには

よろしくお願いいたします。 A列には入力したくない行に"a"が入力してあるとします。 B列に上の行から数値を入力していくのですが、数値を入力してEnterを押すと次のA列に"a"が入力されていない行のB列セルに移動するVBAを教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.3

シート名タブを右クリックしてコードの表示を選び,現れたシートに下記をコピー貼り付けます private sub Worksheet_Change(byval Target as excel.range)  if activecell.column <> 2 then exit sub  do until cells(activecell.row, "A") <> "a"   activecell.offset(1).select  loop end sub 入力して,B列にとどまった場合に作動します。(例えばTab入力でC列に移動するとかでは作動しない) #既出回答で寄せられているマクロも同様にして登録しますが,1枚のシートに複数のこれらのマクロを同時に書いて作動させることは(原則として)出来ません。皆さんの回答を試すときは,イチイチブックを(シートを)複写してそれぞれ独自に動作を確認してください。 #selectionchangeイベントを使うのも良い方法に思いましたが,aの行に用事があってデータを記入したい場合にも素直に出来なくなってしまうので注意が必要です。 #changeイベントは,ご相談で想定している「セルに記入してEnterした」ばかりでなく,たとえば「オッと書き間違えたDeleteで消しました」とか「コピー貼り付けやオートフィルドラッグ等で複数のセルにデータを記入した」「セルをまとめて選んで消去した・行挿入・行削除した」などでも起動します。そういった「想定外」操作において,用意したマクロが意図しない動作をしないかキチンとチェックしておく事が完成度を高めますので,一体どういう具合に動作したら(=どんなマクロにしとけば)一番使い勝手がイイのか良く検討してみてください。

gotomasa
質問者

補足

ご返答ありがとうございました。試してみたところほぼうまくいったのですが、B列だけでなくD列やG列でも同様の動きをさせたいときは、どう追加すればいいですか?

その他の回答 (5)

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.6

ん? >B列だけでなくD列やG列でも 変更前: if activecell.column <> 2 then exit sub 変更後: if application.intersect(activecell, range("B:B,D:D,G:G")) is nothing then exit sub 他にも,変更前のサンプルマクロを応用して「AND条件で,2でなく,4でもなく,6でもなければ即終了」のようにしてもOKです。 2とか4とは,もちろん2列目(B列)や4列目(D列)の事です。

gotomasa
質問者

お礼

できました!!大変参考になりました。ありがとうございました。今後もお世話になるかもしれません。よろしくお願いいたします。

  • nattocurry
  • ベストアンサー率31% (587/1853)
回答No.5

自分では作れないVBAマクロなんて厄介なものを使わずに、 オートフィルタで、A列が"a"じゃないものだけ表示させてから、普通にB列に入力していけば良いと思いますけど、それだと何か不都合でもありますか?

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.4

Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column = 2 Then 'MsgBox Target.Address i = Target.Row + 1 p1: If Cells(i, "A") = "a" Then i = i + 1 GoTo p1 Else Cells(i, "B").Select End If End If End Sub 既出回答に同じものがあれば、すみません無視してください。 例データ A列は入力全に設定有り(a以外の行を空白にしているが、何かa以外の文字が入っていても同じ。 下記は入力後の状態。 A列    B列 3 a 12 1 5 a a 7 a 3 a 6

gotomasa
質問者

お礼

ご返答ありがとうございました。試してみたところ、既出のものと同様ほぼうまくいきました。参考にさせていただきます。

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.2

こんにちは! 参考程度で・・・ Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Column = 2 And Selection.Count = 1 Then If Target.Offset(, -1) = "a" Then Target.Offset(1).Select End If End If End Sub こんな感じではどうでしょうか?m(__)m

gotomasa
質問者

お礼

ご返答ありがとうございました。試してみたところSelectionChangeではなくChangeのほうが都合がよかったので、そちらを採用することにしました。すごくシンプルでわかりやすかったです。

  • kmetu
  • ベストアンサー率41% (562/1346)
回答No.1

Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column = 2 Then For i = Target.Row + 1 To Rows.Count If Range("A" & i) <> "a" Then Exit For End If Next Range("B" & i).Select End If End Sub とかいかがですか。

gotomasa
質問者

お礼

お早いご返答ありがとうございました。試してみたところほぼうまくいきました。シンプルな内容で参考になりました。またよろしくお願いいたします。

関連するQ&A

  • エクセル2010 セルの移動設定について

    エクセル2010を使用しています。 入力するセルを2列(A,B)に限定し、A1入力後→Enter→B1に移動→Enter→A2に移動と、 右移動、左下移動のVBAまたは、設定を教えてください。

  • エクセルのセルをENTERで指定箇所に移動させる

    ということをしたいと思っています。といっても、そんなにややこしい移動でなく、 A1B1,A2B2,A3B3というように、 右に一度進んだら斜め下に行く、という作業を繰り返したいだけです。 つまり、B列の入力をした後は必ずA列に戻って次の行から入力できる状態にしたいのです。 なお、移動にはENTERを使いたいと思っています。 CTRLで入力するセルに順番と名前をつけてやる方法を自分で見つけてやってみたのですが、 これだと、一度でもこの範囲内からはずれてしまうと、また一からの入力になってしまいますし、 理想はこのA列B列のどこから入力を開始しても、B列入力の後は次の行のA列に移動する、ということなのですが、、、。 入力しないセルをロックして保護する、という方法もやってみたのですが、私が何か間違っているのでしょうか、C列をロックしてもうまくいきませんでした。 なぜこのようなことをしたいかというと、誰でも使いやすいフォーマットを作っておきたいため、 このようにセル移動するシートを作成したいのです。 どなたかもしいい案があればどうぞお願いいたします。

  • Excelでセルを次の行の先頭の列に移動させる方法を教えてください。

    Excelでセルを次の行の先頭の列に移動させる方法があれば教えてください。 例えば、A1、B1、C1と順に入力し、C1のセルでEnterキーを押すと次の行の先頭列A2に入力セルが移動されるといった場合です。

  • エクセルでセルの移動について

    例えば、まずA1セルに入力します。次にenterキーを押すとA3に、次に押すとB1に移動って出来ますか? お願いします。

  • エクセルでセル移動について

    エクセルのA1からD10の表に縦に数値を入力します。 各列によって空白のセルがあります。 A列の入力が終わればB1に、B列の入力が終わればC1に セル移動するにはどうすればいいでしょうか? (空白セルがあるため、Ctlキー+↑キーでは上手くいきません。) 教えて下さい。よろしくお願いします。  

  • エクセルの入力でセル移動

    MSのエクセルで、セルに指定された文字数を入力したらEnterや矢印キーを押さなくても次のセルに移動させる方法はないでしょうか? 例えばA1セルに入力出来る文字数は3と指定しておきます。A1セルに3文字入力したら、次のセルA2に移動するようにする方法です。入力規則で文字列指定まではできますが、次にセルに移動するにはEnterなどが必要です。これを省略する方法です。 バージョンは2003ですが、2007,2010でできるのでしたらそのバージョンでも構いません。

  • Excel2007 セルの移動

    セルに数値を入力しています。 A1 B1 A2 B2 と2行2列のセルに数字を拾い入力します。 セル移動は右と指定してあります。 B1入力後A2へ移動する際方向キーやマウスを使わず 左下移動するショートカットキーはないでしょうか? マクロも記録程度ならできますので ご教授いただきたいです。

  • Excelのセル移動 最終列から行のトップへ移動するには

    例えばA1からE5の表で、セルを列方向(A1⇒B1⇒・・・E1)に移動させ、最終列までくれば次ぎの行のトップ(E1でEnterを押せばA2に移動させたい)にセルを移動したいのですが、今はTabで列を移動し、最終列でEnterで行なっています。全てEnterでできると聞いたのですが、どなたかご存知の方教えてください。よろしくお願いします。

  • セル移動マクロを教えて下さい。

    エクセルで最終行の次の行(新規入力となる行)の左4つ目のセルに移動するマクロを作りたいのですが、出来るでしょうか。 例えば列Aに1から3000までのNOが入っているとします。 B列からD列までは他のデータに使用しているため新規入力データE列の行から右に入力しています。 NO125の行までデータ入力している場合、ボタンをクリックすれば、A列のNO126(新規入力行のA列)にセルが移動するマクロです。 よろしく、お願いいたします。

  • Excelでenterを押した後任意のセルに移動

    Excel VBAの初心者です、宜しくお願いいたします。 VBAで集計表を作成しているのですがExcelのオプションから設定してシートの保護で入力可能なセルを選びVBAを実行するとシートは保護されていますとメッセージが出て使えません。 A1を入力後EnterでA3へ移動、次にEnterでA6へとセルを移動させたいのです、VBAでの構文はどの様に作ればよいのかご伝授頂きたく宜しくお願いいたします。 Excel 2002、3、7を使用しています。  

専門家に質問してみよう