Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


1443 / 13646 ツリー ←次へ | 前へ→

【74462】シート上のスピンボタン spinupとspindownを登録するには? 13/6/21(金) 10:52 質問[未読]
【74463】Re:シート上のスピンボタン spinupとspin... kanabun 13/6/21(金) 11:09 発言[未読]
【74465】Re:シート上のスピンボタン spinupとspin... 13/6/21(金) 11:20 お礼[未読]
【74467】Re:シート上のスピンボタン spinupとspin... kanabun 13/6/21(金) 12:08 発言[未読]
【74468】Re:シート上のスピンボタン spinupとspin... 13/6/21(金) 12:23 お礼[未読]
【74469】Re:シート上のスピンボタン spinupとspin... kanabun 13/6/21(金) 13:32 発言[未読]
【74470】Re:シート上のスピンボタン spinupとspin... 13/6/21(金) 15:13 お礼[未読]
【74471】Re:シート上のスピンボタン spinupとspin... 13/6/21(金) 16:00 お礼[未読]
【74464】Re:シート上のスピンボタン spinupとspin... kanabun 13/6/21(金) 11:18 発言[未読]
【74466】Re:シート上のスピンボタン spinupとspin... 13/6/21(金) 11:22 お礼[未読]

【74462】シート上のスピンボタン spinupとspind...
質問    - 13/6/21(金) 10:52 -

引用なし
パスワード
   お世話になります。
皆様のお知恵を貸していただきたく、宜しくお願いします。

エクセル(2002)にてシートにスピンボタンを配置しています。

・A1セルが【リンゴ】→B1セルの値を上下
・A1セルが【みかん】→B2セルの値を上下
・A1セルが【バナナ】→B3セルの値を上下
といった具合に、スピンボタンにリンクさせるセルを
条件によって変えたいと思っています。

そこで、Sub SpinButton1_SpinUp() とSub SpinButton1_SpinDown()
をモジュール1に書き込んだのですが
シート上のスピンボタンにはマクロが1つしか登録できません。

どのようにすれば、spinupとspindownを両方機能させる
ことができるのでしょうか?

調べても、ユーザーフォームを使用する際のことしか出てこないので
困っております。

Sub SpinButton1_Change()を使うのでしょうか?

以上、宜しくお願いいたします。

【74463】Re:シート上のスピンボタン spinupとsp...
発言  kanabun  - 13/6/21(金) 11:09 -

引用なし
パスワード
   ▼豆 さん:

>そこで、Sub SpinButton1_SpinUp() とSub SpinButton1_SpinDown()
>をモジュール1に書き込んだのですが
>シート上のスピンボタンにはマクロが1つしか登録できません。

SpinButton1_SpinUp() や SpinButton1_SpinDown() は
イベントプロシージャといって、ボタンに登録しなくても
たとえば、スピンボタンが▲をクリックすれば
SpinButton1_SpinUp() イベントが起きるので、そこにしたいことを
書いておけばいいです。
スピンボタンを▼したときにしたいことは
Sub SpinButton1_SpinDown()
に書いておけばいいです。

'------------------------- シートモジュール

Private Sub SpinButton1_SpinDown()
  UpDown -1
End Sub

Private Sub SpinButton1_SpinUp()
  UpDown 1
End Sub

Private Sub UpDown(num&)
  Select Case [A1].Value
   Case "リンゴ"
     [B1].Value = [B1].Value + num
   Case "みかん"
     [B2].Value = [B2].Value + num
   Case "バナナ"
     [B3].Value = [B3].Value + num
  End Select
End Sub

【74464】Re:シート上のスピンボタン spinupとsp...
発言  kanabun  - 13/6/21(金) 11:18 -

引用なし
パスワード
   それから

[A1]セルは 手入力するの大変そうだから、
あらかじめ メニュ−[データ]-[入力規則]で
ドロップダウンリストから表示するようにしておいた方が楽だね

入力方法
リストから
  リンゴ,みかん,ばなな

【74465】Re:シート上のスピンボタン spinupとsp...
お礼    - 13/6/21(金) 11:20 -

引用なし
パスワード
   ▼kanabun さん:

大変すばやい回答をありがとうございます。
初心者なので、とんちんかんなことを言っているかもしれませんが
なにとぞご容赦ください。

イベントプロシージャであるということ、了解いたしました。

書いていただいたコードをそのままシートモジュールに
転記したところ、反応がありません。

恥ずかしながら
・UpDown 1
・(num&)
・[B1]
のような表現を初めて見たもので、
そのまま使用してよいのかがわかりません。

アドバイスのほど、宜しくお願いいたします。

-----------------------------

