- ベストアンサー
エクセルで条件にあったセル移動
- エクセルの表で、商品コードを入力した後に条件を加味して買取在庫数か委託在庫数のセルに自動で移動し、在庫数を入力する方法について質問します。
- 現在は商品コード入力後に手動でセルを移動して在庫数を入力していますが、自動で移動させる方法があれば教えてください。
- 条件によって自動的にセルを移動させる方法を探しています。エクセル2003を使用しています。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
見出し: 1行目 データ: 2行目~ 使用列: A~E列 ----------------------------------------------- ●処理内容● A列に入力があったら、C列をチェックして次のようにする ----------------------------- (買取)の場合 E列をクリアーして、D列に飛ぶ D列の入力後、次行のA列へ飛ぶ ------------------------------ (委託)の場合 D列をクリアーして、E列に飛ぶ E列の入力後、次行のA列へ飛ぶ ----------------------------------------------- '----------------------------------------------- Private Sub Worksheet_Change(ByVal Target As Range) If Target.Count > 1 Then Exit Sub If Target.Row < 2 Then Exit Sub Application.EnableEvents = False Select Case Target.Column Case 1 If Cells(Target.Row, "C").Value = "買取" Then Cells(Target.Row, "E").ClearContents Cells(Target.Row, "D").Select Else Cells(Target.Row, "D").ClearContents Cells(Target.Row, "E").Select End If Case 4, 5 Cells(Target.Row + 1, "A").Select End Select Application.EnableEvents = True End Sub '--------------------------------------------- D列入力前に、E列クリアー E列入力前に、D列クリアー をするのは、最初、買取で入力があったものを 委託のコードに修正した場合とか、その逆の場合のため 要するに、入力済みの修正の場合、ということです。 以上ここまで
その他の回答 (3)
- imogasi
- ベストアンサー率27% (4737/17069)
エクセルで本質問のような「やりたいことを実現する」なら (1)手作業 (2)VBA (3)何かエクセルに備わった特別のプログラム(本件では該当しない) しかありません。 (1)に不満が有るから質問したのでしょうが。 ここで「関数」と言う解決法を、挙げていないことに注意してください。 関数はセルの値を作るもので、カーソルを左右することは出来ません。 ーー ただし姑息なやり方で 一旦D列(従ってもとのD,E列は右にずらす)に在庫数を入力し 下記でーは空白の代わり。 D列 E列 F列 GH列 買・委 入力 買取 委託 買取 10 10 買取 30 30 委託 20 ー 20 買取 40 40 委託 20 ー 20 G2は =IF($D2="買取",$E2,"") H2は =IF($D2="委託",$E2,"") と関数を入れておく。 下方向に式を複写する。 本来不要な列を使ってしまうが、原因は無理難題なのだ。 ーーー VBAではD列が買取か委託によって選択するセルを左右するコードを作る。 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column = 4 Then 'D列なら Select Case Target Case "買取" Target.Offset(0, 1).Select Case "委託" Target.Offset(0, 2).Select End Select Else If Target.Column = 5 Or 6 Then '計数入力セルの列なら Cells(Target.Row + 1, 4).Select End If End If End Sub ーーー データ例 買取 12 委託 23 委託 33 委託 35 買取 45 VBAの経験はないのでは、と思うので、質問者には本件無理と思う。 ーーー D列の入力は、入力規則の「リスト」設定を考えるべきです。ご存知なのかな。初耳ならGoogleで「エクセル 入力規則 リスト」で照会して勉強のこと。
お礼
お返事ありがとうございます。 また、課題もいただきありがとうございます。 いろいろと勉強しようと思います。
- hallo-2007
- ベストアンサー率41% (888/2115)
VLOOKUP関数でのエラーがなければ Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column = 1 Then If Target.Offset(0, 2).Value = "委託" Then Target.Offset(0, 3).Activate Else Target.Offset(0, 4).Activate End If End If End Sub 感じでもOKではないでしょうか。
補足
早々のお返事ありがとうございます。 早速ためさせていただきましたところ、 無事に商品コード入力後に条件にあった在庫のセルへは移動できました。 しかし、在庫入力後のEnterでは 入力した在庫のセルの下へ移動してしまいました。 在庫入力後のEnterで 次行A列へ移動して商品コードを入力出来るのが希望なのです。 もうお一方からの回答も同様でしたので 私の説明がいたらなかったようです申し訳ありません。 参考URL内にある↓ Cells(Target.Row + 1, 1).Select を用いて 次行へ移動できるか現在あたまをヒネッております。
次のコードを、記載回答の代わりに使用してください。エラー処理は厳密にやっていませんので、あしからず。 Private Sub Worksheet_Change(ByVal Target As Range) On Error GoTo ErroHandler If ActiveCell.Column = 1 Then ActiveCell.Offset(-1, 2).Activate Select Case ActiveCell.Value Case "買取" ActiveCell.Offset(0, 1).Activate Case "委託" ActiveCell.Offset(0, 2).Activate End Select End If ErroHandler: End Sub
補足
早々のお返事ありがとうございます。 早速ためさせていただきましたところ、 無事に商品コード入力後に条件にあった在庫のセルへは移動できました。 しかし、在庫入力後のEnterでは 入力した在庫のセルの下へ移動してしまいました。 在庫入力後のEnterで 次行A列へ移動して商品コードを入力出来るのが希望なのです。 もうお一方からの回答も同様でしたので 私の説明がいたらなかったようです申し訳ありません。
お礼
お返事いただきありがとうございます。 早速試させていただき無事に希望の動作が出来ました。 あれこれ試行錯誤中だったのですが、次行へ移動する部分も勉強になりました。 作業効率大幅アップです。 本当にありがとうございました。