- ベストアンサー
マクロ初心者のための数量減少と戻るボタンの作成方法
- マクロ初心者のための数量減少と戻るボタンの作成方法について教えてください。
- 現在のマクロコードは、ダブルクリックで指定した場所の数量が一つずつ減っていき、「0」になるときに「Yes」「No」と表示されます。
- しかし、一回押せば数量が一つ減り、「0」になるときは「Yes」「No」の表示がなくなり、下のものが詰められるようにしたいです。また、間違えた場合に一つ前に戻れる「戻る」ボタンの作成方法も教えてください。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
質問者さんは、Office系のカテゴリではなく、こちらにお聞きなって、なおかつコードまで提供しているわけで、ご自身が初心者とは関係なく、回答側に高い期待をしているのだと思います。ただ、ご質問者さんは意図していなくても、ご質問内容は、ある程度VBAの心得がある人には、「ムチャぶり」で、かなり挑戦的な内容だと思います。 「ワークシート上の左マウスクリック」「戻る」という二点は、Excel VBAマクロでは常識的には不可能だと言われていることです。それを、あえて質問しているのだと思います。 回答者側としても、本当は、お茶をにごすような対応は出来ないと思います。出来ないなら、出来ない、出来るなら出来るという対応をすべきではないかと思います。ワークシートの左クリックは、私は、正直なところ、成功した経験もなく「自信なし」です。今の段階では、新しいイベントを、Classで作り、TimeProc 辺りでプロシージャでルーブさせることだと思いますが、本来のExcelの機能とぶつからないか不安が残ることです。ちょっとでも失敗すると、何の前触れもなく、入力中のExcelが忽然と消えます。 まず、お茶をにごすような、確実な所からです。 まず、左クリックとか、右クリックとか書いていませんから、「右マウス・クリック」を当面は採用して作ってみました。右クリックの反応があまり良くありません。これは、おそらく、Excel自体のイベントのサイクルの問題ではないかと思います。 'シートモジュール (コントロールツールのコマンドボタン×1 個--「戻る」) '※ ユーザー設定(データが3列ではない場合や、数値が3列目にない場合は、要変更) Dim arBuf As Variant Dim iRow As Long Dim iCol As Long Dim flg As Boolean Private Sub CommandButton1_Click() '戻るボタン On Error Resume Next If flg Then Cells(iRow, iCol - 2).Resize(, 3).Insert '※ flg = False End If Cells(iRow, iCol - 2).Resize(, 3).Value = arBuf '※ If Err.Number = 0 Then Beep End If On Error GoTo 0 End Sub Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean) '右クリック Cancel = True flg = False If Target.Column <> 3 Then Exit Sub 'C列に数字がある = 3 ※ If VarType(Target) <> vbDouble Then Exit Sub With Target arBuf = .Offset(, -2).Resize(, 3).Value 'データは3列 ※ iRow = .Row iCol = .Column If .Value > 0 Then .Value = .Value - 1 If .Value = 0 Then .Offset(, -2).Resize(, 3).Delete '※ flg = True End If End If End With End Sub
その他の回答 (3)
- tossy2011
- ベストアンサー率17% (3/17)
ご提示頂いた情報からすると、一行には一種類の品のみのようですね シートに対する左クリックは一般的にvbaに公開されてないイベントです。 取れないことはないですが初心者さんが制御するのは難易度が高いと思いますので 他の方も仰られているように右クリックなどにした方がよいと思います。 元の状態に戻す処理は「vba undo」、ボタンの作り方は「vba フォーム ボタン」などで検索してみてください
- layy
- ベストアンサー率23% (292/1222)
ダブルクリックや右クリックを認識して何か処理する、というのはありました。しかし、ワンクリックというのは普通の動きですし区別付かないからか処理を仕掛けるのは難しいようです。 C列に何もないときダブルクリックすると『‐1』が出現しまたクリックすると『‐2』になります。ここも判断必要です。 りんごのカウントの戻しは+1ですからできたとしても、行が消えた後の戻しは行全体のデータ保持が必要になってきます。 上記をふまえて、 カウント操作や消す操作は出来そうですが クリックのとき、というのができそうにないです。 構成を考えなおし、エクセルに限るのか、ということまで考えた方が良いです。
- layy
- ベストアンサー率23% (292/1222)
ダブルクリックかは記載しているイベントがBeforeDoubleClickなので、シングルクリックにするには違うイベントにする。 右クリックとかか。 YESNOが出るのはMSGBOXの応答判定です。MSGBOXの判定をしない。 『間違え』?、何をどう?、YESNOを出ないようにしたら間違えようがない。 YESNOとCANCELが出る3択のMSGBOXを学習する。 どの状態にしたいかにもよりますが、ダブルクリックでカウント上げて行挿入すれば戻りますか?、これなら今のを「戻る」に流用できます。 どんなイベント、コマンドあるかいろいろ検索してみると良い。 この質問は初心者レベルより高度と思います。どこまでわかりますか?。
補足
わたしがのせたコードは教えていただいたものなのですが、わたしがやりたい動作とは少し違うのです。 表1 表2 曜日 品物名 数量 曜日 品物名 数量 水曜 りんご 3 水曜 りんご 3 木曜 バナナ 5 → 土曜 ぶどう 1 土曜 ぶどう 1 例えば上のような表1があり、品物名をワンクリックすると数量が一つ減り、押し続けて「0」になると、下にあるものが上につめるようにしたいのです。例えばバナナを5回押したら上の表2のように、バナナの一覧が消えて、りんごの下にぶどうがくるようにしたいです。 そして、間違えたというのは、例えばバナナの数を減らすつもりがりんごの数を減らしてしまった場合など、「戻る」ボタンを押したら間違える前(つまり一つ前の状況に戻っていく)ようにしたいのです。 減るというコードはシートモジュールに、「戻る」というコードはボタンに貼り付けたいので、それぞれを教えていただきたいです。 わたしがのせたコードでは、ダブルクリック・yesno表示がでるとこがわたしののぞんでいることではないのです。 わたしはほとんど理解できていない初心者ですが、どうかよろしくお願いします。