Excel VBA質問箱 IV

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

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


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

【43203】コンボボックスの値をセルに表示するには... みどりかなぶん 06/10/5(木) 18:17 質問[未読]
【43204】Re:コンボボックスの値をセルに表示するに... ponpon 06/10/5(木) 20:16 発言[未読]
【43253】Re:コンボボックスの値をセルに表示するに... みどりかなぶん 06/10/6(金) 23:32 お礼[未読]
【43206】Re:コンボボックスの値をセルに表示するに... ichinose 06/10/5(木) 20:27 発言[未読]
【43208】Re:コンボボックスの値をセルに表示するに... ponpon 06/10/5(木) 20:51 発言[未読]
【43254】Re:コンボボックスの値をセルに表示するに... みどりかなぶん 06/10/6(金) 23:36 お礼[未読]
【43263】Re:コンボボックスの値をセルに表示するに... Mar 06/10/7(土) 13:53 発言[未読]
【43278】Re:コンボボックスの値をセルに表示するに... ichinose 06/10/7(土) 20:19 発言[未読]
【43284】Re:コンボボックスの値をセルに表示するに... Mar 06/10/7(土) 22:29 質問[未読]
【43286】Re:コンボボックスの値をセルに表示する... ponpon 06/10/7(土) 23:31 発言[未読]
【43287】Re:コンボボックスの値をセルに表示するに... ichinose 06/10/8(日) 7:45 発言[未読]
【43289】Re:コンボボックスの値をセルに表示するに... Mar 06/10/8(日) 10:19 お礼[未読]
【43290】Re:コンボボックスの値をセルに表示するに... ponpon 06/10/8(日) 10:35 発言[未読]
【43295】Re:コンボボックスの値をセルに表示するに... Mar 06/10/8(日) 13:57 お礼[未読]

【43203】コンボボックスの値をセルに表示するには...
質問  みどりかなぶん  - 06/10/5(木) 18:17 -

引用なし
パスワード
    コンボボックスの値を順次複数のセルに表示したいのですが途中までできてその後が表示されません。以下のようなコードを書いたのですが間違っているところがわかりません。どなたかお教えください。


private sub commbobox1_()
   with activesheet
     if .range("e9")=""then
        .range("e9").value=combobox1.value
     elseif.range("e9")<>""then
        .range("e13").value=combobox1.value
     elseif.range("e13")<>""then
        .range("e17").value=combobox1.value
     elseif.range("e17")<>""then
        .range("e21").value=combobox1.value
     elseif.range("e21")<>""then
        .range("e25").value=combobox1.value
     end if
   end with
end sub

【43204】Re:コンボボックスの値をセルに表示する...
発言  ponpon  - 06/10/5(木) 20:16 -

引用なし
パスワード
   ▼みどりかなぶん さん:
> コンボボックスの値を順次複数のセルに表示したいのですが途中までできてその後が表示されません。以下のようなコードを書いたのですが間違っているところがわかりません。どなたかお教えください。
>
>
>private sub commbobox1_()
>   with activesheet
>     if .range("e9")=""then
>        .range("e9").value=combobox1.value
>     elseif.range("e9")<>""then
>        .range("e13").value=combobox1.value
>     elseif.range("e13")<>""then
>        .range("e17").value=combobox1.value
>     elseif.range("e17")<>""then
>        .range("e21").value=combobox1.value
>     elseif.range("e21")<>""then
>        .range("e25").value=combobox1.value
>     end if
>   end with
>end sub


>private sub commbobox1_()
こんなイベントはないと思いますが、どのタイミングで
実行するのでしょうか?
ステップ実行してみると、途中までで止まる理由がわかると思います。
やりたいことは、下のようなことですか?

   With ActiveSheet
     If .Range("e9") = "" Then
        .Range("e9").Value = ComboBox1.Value
     End If

     If .Range("e9") <> "" Then
        .Range("e13").Value = ComboBox1.Value
     End If

     If .Range("e13") <> "" Then
        .Range("e17").Value = ComboBox1.Value
     End If

     If .Range("e17") <> "" Then
        .Range("e21").Value = ComboBox1.Value
     End If

     If .Range("e21") <> "" Then
        .Range("e25").Value = ComboBox1.Value
     End If
   End With