参考までに、自分で書いたコードは下記になります。spinupの場合です。

  If InStr(ActiveSheet.Range("A1").Value, "リンゴ") > 0 Then
    Sheet1.Range("B1").Value = Sheet1.Range("B1").Value + 1
  
  ElseIf InStr(ActiveSheet.Range("A1").Value, "みかん") > 0 Then
    Sheet1.Range("B2").Value = Sheet1.Range("B2").Value + 1
  
  ElseIf InStr(ActiveSheet.Range("A1").Value, "バナナ") > 0 Then
    Sheet1.Range("B3").Value = Sheet1.Range("B3").Value + 1

  End If

【74466】Re:シート上のスピンボタン spinupとsp...
お礼    - 13/6/21(金) 11:22 -

引用なし
パスワード
   ▼kanabun さん:

こちらのアドバイスも、合わせてお礼申し上げます。

【74467】Re:シート上のスピンボタン spinupとsp...
発言  kanabun  - 13/6/21(金) 12:08 -

引用なし
パスワード
   ▼豆 さん:

>書いていただいたコードをそのままシートモジュールに
>転記したところ、反応がありません。

デザインモードは終了してますか?


>恥ずかしながら
>・UpDown 1
>・(num&)
>・[B1]
>のような表現を初めて見たもので、
>そのまま使用してよいのかがわかりません。

そのまま使用していただけます(^^
なお、

Private Sub UpDown(num&)

というのは昔風にいえば サブルーティン ってやつで、
SpinUpイベントでも SpinDown イベントでも +1 するか、 -1 するか
がちがうだけで、やることはほぼ同じなので、サブプロシージャに独立させて
共通に使います。

SpinUp イベントが起こると

Private Sub SpinButton1_SpinUp()
  UpDown 1
End Sub

のように UpDown サブルーティンを 引数+1 を携えて呼び出します。
(呼び出し側
   UpDown 1 ← この +1 が
 呼び出し先の
 Private Sub UpDown(num&) 
           ↑この num& に渡されます。

共通プロシージャでやっていることは お分かりですよね?

>Private Sub UpDown(num&)
>  Select Case [A1].Value
>   Case "リンゴ"
>     [B1].Value = [B1].Value + num
>   Case "みかん"
>     [B2].Value = [B2].Value + num
>   Case "バナナ"
>     [B3].Value = [B3].Value + num
>  End Select
>End Sub

日本語(疑似コード)にすると、

[A1]セルの値が

 もし"リンゴ" なら、[B1]セルの値を1つ(Up/Down)する

 もし"みかん" なら、[B2]セルの値を1つ(Up/Down)する

 もし"バナナ" なら、[B3]セルの値を1つ(Up/Down)する

End Select

ということです。
なお、[A1] は Range("A1") の簡略表記です。

【74468】Re:シート上のスピンボタン spinupとsp...
お礼    - 13/6/21(金) 12:23 -

引用なし
パスワード
   ▼kanabun さん:

kanabunさん、非常にわかりやすい説明をありがとうございます。
今とても感動しています!

共通プロシージャを使えば、今まで無駄に長く書いていたコードが
すごく短くなりそうです^^

[A1]という表記も、先ほど始めて知ったものですから
これから活用していきたいと思います。

デザインモードは終了しているのですが…
なぜか反応がありません。
(三角定規と鉛筆のアイコンですよね?)

大変お手数をおかけして恐縮ですが、引き続きご教示いただきたく
お願い申し上げます。

【74469】Re:シート上のスピンボタン spinupとsp...
発言  kanabun  - 13/6/21(金) 13:32 -

引用なし
パスワード
   ▼豆 さん:

>デザインモードは終了しているのですが…
>なぜか反応がありません。

だと分らないですねぇ

イベントコードは「スピンボタンのあるシート」にコピーしたんですよね?

【74470】Re:シート上のスピンボタン spinupとsp...
お礼    - 13/6/21(金) 15:13 -

引用なし
パスワード
   ▼kanabun さん:

そうですね、スピンボタンをおいたSheet1のモジュールに
コピーしました。

エクセルのバージョンが古いからとかでしょうか。。

もう少しいろいろ調べたりいじってみます。
ご丁寧にありがとうございます。

【74471】Re:シート上のスピンボタン spinupとsp...
お礼    - 13/6/21(金) 16:00 -

引用なし
パスワード
   ▼kanabun さん:

お世話になっております。

当該のスピンボタンのプロパティを見たところ、
オブジェクト名がなぜかSheet1になっていました。

ですので、新しいファイルを開いて新しいスピンボタンを
作成したところ、オブジェクト名はSpinButton1になっていました。

それを確認した上で、同じコードをモジュールに書き込んだところ
今度こそ正しく動作しました!

kanabunさん、長々とお付き合いいただき
本当にありがとうございました。

今回の内容を踏まえて、もっとVBAの勉強をしたいと思います。
この度は本当にありがとうございました。

1443 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free