• 締切済み

マクロ/VBAにてフレーム内複数コンボボックスの作り方

エクセルにて予約表を作成しました。 入力する方があまりキーボード入力が得意ではないので入力画面を作りました。一通り完成し、登録コマンドボタンを押すと予約表の最下部行に入力されるようにしたのですが、1つだけうまくいきません…。 それはフレーム内に50音順でコンボボックスを配置している部分です。(「ア・イ・ウ・エ・オ・カ・キ・ク・ケ・コ・…」と続き、「ワ」までです。) 各50音のコンボボックスには予め50音に分けて作ってある業者リストを選択できるようにし、そのフレーム内で1つ選択すると他は選択できないようにしたいのですが…。 プログラミングに関しては初心者ですので、分かる方がいましたら、ご教授お願い致します。

noname#89584
noname#89584

みんなの回答

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.4

> .Cells(mySNewRow, "G").Value = fraName1.Controls("cboA1").Value > .Cells(mySNewRow, "G").Value = fraName1.Controls("cboI1").Value これだと、cboA1 と cboI1 が同じG列のセルに書き込まれます。原因は ここだと思います。 以下は余談です。 Cells ですが基本的な書式は次のとおりです。   Cells(行番号,列番号) 例えば、A1 セルなら Cells(1,1) だし、C5 セルなら Cells(5,3) です。 このとき次のような書き方もできます。   Cells(1,"A") 列番号を文字列で指定することができます。本当は数値で指定した方が 処理速度は速いのですが、体感できるほどの違いはありません。 詳しくは VBA のヘルプを見て下さい。

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.3

こんにちは。KenKen_SP です。横レス失礼します。 そのままできませんか?エラーになる?現状でどのような結果になるの ですか? 例えば、フレーム内であっても Cells(1, 1).Value = ComboBox1.Value で転記できるはずです。もし明示的に書くなら Cells(1, 1).Value = Frame1.Controls("ComboBox1").Value でもいけます。それから、ご提示されたコードですが、With 句を使うと スッキリしますよ。こんな感じ。 Private Sub cmdToroku_Click()      Dim mySNewRow As Long      With Worksheets("6月")     mySNewRow = .Range("A65536").End(xlUp).Row + 1     .Cells(mySNewRow, "A") = cboDay.Value     .Cells(mySNewRow, "B") = cboArea.Value     .Cells(mySNewRow, "C") = cboTime.Value     .Cells(mySNewRow, "D") = cboBusnumber.Value     .Cells(mySNewRow, "E") = txtName1.Value     .Cells(mySNewRow, "F") = txtNumber.Value     .Cells(mySNewRow, "H") = txtCharge.Value     .Cells(mySNewRow, "I") = cboLodging.Value     .Cells(mySNewRow, "K") = txtRemarks.Value     .Cells(mySNewRow, "L") = cboInput.Value   End With End Sub

noname#89584
質問者

お礼

すみません、先ほどの補足への追加です。 コードの .Cells(mySNewRow, "G").Value = fraName1.Controls("cboA1").Value .Cells(mySNewRow, "G").Value = fraName1.Controls("cboI1").Value の「""」が抜けていたのでエラーが出ていたようです。 修正後、実行するとエラーは出ないのですが、正しく入力できません。「cboA1」を選択入力すると、何も入力されず、「cboI1」を選択入力すると一応、フォーム通りに入力されます?? 原因が分かれば、是非教えていただけないでしょうか? 宜しくお願い致します。

noname#89584
質問者

補足

たいへんありがとうございます、コードがすっきりしました! ところがまだ「実行時エラー1004」が出てきます。 テストということで、フレーム内のコンボは2つでコードを書いてます。(実際は44個必要) 必ずフレーム内のコンボをどれか1つ選択し、それを常に同じ最下行に転写したいのですが…。 申し訳ありませんがご教授お願いします。 現在のコードは以下です。 Private Sub cmdTojiru_Click() Unload userform1 End Sub Private Sub cmdToroku_Click() Dim mySNewRow As Long With Worksheets("6月") mySNewRow = .Range("A65536").End(xlUp).Row + 1 .Cells(mySNewRow, "A") = cboDay.Value .Cells(mySNewRow, "B") = cboArea.Value .Cells(mySNewRow, "C") = cboTime.Value .Cells(mySNewRow, "D") = cboBusnumber.Value .Cells(mySNewRow, "E") = txtName1.Value .Cells(mySNewRow, "F") = txtNumber.Value .Cells(mySNewRow, "H") = txtCharge.Value .Cells(mySNewRow, "I") = cboLodging.Value .Cells(mySNewRow, "K") = txtRemarks.Value .Cells(mySNewRow, "L") = cboInput.Value .Cells(mySNewRow, G).Value = fraName1.Controls("cboA1").Value .Cells(mySNewRow, G).Value = fraName1.Controls("cboI1").Value End With End Sub Private Sub userform_Initialize() Dim mySno As Integer myLastRow = Worksheets("設定1").Range("A65536"). _ End(xlUp).Row cboDay.RowSource = "設定1!A1:A" & myLastRow cboArea.RowSource = "設定1!B1:B" & myLastRow cboTime.RowSource = "設定1!C1:C" & myLastRow cboBusnumber.RowSource = "設定1!D1:D" & myLastRow cboLodging.RowSource = "設定1!F1:F" & myLastRow cboInput.RowSource = "設定1!H1:H" & myLastRow cboA1.RowSource = "設定2!A1:A" & myLastRow cboI1.RowSource = "設定2!B1:B" & myLastRow End Sub

