Excel VBA質問箱 IV

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

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


2794 / 13644 ツリー ←次へ | 前へ→

【65805】コマンドバー「フォーム」にあるComboボックスの値を評価 みーちゃんキャット 10/6/28(月) 21:55 質問[未読]
【65810】Re:コマンドバー「フォーム」にあるComboボ... ichinose 10/6/29(火) 6:04 発言[未読]
【65811】Re:コマンドバー「フォーム」にあるComboボ... ichinose 10/6/29(火) 6:07 発言[未読]
【65818】Re:コマンドバー「フォーム」にあるComboボ... Jaka 10/6/29(火) 15:18 発言[未読]
【65830】コマンドバー「フォーム」にあるComboボッ... みーちゃんキャット 10/6/29(火) 20:19 質問[未読]
【65831】Re:コマンドバー「フォーム」にあるComboボ... ichinose 10/6/29(火) 21:27 発言[未読]
【65834】Re:コマンドバー「フォーム」にあるComboボ... みーちゃんキャット 10/6/29(火) 22:09 お礼[未読]
【65848】Re:コマンドバー「フォーム」にあるComboボ... みーちゃんキャット 10/6/30(水) 21:25 質問[未読]
【65852】Re:コマンドバー「フォーム」にあるComboボ... ichinose 10/7/1(木) 7:41 発言[未読]
【65874】Re:コマンドバー「フォーム」にあるComboボ... みーちゃんキャット 10/7/4(日) 14:59 お礼[未読]
【65917】Re:コマンドバー「フォーム」にあるComboボ... mura 10/7/7(水) 8:54 回答[未読]
【65919】Re:コマンドバー「フォーム」にあるComboボ... みーちゃんキャット 10/7/7(水) 12:19 発言[未読]
【65955】Re:コマンドバー「フォーム」にあるComboボ... UO3 10/7/10(土) 9:06 発言[未読]
【65838】Re:コマンドバー「フォーム」にあるComboボ... mura 10/6/30(水) 8:27 回答[未読]
【65849】Re:コマンドバー「フォーム」にあるComboボ... みーちゃんキャット 10/6/30(水) 21:27 お礼[未読]

【65805】コマンドバー「フォーム」にあるComboボ...
質問  みーちゃんキャット  - 10/6/28(月) 21:55 -

引用なし
パスワード
   ComboBoxをフォームボタンを使い、Excelシート上に貼り付けてあります。
リスト表示させるDataは別のシートから書式設定で入力範囲を指定しています。
評価したいのは文字列なのですが、どのようにしたら良いのでしょうか?

【65810】Re:コマンドバー「フォーム」にあるComb...
発言  ichinose  - 10/6/29(火) 6:04 -

引用なし
パスワード
   ▼みーちゃんキャット さん:
おはようございます。

>ComboBoxをフォームボタンを使い、Excelシート上に貼り付けてあります。
>リスト表示させるDataは別のシートから書式設定で入力範囲を指定しています。
>評価したいのは文字列なのですが、どのようにしたら良いのでしょうか?
コードを記述するようにしてください。

ComboBoxというのは「コントロールツールボックス」にあるコンボボックス
(ActiveXコントロールですよね?)

新規ブックにて、標準モジュールに

Sub test1()
  On Error Resume Next
  ActiveSheet.OLEObjects.Delete
  With ActiveSheet.OLEObjects.Add(ClassType:="Forms.ComboBox.1", Link:=False, _
    DisplayAsIcon:=False, Left:=216, Top:=54, Width:=216, Height:=27.75)
    With Range("a1:a20")
     .NumberFormatLocal = "[$-411]ggge""年""m""月""d""日"""
     .Cells(1).Value = Date
     With .Range("a2:a20")
       .Formula = "=a1+1"
       .Value = .Value
     End With
    End With
    MsgBox "A列の日付をコンボボックスに反映させます"
    .ListFillRange = "=" & Range("a1:a20").Address
  End With
  On Error GoTo 0
End Sub

問題にしているのは、上記のtest1を実行した場合のコンボボックスのデータですよね?
選択リストは 平成xxxで表示されますが、選択したデータは、シリアル値で
表示されてしまいます。

方法1

データを文字列でコンボボックスに登録すれば・・・、

新規ブックにて、標準モジュールに