でもそれなら、
     If .Range("e9") = "" Then
の時必ず、.Range("e9").Value = ComboBox1.Value
となるので、
   With ActiveSheet
     If .Range("e9") = "" Then
        .Range("e9").Value = ComboBox1.Value
        .Range("e13").Value = ComboBox1.Value
        .Range("e17").Value = ComboBox1.Value
        .Range("e21").Value = ComboBox1.Value
        .Range("e25").Value = ComboBox1.Value
     End If
   End With
と同じじゃないですか?

意味を取り違えていたら、ごめんなさい。

【43206】Re:コンボボックスの値をセルに表示する...
発言  ichinose  - 06/10/5(木) 20:27 -

引用なし
パスワード
   ▼みどりかなぶん さん:
こんばんは。

> コンボボックスの値を順次複数のセルに表示したいのですが途中までできてその後が表示されません。以下のようなコードを書いたのですが間違っているところがわかりません。どなたかお教えください。

まず、この「順次複数のセルに表示したい」という仕様の意味がわかりません。

必ず、例を挙げて説明してください。


>
このコードは

>private sub commbobox1_()
>   with activesheet
>     if .range("e9")=""then
>        .range("e9").value=combobox1.value
>     elseif.range("e9")<>""then
>        .range("e13").value=combobox1.value
>     elseif.range("e13")<>""then
>        .range("e17").value=combobox1.value
>     elseif.range("e17")<>""then
>        .range("e21").value=combobox1.value
>     elseif.range("e21")<>""then
>        .range("e25").value=combobox1.value
>     end if
>   end with
>end sub

>private sub commbobox1_()
>   with activesheet
>     if .range("e9")=""then
>        .range("e9").value=combobox1.value
>     elseif.range("e9")<>""then
>        .range("e13").value=combobox1.value
>     end if
>   end with
>end sub

と同じですよ!! 

仕様は想像ですが・・・、


private sub commbobox1_()
  Dim crng As Range
  With ActiveSheet
    For Each crng In .Range("e9,e13,e17,e21,e25")
     If crng.Value = "" Then
       crng.Value = combobox1.Value
       Exit For
       End If
     Next
  
  End With
End Sub

ということですか?

【43208】Re:コンボボックスの値をセルに表示する...
発言  ponpon  - 06/10/5(木) 20:51 -

引用なし
パスワード
   なるほどですね。
私も「順次複数のセルに表示したい」の意味がよくわからなかったのですが、

private sub commbobox1_()
  Dim crng As Range
  With ActiveSheet
    For Each crng In .Range("e9,e13,e17,e21,e25")
     If crng.Value = "" Then
       crng.Value = combobox1.Value
       Exit For
       End If
     Next
  
  End With
End Sub

実行するたびに、空白なら、一つずつ入れていく仕様ですね。
ホントのところは、どうなんでしょう?

【43253】Re:コンボボックスの値をセルに表示する...
お礼  みどりかなぶん  - 06/10/6(金) 23:32 -

引用なし
パスワード
   早速にありがとうございます。また説明不足で失礼しました。セルe9が空白ならそこにコンボボックスの値をいれ、次に別の選択をしてe13にそれを入れ・・・というようにe25まで5回繰り返したいのです。仰るように一区切りづつ試してみます。

【43254】Re:コンボボックスの値をセルに表示する...
お礼  みどりかなぶん  - 06/10/6(金) 23:36 -

