アプリ版:「スタンプのみでお礼する」機能のリリースについて

エクセル2000です。
「コントロールツールボックス」ではなく、「フォーム」のリストボックスで複数選択を可能とした場合、選ばれたのが何番目と何番目なのかを知る方法をご教示ください。
単一選択であれば「リンクするセル」に何番目か表示されるのですが、複数選択では0となってしまいます。

選択できる数を仮に4つまでに限定する方法ももしあれば教えてください。

複数選択以外に「拡張選択」というものもありますが、これはどういう使い方をするのでしょうか?

A 回答 (4件)

merlionXXさん、追伸です。



たまたま、今、本を開いたら、同じ内容のものが出てきまして、複数選択の時は、何かのタイミングで、初期化する、ということが書かれていました。考えてみれば、そのとおりですね。ListBox_Select4Only で、4つのみの選択は可能ですが、リストボックスのリセットとセットでお使いになったほうがよいです。

なお、以下の Worksheets("Sheet1"). という書き方は、本来は、シートモジュールに書くので、このような書き方はしなくてよいです。そのまま、何も付けずに、シートモジュールに書いてください。

 With ListBoxes(1)

'--------------------------------------
リストボックスのSelectのリセット
Sub ListboxReseting()
  Dim ar() As Variant
  Dim i As Integer
  With Worksheets("Sheet1").ListBoxes(1)
   ReDim ar(1 To .ListCount)
   For i = 1 To .ListCount
    ar(i) = False
   Next i
    .Selected = ar()
  End With
End Sub

リストボックスに、4つしか選べないコード
'ただし、複数選択モードのみ

Sub ListBox_Select4Only()
  Static oldAr() As Variant
  Dim Ar() As Variant
  Dim CountAr() As Variant
  Dim i As Integer
  Dim k As Integer
  With Worksheets("Sheet1").ListBoxes(1)
   Ar() = .Selected
   For i = 1 To .ListCount
     If Ar(i) Then
      k = k + 1
     End If
   Next i
   If k > 4 Then
     For i = 1 To .ListCount
      If Ar(i) Then
        If oldAr(i) <> Ar(i) And Ar(i) Then
         .Selected(i) = False
         MsgBox "その選択は出来ません。"
         Exit Sub
        End If
      End If
     Next i
   End If
   oldAr() = .Selected
  End With
End Sub
    • good
    • 0
この回答へのお礼

リセット方法および4つのみ選択の方法、ありがとうございました!!

お礼日時:2005/12/14 11:18

merlionXXさん、こんにちは。


Wendy02です。

>ReDimってどういう場合につかうんでしょうか?

配列の仕切り直しです。
配列は、入れ物が分かれていますが、単に、配列と宣言したところで、そのままでは入れ物がありませんので、入れ物の数を決めてあげるということです。

詳しい内容は、大村あつしさんの『かんたんプログラミング Excel VBA応用編』などに書かれています。配列を自由に使いこなせられるようになると、一応、基礎段階が終了するのかなって思います。そういう私は、未だ、完全に配列を使いこなせていないような気がします。VBAでは、あまり厳密な使い方を求められませんし、Version の違いもあるから、VB6完全準拠というわけにはいかないけれどね。
    • good
    • 0
この回答へのお礼

何度もありがとうございました。

お礼日時:2005/12/14 14:24

merlionXXさん、こんばんは。

Wendy02です。

すでに回答は出ていますが、

  ar = .Selected

以下のように、配列変数で受けられますので、そのを処理する方法はいくつかあるかと思います。

Sub ListBox_Selecting()
  Dim msg As String
  Dim ar() As Variant
  Dim i As Integer
  With Worksheets("Sheet1").ListBoxes(1)
   ReDim ar(0 To .ListCount)
   ar() = .Selected
   For i = 1 To .ListCount
     If ar(i) Then
      msg = msg & "," & i
     End If
   Next
  End With
  MsgBox Mid$(msg, 2)
End Sub

>選択できる数を仮に4つまでに限定する方法ももしあれば教えてください。

これは、良いアイデアがありませんね。
Selected されたもののCountすることは可能ですが、4つ以上押されたものに関して、どうやって、そのアイテムを取るのか、あまり良いアイデアがありません。その都度、クリアするなら別ですが。

モジュールレベルで、配列変数を置いて、次回のイベントを監視させるかなんて、考えましたが、あまり名案が浮かびません。

この回答への補足

ReDimってどういう場合につかうんでしょうか?

補足日時:2005/12/14 11:16
    • good
    • 0
この回答へのお礼

ありがとうございます。
出来ました。

お礼日時:2005/12/14 11:16

フォームのリストボックスで、複数選択や拡張選択を


指定した場合リンクするセルの設定は無視されるようです。
何番目が選択されているかを取得するには、
リストッボクスのSelectedプロパティの
True/Falseを調べるより無いように思います。

Sub test()
Dim i As Integer
For i = 1 To ActiveSheet.ListBoxes("List Box 1").ListCount
Debug.Print i & "番目:" & ActiveSheet.ListBoxes("List Box 1").Selected(i)
Next
End Sub

拡張選択については、リストボックスの項目を選択するときに
ShiftキーやCtrlキーを押しながら
クリックしてみれば、わかると思います。
    • good
    • 0
この回答へのお礼

ありがとうございます。

できました!

お礼日時:2005/12/14 11:15

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!