Excel VBA質問箱 IV

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

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


14654 / 76734 ←次へ | 前へ→

【67569】Re:ActiveSheetにあるCombobxの値
発言  kanabun  - 10/12/14(火) 13:08 -

引用なし
パスワード
   ▼ichi さん:
>Sub Make_DropDown()
プロシージャは 一回こっきりの処理なので、マクロでしなくとも
手動で作ってもいいのでは?と思いました。

どうしてもマクロでやりたい、何らかの理由がおありなら、
>    ActiveSheet.DropDowns.Add(200, 15, 70, 15).Select
> 1) ここの座標値(200, 15, 70, 15).ですが座標値(ポイント値)
>    の決め方が不明で 200,15 は適当に決め配置したい場所を
>    探って決めました
>    座標値の基準が解りません

セルでいうとどのあたりですか?
たとえば [B10]セルのうえにDropDownを置きたいのなら、
 Sub Make_DropDown()
  Dim c As Range
  With ActiveSheet
    set c = .Range("B10")
    With .DropDowns.Add(c.Left, c.Top, c.Width*1.5, c.Height*1.5)
     .Name = "myCombo"
     .ListFillRange = "コード!$B$4:$B$7"
     .LinkedCell = "$B$4"
     .DropDownLines = 8
     .OnAction = "Mycomb_Change"
    End With
  End With
End Sub
といった感じです。このばあい、DropDownは[B10]セルの左上から始まり、
横幅、高さが[B10]セルの1.5倍のサイズになります。

なんども言いますけど、一回だけの処理なので、手操作で作ったほうが
速いかと思いますが。

> Sub Mycomb_Change()
>   With ActiveSheet
>     .DropDowns (Application.Caller)
>     .DropDowns ("myCombo")
>      ' ActiveSheet.Range("A4").Value = .List(.ListIndex)
>  2)  ここでエラーがでましたので コメント にしました
>     .Range("K4").Value = ActiveSheet.DropDowns("myCombo").ListIndex
>  3)  Range("K4").Value には選択された項目の順番(2番目なら2が)
>      書かれ 項目名を書きたいのですが   
>   End With
>     ActiveSheet.Shapes("myCombo").Select
>     Selection.Cut
> End Sub

With の使い方がおかしいですね?
> Sub Mycomb_Change()
   With ActiveSheet.DropDowns(Application.Caller)
    ActiveSheet.Range("A4").Value = .List(.ListIndex)
>   End With
> End Sub
くらいでどうでしょう?

こう書いておくと、
DropDown(名前「myCombo」)には
>  .OnAction = "Mycomb_Change"
とマクロの登録がしてありますから、
▼ドロップダウンリストからいずれかのリストアイテムが選択されると、
標準モジュールの「Mycomb_Change」にプログラムの実行が移ります。
  ▼
> Sub Mycomb_Change()
>   With ActiveSheet.DropDowns(Application.Caller)
  Application.Caller には 呼び出し元のコントロールの名前が入っています。
  つまり、上の文は、
  With ActiveSheet.DropDowns("myCombo")
 と同じです。
  (じゃぁ、はじめからそう書いとけばいいじゃん?
 ということになりますが、複数のドロップダウンをシート上に配置し、
 それらすべてに .OnActionで同じマクロMycomb_Change() を登録して
 呼び出し元のコントロール名 Callerにより処理を分岐するといった
 使い方ができるようになるので、具体的なドロップダウンの名前で
  なく Application.Caller と名前を特定しない書き方をしています)

>   With ActiveSheet.DropDowns(Application.Caller)
>    ActiveSheet.Range("A4").Value = .List(.ListIndex)
>   End With

これだけで、シートの[A4]セルに いま選択されたドロップダウン内の
選択アイテム(値)が代入されるわけですが、これを With句を
使わないで日本語で書くと こういう構文になります:
  ActiveSheetの[A4]セルに、
   ActiveSheetのドロップダウン"myCombo"のいま選択されている
   行(.ListIndex) の内容(.List) を
  代入せよ
という意味になります。

日本語に置き換えてみれば、そんなに難しくないですよね

>  .Range("K4").Value = ActiveSheet.DropDowns("myCombo").ListIndex
> 3)  Range("K4").Value には選択された項目の順番(2番目なら2が)
>  書かれ 項目名を書きたいのですが 


実を言いますと、選択された項目番号.ListIndexは
>     .LinkedCell = "$B$4"
で設定しています。選択されたときの.ListIndexが何番か?は
 .LinkedCell に指定したセルの値を見ればいいのです。

 .LinkedCellプロパティを使った 選択アイテムの取得方法は
 .LinkedCell が [B4]のとき、
>  n = [B4].Value
>    [A4].Value = Excel.Range(DropDowns("myCombo") _
>           .ListFillRange).Item(n).Value
となることを以前、紹介しましたよね?

2 hits

【67543】ActiveSheetにあるCombobxの値 ichi 10/12/11(土) 12:01 質問
【67544】Re:ActiveSheetにあるCombobxの値 kanabun 10/12/11(土) 17:05 発言
【67546】Re:ActiveSheetにあるCombobxの値 ichi 10/12/12(日) 9:29 質問
【67547】Re:ActiveSheetにあるCombobxの値 kanabun 10/12/12(日) 10:59 発言
【67548】Re:ActiveSheetにあるCombobxの値 ichi 10/12/12(日) 12:12 お礼
【67567】Re:ActiveSheetにあるCombobxの値 ichi 10/12/14(火) 11:20 質問
【67568】Re:ActiveSheetにあるCombobxの値 Jaka 10/12/14(火) 11:32 発言
【67569】Re:ActiveSheetにあるCombobxの値 kanabun 10/12/14(火) 13:08 発言
【67570】Re:ActiveSheetにあるCombobxの値 ichi 10/12/14(火) 14:15 お礼
【67545】Re:ActiveSheetにあるCombobxの値 kanabun 10/12/11(土) 17:09 発言

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