引用なし
パスワード
   早速にありがとうございます。説明が抽象的で失礼しました。セルe9が空白のときコンボボックスの値を入れ、次にセルe13にコンボボックスの別の値を入れ・・・というようにしてセルe25まで5回繰り返したいのです。教えてくださった方法でやってみます。

【43263】Re:コンボボックスの値をセルに表示する...
発言  Mar  - 06/10/7(土) 13:53 -

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

すみません。興味を持ってみさせていただきました。
で、質問させてください。

このコードはシートに書くのでしょうか
また、UserFormのコンボボックスを使うのでしょうか?

>private sub commbobox1_()
>  Dim crng As Range
>  With ActiveSheet
>    For Each crng In .Range("e9,e13,e17,e21,e25")
>     If crng.Value = "" Then
>       crng.Value = combobox1.Value
>       Exit For
>       End If
>     Next
>  
>  End With
>End Sub

【43278】Re:コンボボックスの値をセルに表示する...
発言  ichinose  - 06/10/7(土) 20:19 -

引用なし
パスワード
   ▼Mar さん:
こんばんは。


>すみません。興味を持ってみさせていただきました。
>で、質問させてください。
>
>このコードはシートに書くのでしょうか
>また、UserFormのコンボボックスを使うのでしょうか?

さて、どちらでしょうねえ??

以下のコード自体はユーザーフォームのモジュールでも

シートモジュールでもどちらでも作動しますよ。
(記述の仕方が良い悪いは別として)

例えば、新規ブックにユーザーフォーム(Userform1)を作成し
 そのユーザーフォームに
   コンボボックス(Combobox1)
   コマンドボタン(Commandbutton1)
 を一つずつ配置します。

Userform1のモジュールには、

'===================================================================
Option Explicit
'===================================================================
Private Sub UserForm_Initialize()
  With ComboBox1
    .Style = fmStyleDropDownList
    .List() = Array("aaa", "bbb", "ccc", "ddd", "eee")
    .ListIndex = 0
    End With
End Sub
'===================================================================
Private Sub CommandButton1_Click()
  Call commbobox1_
End Sub
'===================================================================
Private Sub commbobox1_()
  Dim crng As Range
  With ActiveSheet
    For Each crng In .Range("e9,e13,e17,e21,e25")
     If crng.Value = "" Then
       crng.Value = ComboBox1.Value
       Exit For
       End If
     Next
 
  End With
End Sub


標準モジュールに

'====================================================
sub main()
  userform1.show
end sub   


というコードでmainを実行してみてください。

ユーザーフォームが表示されます。
コンボボックスで適当な文字を選択した後、
コマンドボタンをクリックしてみてください。

コマンドボタンをクリックすると
  最初のクリックで セルE9に
  次のクリックで  セルE13に
  ・・・
  ・・・
  という順序でコンボボックスで選択された文字が
  コマンドボタンをクリックする度にセルに設定されます。
  (e9,e13,e17,e21,e25の順です)


また、新たな新規ブックのSheet1というシートに
   コマンドバー「コントロールツールボックス」にある
   コンボボックス(Combobox1)と
   コマンドボタン(Commandbutton1)を一つずつ配置してください。
   上記のコントロールはセルe9,e13,e17,e21,e25にはかぶらないように
   配置してください。


当該シートのシートモジュールに

'================================================================
Option Explicit
'=========================================================
Sub 設定()
  With ComboBox1
    .Style = fmStyleDropDownList
    .List() = Array("aaa", "bbb", "ccc", "ddd", "eee")
    .ListIndex = 0
    End With
End Sub
'=========================================================
Private Sub CommandButton1_Click()
  Call commbobox1_
End Sub
'=========================================================
Private Sub commbobox1_()
  Dim crng As Range
  With ActiveSheet
    For Each crng In .Range("e9,e13,e17,e21,e25")
     If crng.Value = "" Then
       crng.Value = ComboBox1.Value
       Exit For
       End If
     Next
 
  End With
End Sub


