1

最近、Excel VBAで、ユーザーが2つの数値を入力して、自動的に次の行にドロップできるマクロを作成できるかどうか尋ねられました。これの目的は、入力が苦手なため、Enterキーを押さなくても、一度に2つの数字でテストの成績を入力できるようにすることです。

これを最初に聞いたとき、彼はそれがVisual Basicであると言ったので、セル範囲でTextChangingまたはTextChangedイベントを使用して、それをうまく機能させると思いました。しかし、これまでのところ、そのようなイベントやそれに類似したものはドキュメントで見つけることができませんでした。私が最初に出会ったのはWorkbook_Changeでしたが、Enterキーを押した後にのみ変更され、私には役に立ちません。他の誰かがそのようなイベントがあると言いましたが、それを直接名前を付けることができず、私は彼らが話していることを見つけることができませんでした。

そのようなイベントが存在するか、または可能であるかについて誰かが何か情報を持っているなら、私は知りたいです。

私の知る限り、Excelのバージョンは2007年です。

4

3 に答える 3

3

私の意見では、これにはプログラミング以外のソリューションが必要です。私は絶対に同情します-人々が年をとるのを見るのは難しいです-しかしあなたは彼らのためにそしてあなたのためにどこかに線を引かなければなりません。エンターキーは、コンピューターの最も基本的な部分です。Excelで偶数(または奇数)のキーストロークごとに自動的にEnterキーを押すマクロを作成することもできますが、通常はdeleteを使用できないなどの他の問題が発生します。また、セルにテキストの文字列(学生の名前など)を入れたい場合はどうなりますか?おそらく、プログラミング以外の解決策を見つける時が来たのでしょう。つまり、誰かが問題をどのように解決したいかについて彼と率直な会話をする必要があるということです。個人的に、私は彼のために番号を入力することを提案します、

Excelのセル編集モードの制限に関するこのディスカッションを参照してください: http ://www.mrexcel.com/forum/excel-questions/524860-call-macro-every-keystroke.html

プログラミングソリューションに心を奪われているのであれば、ある種のキーストロークロギングアドインをお勧めします。

幸運を。

于 2012-09-26T15:45:57.957 に答える
0

Excel 2003では(Excel2007では異なる場合がありますか?!)WorkSheet_Changeイベントは、セルの値が変更されるたびにトリガーされます。セルの値が変更されるたびに、Enterキーを押したり、削除したり、セルを変更した後、またはvbaスクリプトの場合でも他のセルを選択したりします。セルの値を変更します。

私はそのようなことをします:

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim RefRange As Range
    Set RefRange = Intersect(ActiveSheet.Columns("??????????"), ActiveSheet.UsedRange)
    If Not Intersect(Target, RefRange) Is Nothing Then
        Target.Offset(0, 1).EntireColumn.Range("A1").Select
        'Target.Offset(0, 1).EntireColumn.Range("A65536").End(xlUp).Offset(1,0).Select
    End If
End Sub
于 2012-09-26T15:42:05.070 に答える
0

イベントを利用できますWorksheet_SelectionChange。入力せずにトリガーされますが、多くトリガーされます。

ただし、データを入力するための特別なユーザーフォームを作成することもできますが、これは必要以上に手間がかかる場合があります。

私が提案したイベントを使用する際の主な問題は、次の行を選択するときにトリガーとして必要になり、自分でトリガーするため、選択を変更する前にイベント処理を無効にすることです。


編集:

これは簡単な解決策です(これを目的のワークシートのvbaコードに貼り付けます)。

Private Const clngColumnRightToLastGrade = 5

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  If Target.Column = clngColumnRightToLastGrade Then
    Application.EnableEvents = False
    'offset selection, one row down, two cols to left
    Target.Offset(1, -2).Select
    Application.EnableEvents = True
  End If
End Sub

これにより、選択が列E()に変わるたびに、1行下の列Cに設定されます=5

もちろん、定数を使用する必要はありません。ブックで検出する列を指定できるため、ユーザーが自分で簡単に変更できる場合があります。

これをオプション機能にするために、自動生成されたコードに拡張することができます。私が念頭に置いているのは、構成するsetupFormを開くリボンボタンと、構成をアクティブ化するリボンボタンのようなものです。これにより、このコードが構成されたシートに配置されます。しかし、これは少しやり過ぎかもしれません。

于 2012-09-26T14:54:47.563 に答える