Sub test2()
  On Error Resume Next
  ActiveSheet.OLEObjects.Delete
  With ActiveSheet.OLEObjects.Add(ClassType:="Forms.ComboBox.1", Link:=False, _
    DisplayAsIcon:=False, Left:=216, Top:=54, Width:=216, Height:=27.75)
    With Range("a1:a20")
     .NumberFormatLocal = "[$-411]ggge""年""m""月""d""日"""
     .Cells(1).Value = Date
     With .Range("a2:a20")
       .Formula = "=a1+1"
       .Value = .Value
     End With
    End With
    MsgBox "A列の日付をコンボボックスに反映させます"
    With .Object
     .List = Evaluate("transpose(text(a1:a20,""ggge""""年""""m""""月""""d""""日""""""))")
    End With
  End With
  On Error GoTo 0
End Sub

上記のtest2を実行し、コンボボックスを操作してみてください。
今度は、選択した日付も 平成xxxx で表示されます。


方法2
Excelコントロールのコンボボックスを使うと問題なく、表示されます。
簡単な修正方法は↑これを使うという方法。


試してみてください。

【65811】Re:コマンドバー「フォーム」にあるComb...
発言  ichinose  - 10/6/29(火) 6:07 -

引用なし
パスワード
   >コマンドバー「フォーム」にあるComboボックスの値を評価
ん?解釈違ってるのかなあ??

【65818】Re:コマンドバー「フォーム」にあるComb...
発言  Jaka  - 10/6/29(火) 15:18 -

引用なし
パスワード
   評価したいの意味がよく解ってませんけど。
シート上フォームボタン等なら参考。

ht tp://www.vbalab.net/vbaqa/c-board.cgi?cmd=one;no=157;id=FAQ

文字列日付をシリアル値日付にする。
Cdate("2010/10/29")

【65830】コマンドバー「フォーム」にあるComboボ...
質問  みーちゃんキャット  - 10/6/29(火) 20:19 -

引用なし
パスワード
   Ichinose-san, Jaka-san

質問がわかりづらくすみません。
添付は以前Ichinose-sanから、似たような内容でご回答いただいた時のものです。
ht tp://www.vbalab.net/vbaqa/c-board.cgi?cmd=one;no=65570; 。

私がExcel Sheet上に書き入れたコントロールは
ツールバーのフォームの中にあるコンボボックスで、コントロールツールボックスツールバーの中のコンボボックスではありません。
つまり、ActiveXではありません。
上記リンクの回答のやり取りを見ていくと、Excel専用のコントロールのコンボボックスxは、イベントドリブンな
仕様ではないとあるので、このコンボボックス内に入力されている値に、何が入力されているかを
チェックする(評価する)ことはできないということでしょうか?(単に表示専用のリストコントロールなのでしょうか?)
それともイベントを発生させる以外にも値をチェックする方法がありましたらお教えください。

【65831】Re:コマンドバー「フォーム」にあるComb...
発言  ichinose  - 10/6/29(火) 21:27 -

引用なし
パスワード
   ▼みーちゃんキャット さん:
こんばんは。
>つまり、ActiveXではありません。
まったく、理解していなっかったみたいですね!!

>チェックする(評価する)ことはできないということでしょうか?(単に表示専用のリストコントロールなのでしょうか?)

選択された値を取得するには、

Sub test1()
  With ActiveSheet.DropDowns("ドロップ 6")
  '               ↑ドロップダウンの名前
    MsgBox .List(.ListIndex)
  End With
End Sub

これで取得できます。

【65834】Re:コマンドバー「フォーム」にあるComb...
お礼  みーちゃんキャット  - 10/6/29(火) 22:09 -

引用なし
パスワード
   ▼ichinose さん:
>早々にご回答ありがとうございました。
こちらの質問の仕方が悪かったです。
早速試してみます。

【65838】Re:コマンドバー「フォーム」にあるComb...
回答  mura  - 10/6/30(水) 8:27 -

引用なし
パスワード
   >ComboBoxをフォームボタンを使い、Excelシート上に貼り付けてあります。
>リスト表示させるDataは別のシートから書式設定で入力範囲を指定しています。
>評価したいのは文字列なのですが、どのようにしたら良いのでしょうか?

コントロールの書式設定で[リンクするセル]を設定するのが通常の使い方だと思います。
そうすれば特にマクロは必要ありません。

【65848】Re:コマンドバー「フォーム」にあるComb...
質問  みーちゃんキャット  - 10/6/30(水) 21:25 -

引用なし
パスワード
   ichinose さん

>選択された値を取得するには、
>
> Sub test1()
>  With ActiveSheet.DropDowns("ドロップ 6")
>  '               ↑ドロップダウンの名前
>    MsgBox .List(.ListIndex)
>  End With
> End Sub
>
上記DropDowns("ドロップ 6")ドロップリストの名前に何を入力して良いかが分かりません。
フォームコントロールにはプロパティでNameをつけることが出来ないようなので、どの名前を付けて良いのかが
わかりませんでした。すみませんが、もう少し解説いただけると助かります。

【65849】Re:コマンドバー「フォーム」にあるComb...
お礼  みーちゃんキャット  - 10/6/30(水) 21:27 -

引用なし
パスワード
   mura さん
教えていただいた方法でやってみたら上手くいきました。
ありがとうございます。

【65852】Re:コマンドバー「フォーム」にあるComb...
発言  ichinose  - 10/7/1(木) 7:41 -

引用なし
パスワード
   ▼みーちゃんキャット さん:
おはようございます。
通常の使い方か否かはともかく リンクするセルで事足りるなら、それを使ってください。


>上記DropDowns("ドロップ 6")ドロップリストの名前に何を入力して良いかが分かりません。
対象ドロップダウンを右クリックで選択すれば、名前ボックスに
ドロップダウンの名前が表示されますけどねえ・・・。

標準モジュールに

Sub nameList()
  Dim drp As Object
  For Each drp In ActiveSheet.DropDowns
    MsgBox drp.Name
  Next
End Sub

対象ドロップダウンがあるシートをアクティブにした状態で
上記 nameList を実行してみてください。

ドロップダウン名が表示されます。


>フォームコントロールにはプロパティでNameをつけることが出来ないようなので、どの名前を付けて良いのかが
>わかりませんでした。すみませんが、もう少し解説いただけると助かります。

【65874】Re:コマンドバー「フォーム」にあるComb...
お礼  みーちゃんキャット  - 10/7/4(日) 14:59 -

引用なし
パスワード
   ichinose さん

>標準モジュールに
>
>Sub nameList()
>  Dim drp As Object
>  For Each drp In ActiveSheet.DropDowns
>    MsgBox drp.Name
>  Next
>End Sub
>
>対象ドロップダウンがあるシートをアクティブにした状態で
>上記 nameList を実行してみてください。
>
お返事遅くなりました。ありがとうございました。
上手くいきました。リンクセルを貼ると見た目がイマイチなので・・・。
今回2個の方法がわかってよかったです。

【65917】Re:コマンドバー「フォーム」にあるComb...
回答  mura  - 10/7/7(水) 8:54 -

引用なし
パスワード
   >上手くいきました。リンクセルを貼ると見た目がイマイチなので・・・。

見た目がイマイチとは?意味不明。
通常、[リンクするセル]はそのオブジェクトの下のセルに設定するので見えないと思います。

【65919】Re:コマンドバー「フォーム」にあるComb...
発言  みーちゃんキャット  - 10/7/7(水) 12:19 -

引用なし
パスワード
   ▼mura さん:
>見た目がイマイチとは?意味不明。
>通常、[リンクするセル]はそのオブジェクトの下のセルに設定するので見えないと思います。

なるほど。別のところにリンク貼り付けしていました。そうすれば良かったのですね。
教えてもらってありがとうございました。

【65955】Re:コマンドバー「フォーム」にあるComb...
発言  UO3  - 10/7/10(土) 9:06 -

引用なし
パスワード
   ▼みーちゃんキャット さん:
おはようございます。

>上記DropDowns("ドロップ 6")ドロップリストの名前に何を入力して良いかが分か>りません。
>フォームコントロールにはプロパティでNameをつけることが出来ないようなので

名前の確認については、すでにichinose さん からお答えがありますが
その名前を変更することもできます。

Sub Test()
 ActiveSheet.DropDowns("ドロップ 6").Name = "MyCombo"
 MsgBox ActiveSheet.DropDowns("MyCombo").Name
End Sub

(追伸)
 みーちゃんキャットさんの別トピを、私の質問の場のようにしてしまいました。
 申し訳ありませんでした。

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