これで一度だけ「設定」実行後、ユーザーフォームの時と同様に
  コンボボックスで文字を選択後、コマンドボタンをクリックしてみてください。
  コマンドボタンをクリックするたび毎に
  セルe9,e13,e17,e21,e25の順にコンボボックスで選択された文字列が
  設定されます。


これでcommbobox1_()というプロシジャーがユーザーフォームでもシートのモジュール
のいずれでも使えるということが分かるかと思います。

試してみてください。


>>private sub commbobox1_()
>>  Dim crng As Range
>>  With ActiveSheet
>>    For Each crng In .Range("e9,e13,e17,e21,e25")
>>     If crng.Value = "" Then
>>       crng.Value = combobox1.Value
>>       Exit For
>>       End If
>>     Next
>>  
>>  End With
>>End Sub

【43284】Re:コンボボックスの値をセルに表示する...
質問  Mar  - 06/10/7(土) 22:29 -

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

こんばんは。
大変貴重なコードを頂き感謝しております。
まだ、すべて理解が出来ておりませんが・・・
何としても、じっくりと理解したいと思っています。

UserFormを使う方は、順調にマクロが動きましたが、コントロールツール
ボックスを利用する方は、ドロップダウンしても、空白のままです。

質問ですが
コントロールツールボックスの方ですが。
Sub 設定()はどのように繋がるのでしょうか?
Initializeの役割をしているようですが、コマンドボタン2
を作って操作するのかな?っと思ったりしたのですが・・・

それからcommbobox1_の書き方に何か意味があるのでしょうか?
アンダーバーを使う意味?を教えてください。

【43286】Re:コンボボックスの値をセルに表示する...
発言  ponpon  - 06/10/7(土) 23:31 -

引用なし
パスワード
   ▼Mar さん,ichinose さん
こんばんは。
ichinoseさんがいらしゃらないようなので、私が分かる範囲で。


>UserFormを使う方は、順調にマクロが動きましたが、コントロールツール
>ボックスを利用する方は、ドロップダウンしても、空白のままです。
>質問ですが
>コントロールツールボックスの方ですが。
>Sub 設定()はどのように繋がるのでしょうか?
>Initializeの役割をしているようですが、コマンドボタン2
>を作って操作するのかな?っと思ったりしたのですが・・・

それは、たぶんSub 設定()が実行されていないからだと思います。
UserFormを使う方は、loadされ、その後Initializeされた後にShowされるので
combobox1にリストが設定されていますが、
シートの方は、Sub 設定()を実行しないとcombobox1にリストが設定されないからです。
実行の仕方は、ツール→マクロ→マクロでマクロのダイアログが開きます。
その中に「シート名!設定」というのがあると思うので「実行」をクリックすると
実行されます。
または、VBEから実行する場合は、シートモジュールを表示しておいて、
Sub 設定

End Sub
の間にカーソルを置いておいて、実行→Sub/ユーザーフォームの実行(▼マーク)
をクリックすると実行されます。

その後コマンドボタンをクリックすれば、意図したとおりに動くと思います。

>それからcommbobox1_の書き方に何か意味があるのでしょうか?
>アンダーバーを使う意味?を教えてください。

これは、全く意味がないと思います。マクロ名は、「数字をはじめに使えない」とか「使えない記号がある」とかいくつか制約はありますが、自由に自分でつけることができるからです。
 これはたぶん、はじめの質問者が、commbobox1_としていたからではないでしょうか。

たぶん、明日朝早くichinoseさんから回答があると思います。

【43287】Re:コンボボックスの値をセルに表示する...
発言  ichinose  - 06/10/8(日) 7:45 -

引用なし
パスワード
   ▼Mar さん:
ponponさん、おはようございます。