noname#123709
noname#123709
回答No.2

#1です。 申し訳ないのですが質問の意味がわかりかねます。 具体的にどの部分のどのコードがわからないのかを提示して頂けますか?

noname#89584
質問者

補足

手間をとらせて申し訳ありません。 ユーザーフォームによる入力画面に、各テキスト、コンボボックスを入力・選択、「登録」コマンドボタンを押した際のコード記述についてです。普通の(フレーム外)テキスト、コンボボックスをエクセルシートに転写(自動入力)はできたのですが、フレーム内に配置したコンボボックスを転写(自動入力)が分かりません。フレーム内の複数コンボからどれか1つ選び、どれを選んだときも同じセルに転写されるようしたいのですが。(分かりづらくすみません。) 以下は分からない部分のコードです、参考に。 Private Sub cmdToroku_Click() Dim mySNewRow As Long mySNewRow = Worksheets("6月").Range("A65536"). _ End(xlUp).Row + 1 Worksheets("6月").Range("A" & mySNewRow) = _ cboDay.Value mySNewRow = Worksheets("6月").Range("A65536"). _ End(xlUp).Row Worksheets("6月").Range("B" & mySNewRow) = _ cboArea.Value mySNewRow = Worksheets("6月").Range("A65536"). _ End(xlUp).Row Worksheets("6月").Range("C" & mySNewRow) = _ cboTime.Value mySNewRow = Worksheets("6月").Range("A65536"). _ End(xlUp).Row Worksheets("6月").Range("D" & mySNewRow) = _ cboBusnumber.Value mySNewRow = Worksheets("6月").Range("A65536"). _ End(xlUp).Row Worksheets("6月").Range("E" & mySNewRow) = _ txtName1.Value mySNewRow = Worksheets("6月").Range("A65536"). _ End(xlUp).Row Worksheets("6月").Range("F" & mySNewRow) = _ txtNumber.Value mySNewRow = Worksheets("6月").Range("A65536"). _ End(xlUp).Row Worksheets("6月").Range("H" & mySNewRow) = _ txtCharge.Value mySNewRow = Worksheets("6月").Range("A65536"). _ End(xlUp).Row Worksheets("6月").Range("I" & mySNewRow) = _ cboLodging.Value mySNewRow = Worksheets("6月").Range("A65536"). _ End(xlUp).Row Worksheets("6月").Range("K" & mySNewRow) = _ txtRemarks.Value mySNewRow = Worksheets("6月").Range("A65536"). _ End(xlUp).Row Worksheets("6月").Range("L" & mySNewRow) = _ cboInput.Value End Sub

noname#123709
noname#123709
回答No.1

Private Sub ComboBox1_Change() ComboBox2.Enabled = False End Sub のようにコンボボックスのコードに自分以外のコンボボックスを使えない ように全てに記述すればできます。ただし、間違えて選択した場合のことを 考える必要があるかと思いますが。

noname#89584
質問者

補足

さっそく回答ありがとうございます。 間違った場合も考えなくてはならないのですね…。 フレーム内に44個のコンボボックスがあるので気合で全て記述しようと思うのですが…、作ってある登録コマンドボタンをクリックした際のフレームについてのコード記述が分からなくなってしまいました。 申し訳ないのですが、分かればご教授お願い致します。