>
>UserFormを使う方は、順調にマクロが動きましたが、コントロールツール
>ボックスを利用する方は、ドロップダウンしても、空白のままです。
>
>質問ですが
>コントロールツールボックスの方ですが。
>Sub 設定()はどのように繋がるのでしょうか?
>Initializeの役割をしているようですが、コマンドボタン2
>を作って操作するのかな?っと思ったりしたのですが・・・
>
>それからcommbobox1_の書き方に何か意味があるのでしょうか?
>アンダーバーを使う意味?を教えてください。

既にponponさんからの投稿にあるとおりです。
再度検討してみてください。
「設定」というプロシジャーは本来は、
このブックがオープンされた時や当該シートがアクティブになったときに
実行されるようにイベントプロシジャーを準備するのでしょうね。
(どこで設定するかは仕様によります)

ブックがオープンされた時なら、

Thisworkbookのモジュールに

Workbook_Open()というイベントプロシジャーを使用し、

Private Sub Workbook_Open()
  Call Worksheets("sheet1").設定
End Sub


シートがアクティブになったときなら、

当該シートモジュールで Worksheet_Activate()という
イベントプロシジャーを使用します。

Private Sub Worksheet_Activate()
  call 設定()
End Sub


名前についてもponponさんからの投稿のとおりです。

「_」で始まる名前や終わる名前はよく隠し機能に使われますけどね!!

おっと、今日は地区の運動会なのでもう行かなきゃ・・・。
ではでは。

【43289】Re:コンボボックスの値をセルに表示する...
お礼  Mar  - 06/10/8(日) 10:19 -

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

おはようございます。

多くのご指導ありがとうございました。今やっと良く理解できました。
応用の発想が出来きず、ついつい聞いてしまい、ご迷惑をかけて
しまい、恐縮しています。
でも、本当に勉強になりました。

更に一点だけ教えてください。
このマクロで

Private Sub Workbook_Open()
  Call Worksheets("sheet1").設定
End Sub
は上手く働きましたが・・・

>当該シートモジュールで Worksheet_Activate()という
>イベントプロシジャーを使用します。

>Private Sub Worksheet_Activate()
>  call 設定()
>End Sub

をシート1に貼り付けますと→設定の後ろの()が消え
このコード単独では上手く動きませんが、何が問題なのでしょうか?
お時間が許せば
教えてください。

ichinose さん
地区の運動会で忙しい時にもかかわらず、ありがとうございました。

これからもよろしくご指導のほどよろしくお願いします。

【43290】Re:コンボボックスの値をセルに表示する...
発言  ponpon  - 06/10/8(日) 10:35 -

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

おはようございます。

>更に一点だけ教えてください。
>このマクロで
>
>Private Sub Workbook_Open()
>  Call Worksheets("sheet1").設定
>End Sub
>は上手く働きましたが・・・
>
>>当該シートモジュールで Worksheet_Activate()という
>>イベントプロシジャーを使用します。
>
>>Private Sub Worksheet_Activate()
>>  call 設定()
>>End Sub
>
>をシート1に貼り付けますと→設定の後ろの()が消え
>このコード単独では上手く動きませんが、何が問題なのでしょうか?
>お時間が許せば
>教えてください。

Private Sub Worksheet_Activate()
このプロシ−ジャは、イベントプロシージャですから、
貼り付けたシートがアクティブになったときにマクロが走ります。
したがって、違うシートを選んでシート1を選び直すとマクロが走ります。
確かめてみてください。

>call 設定()
については、マクロを呼び出すときに使いますが、後ろの()は、引数がないときは
省略されます。
詳しくは、ヘルプのCallステートメントで確かめてください。


私もこれから地域の運動会に出発します。出番は午後からです。

【43295】Re:コンボボックスの値をセルに表示する...
お礼  Mar  - 06/10/8(日) 13:57 -

引用なし
パスワード
   ▼ponpon さん:
ありがとうございました。

>私もこれから地域の運動会に出発します。出番は午後からです。
お忙しい中、ありがとうございました。

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