関連するQ&A

  • この問題の解き方教えて下さい

    数学のマーク問題です 2次方程式(a-1)x^2‐(2a-1)x+a-2=0…(1)について (1)a=4のとき (1)の解は x=ア/イ,ウ (2)2次方程式(1)の実数解の個数は a<エ/オのときカ個 a=エ/オのときキ個 エ/オ<a<ク,ク<aのときケ個である。 (3)2次方程式(1)の実数解が1個のとき、その解はx=コサである ア/イ= ウ= エ/オ= カ= キ= ク= ケ= コサ= という問題がよくわかりません。 どうか解答お願いします。 途中式もあると嬉しいです。

  • 発声練習英語版

    よく、俳優(の卵)やアナウンサー(志望の人たち)が、「ア・エ・イ・ウ・エ・オ・ア・オ」「カ・ケ・キ・ク・ケ・コ・カ・コ」って発声練習をしているのですが、あれを英語でやるとどうなるのでしょうか? 日本人用の「アエイウエオアオ、~」に対応する、英語の決まり文句のようなものはあるのでしょうか?

  • コンボボックスからコンボへ

    私はホームページを黙過、勉強中のものです。 いま、ホームページ上に上下の所にコンボボックスを設置し、コンボボックスから選択肢を選ぶと下のコンボボックスが上のコンボボックスの選択肢によって選択する値を変える仕組みを作っています。 ほぼ完成しました。ただ一つだけ問題解決できません。それは選択をしてもらい画面が切り替わった時に入力ミスをしてしまった人は前の画面に戻ります。その時に上と下のコンボボックスのうち下のコンボボックスに入れてもらった値が消えてしまう事です。更に下のコンボボックスを選択しようとすると値が全て消えてしまっているので選択できません。もう一度上のコンボに値を入れ直すとまた下のコンボも値をかえすのですが、それでは入力者にだいぶ手間をかけてしまう事になります。 どうか教えて頂けないでしょうか。 この仕組みはすべてジャバで作りました。 お願します。

  • 植物の生産構造

    植物群落の生産構造についてです。 ア:ソバ イ:スミレ ウ:アシ エ:セイタカアワダチソウ オ:ワラビ カ:ススキ キ:ダイズ ク:アカザ ケ:ゼニゴケ ウ、カはイネ科型、キ、クは広葉型だと思うのですが、 ほかはどちらの生産構造になるんでしょうか。 それともどっちともいえないんでしょうか。

  • たんぱく質の代謝の問題について

    炭水化物はブドウ糖などの「ア」になり吸収され「イ」に運ばれ「ウ」として蓄えられる。一部のブドウ糖は血液中に入り「エ」などの組織に運ばれ、肝臓と同様にウに合成され、蓄えられる。このウはエを動かすときの「オ」供給に使われる。 ウは「カ」においてビルビン酸となり。その後「キ」を経て酸化され「ク」と水に分解される。 エで消費されたブドウ糖は「ケ」によって全身に補給される。血糖値が低下すると肝臓に蓄えられていた「ウ」が分解されて「コ」になり血液中に放出される。 の空欄を埋めろという問題です。 ア: イ:肝臓 ウ:グリコーゲン エ: オ: カ: キ: ク: ケ: コ: とまだ分らないところが沢山あります。 ビルビン酸が何なのかも分りません。 よろしくお願いします。

  • 質問

    四面体OABCにおいてAO⊥BO、AO⊥CO、BO⊥CO、∠ABO=45°、∠CAO=60°、OB=2であるときOA=ア、OC=イ√ウであり、四面体OABCの体積はエ√オ/カ、三角形ABCの面積はキ√ク、頂点Oから三角形ABCに下ろした垂線の長さはケ√コサ/シである。 どなたか教えて下さい。

  • Access2002のVBAコンボボックスについて

    お世話になります。 Access2002でフォームを作成しているのですがコンボボックスを使用する際VBAで項目を登録、入力不可にして選択のみできるようにできないのでしょうか? VBAではなくVB6のコンボボックスの場合Styleプロパティに 2(ドロップダウンリスト)を設定したら可能なのですがAccess2002のコンボボックスにはStyleプロパティがありません。 また、ほかの方法が在れば教えていただけませんでしょうか? 以上、よろしくお願いします。

  • 【Excel・マクロ】コンボボックス・テキストボックスからのデータの入力について

    教えて下さい! 今シートにはA列に日付(2003/1/1~2010/12/31)、B列からI列の1行目には項目名が入っています。 これから行いたいことは、別マクロで表示させたフォームのコンボボックスから日付を選択し、同じフォーム上にある項目名に沿った8つのテキストボックスにデータを入力することにより、そのデータがシートに反映されるというものを作成したいのです。 データが入力される部分は選択された日付の行の、各項目名と交わる部分となります。 (例)        |あああ|いいい|ううう・・・ 2003/1/1 |    |    | 2003/1/2 |    |    | 2003/1/3 |    |    | ※上の表だとコンボボックスから2003/1/2を選択し、テキストボックス「いいい」部分にデータを入力するとC3セルにデータが入力されます。 コンボボックスにデータを表示させることは出来るのですが、そこから先(この日付を選んでテキストに入力して・・・)が出来ません。 よろしければ、記述を教えて頂きたいと思います。 宜しくお願い致します。

  • 三角関数

    0≦α≦πとする。x≧0を満たすすべてのxに対して、不等式 2xsinαcosα-2(√3x+1)cos^2α-√2cosα+√3x+2≧0 が成り立つための条件は sinアα≧√イcosαウαかつ エcos^2α+√オcosα-カ≦0が成り立つことである。 これより、αの値の範囲は キ/クπ≦α≦ケ/コπである。 角がバラバラなので2倍角の公式等で揃えようとしましたが、私には無理でした。どなたか教えて下さい。

  • コンボボックスの作り方を教えて下さい。

    エクセル2000を使用しています。 コンボボックスを使って日付を入力できるようにしたいと 思っておりますが、具体的にどうすればよいのか分かりません。 任意の場所にコンボボックスを作る事は出来ます。 で、2個作成します。ここまでは出来ます。 左側の方には月の1~12、右側の方には日の1~31が出てきて 選択すれば入力す出来るという単純なものなんですが それがどうすればよいのか分かりません。 初心者の私にも分かるように教えて頂けると幸いです。

専門家に質問してみよう