• ベストアンサー

エクセルVBA コンボボックスの使い方

1個のコンボボックスで2つのworkBooksに書き込むことは可能でしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

補足読みました。 >コンボボックス各支店のデータが本店のブックに蓄積されるVBAを目指しています。 ??? えーと、状況が全く理解できません。 VBAを組むにあたり、必要なことは 「やりたいことを箇条書きにできるか」 だと思ってます。 例えば、 データ元、コンボボックスの支店Aを選択。 本店ブックを開く。 本店ブックの最終行を取得する。 データ元のブックのデータを支店Aでフィルターをかける。 表示された行の列(A,D)を、本店ブックの最終行から貼り付ける。 終わったら「完了!」と表示し、本店ブックは上書き保存して閉じる。 とかです。 まずは、やりたいことを細かく箇条書きにする。 できたら、キーワード+VBAで検索してみる。 自分でVBAの中身を把握していないと、バグに遭遇?したときに 困ることになりますので、自分で少しずつ理解して組んでった方が良いと思います。

nebikitorikai
質問者

お礼

savakonomimotoさん有難うございました。言われる通りじっくり考えているとコピペの部分がいらないことに気づき削除したら正常に機能しました感謝です。

nebikitorikai
質問者

補足

Private Sub CommandButton2_Click() Dim lRow As Long, i As Long Dim ListNo As Long ListNo = ComboBox1.ListIndex If ListNo < 0 Then MsgBox "いずれかの行を選択してください" Exit Sub End If With Worksheets("売上") lRow = .Range("A" & Rows.Count).End(xlUp).Row For i = 1 To 1 .Cells(lRow + 1, i + 0).Value = ComboBox1.List(ListNo, i) Next i End With ListNo = ComboBox2.ListIndex If ListNo < 0 Then MsgBox "いずれかの行を選択してください" Exit Sub End If With Worksheets("売上") lRow = .Range("E" & Rows.Count).End(xlUp).Row For i = 1 To 2 .Cells(lRow + 1, i + 4).Value = ComboBox2.List(ListNo, i) Next i End With For Each tempControl In Controls If TypeName(tempControl) = "TextBox" Then If tempControl.Name <> "goodsMemo" Then If tempControl = "" Then MsgBox "空欄のデータがあります。「メモ」以外は全て入力してください", vbExclamation tempControl.SetFocus Exit Sub End If End If End If Next rowscount = Worksheets("売上").Rows.Count newDataRow = Worksheets("売上").Range("B" & rowscount).End(xlUp).Row + 1 Worksheets("売上").Range("B" & newDataRow).Value = goodsTuki.Text Worksheets("売上").Range("C" & newDataRow).Value = goodsHiduke.Text Worksheets("売上").Range("H" & newDataRow).Value = goodsMemo.Text '曜日計算 With Range("C1", Cells(Rows.Count, 3).End(xlUp)).Offset(, 1) .Formula = "=Text(C1,""aaa"")" .Value = .Value End With Workbooks.Open "D:\管理\本店顧客管理.xls" ListNo = ComboBox1.ListIndex If ListNo < 0 Then MsgBox "いずれかの行を選択してください" Exit Sub End If With Worksheets("売上") lRow = .Range("A" & Rows.Count).End(xlUp).Row For i = 1 To 1 .Cells(lRow + 1, i + 0).Value = ComboBox1.List(ListNo, i) Next i End With Workbooks("支店1").Worksheets("売上").Range("A" & newDataRow).Copy Workbooks("本店顧客管理").Sheets("売上").Select Sheets("売上").Activate Range("A" & newDataRow).Select ActiveSheet.Paste ListNo = ComboBox2.ListIndex If ListNo < 0 Then MsgBox "いずれかの行を選択してください" Exit Sub End If With Worksheets("売上") lRow = .Range("E" & Rows.Count).End(xlUp).Row For i = 1 To 2 .Cells(lRow + 1, i + 4).Value = ComboBox2.List(ListNo, i) Next i End With Workbooks("支店1").Worksheets("売上").Range("E" & newDataRow).Copy Workbooks("本店顧客管理").Sheets("売上").Select Sheets("売上").Activate Range("E" & newDataRow).Select ActiveSheet.Paste For Each tempControl In Controls If TypeName(tempControl) = "TextBox" Then If tempControl.Name <> "goodsMemo" Then If tempControl = "" Then MsgBox "空欄のデータがあります。「メモ」以外は全て入力してください", vbExclamation tempControl.SetFocus Exit Sub End If End If End If Next rowscount = Worksheets("売上").Rows.Count newDataRow = Worksheets("売上").Range("B" & rowscount).End(xlUp).Row + 1 Workbooks("支店1").Sheets("売上").Range("B" & newDataRow).Value = goodsTuki.Text Workbooks("支店1").Sheets("売上").Range("B" & newDataRow).Copy Workbooks("本店顧客管理").Sheets("売上").Activate Range("B" & newDataRow).Select ActiveSheet.Paste これで半分です、わかるでしょうか?両方とも記入はできますが行にバラツキがあります。文字数に制限がありここまでで止めました。よろしくお願いします

その他の回答 (1)

回答No.1
nebikitorikai
質問者

お礼

有難うございました、助かりました。

nebikitorikai
質問者

補足

すみません、質問を少し変えてお尋ねします。コンボボックス各支店のデータが本店のブックに蓄積されるVBAを目指しています。よろしくお願いします。

関連するQ&A

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

    はじめまして、コンボボックスで選択したデータをセルに書き出すプログラムを作成しております。 コンボボックスプロパティのListFillRangeで範囲を指定していますが、途中空白のセルがあるため、空白セルまでコンボボックスに取り込まれてしまいます。 このListFillRangeの範囲を設定したまま、空白はコンボボックスに取り込まないようにする方法ってあるんでしょうか??お分かりになる方いらっしゃいましたら、お願い致します。

  • エクセル、フォームでのVBAについて(コンボボックス)

    エクセル97でフォームのコンボボックスを使用する場合の質問です。 ワークシートにコンボボックスを10個配置しました。 入力範囲はすべて同じです。 このコンボボックスで特定の項目(入力範囲6番目)を選んだ場合、次のマクロを実行するようにしようと思っています。マクロを10個書いてそれぞれのコンボボックスに登録してもいいのですが、それよりはどのコンボボックスが使用されたか特定できればすべてのコンボボックスに一つのマクロで対応できます。 コンボボックスに番号(たとえばコンボ1~コンボ10)を振ってその番号の取得ができればいいのですが、どのように記述したらよいのか検討がつきません。 お教えください。

  • エクセルVBAでコンボボックス

    エクセルVBAのコンボボックスの使い方について質問します。 実現したいプログラムは 「チェックボックスから選んだ数字で計算するプログラム」 です。 具体的には… まず、コンボボックスをシート上に配置します。そのコンボボックスには 数字の1から10を選べるようにしておきます。 次に、コマンドボタンを配置します。これは単にプログラムをスタート させる目的です。 ユーザーは、まずコンボボックスから好きな数字を選択します。 そしてスタートボタン(コマンドボタン)を押します。 すると、選んだ数字の2倍がセルに表示されます。 さらに発展系としては… チェックボックスを4つ配置します。各チェックボックス には、+、-、×、÷を割り振っておきます。 また、コンボボックスを2つ用意し、それぞれ1~10の数字をリストにします。 ユーザーは、チェックボックスから好きな記号を選び、さらにコンボボックスから 好きな数字を選びます。そしてスタートボタンを押すと、選んだ数字を選んだ記号 で計算した値がセルに表示されます。 というようなプログラムを考えているのですが、うまくできません。 ポイントは、 ・チェックボックスにリストを入力する方法 ・チェックボックスの選択状態や、リストボックスから選ばれた数字を、  変数として取得する方法 インターネットで調べているのですが、リストボックスに値を入れるのにもマクロを走らせ なければならない方法とか、ユーザーフォームでの説明ばかりでなかなか実現に至りません。 http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_userform05.html プログラムのイメージ図としては添付の図の通りです。 どのようにプログラムを書けばいいのでしょうか。

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

    はじめまして、エクセルVBAの超初心者です。 コンボボックスを使ってマクロを組みたいのですが、どうしてで良いか分からず教えていただければと思います。 エクセルのシートに下のようなデータがあるとします A       B りんご     あおもり りんご     ながの みかん     わかやま バナナ     フィリピン コンボボックス1にAセルを重複しないようにセットして コンボボックス2に1で選択されたものをセットしたいのですが。 プロパティのListFillRangeでAの範囲を選択しても、重複してしまい、それからどうして良いのかわかりません。 どなたか教えて頂けませんか?

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

    Excel VBA コンボボックスを作成しましたが、リンクを張ってあるデータ文字数が多いと、指定したサイズのコンボボックスよりはみ出て、すべて見ることができません。 Excelの「折り返して表示」のように表示するためには、どのようにしたらいいのでしょうか。 また、 この質問の参考になる、サイトなどありましたら、教えてください。

  • Excel VBA コンボボックスの使い方

     VBAでのコンボボックスの使い方をしらべているのですが、うまく見つかりません。コンボボックスのリストに登録するのはどうしたらよいのでしょうか?シート上のセル内のデータを使用しないとリストの登録は出来ないのでしょうか?VBA上で作成して、ユーザーフォームで選択できるようにしたいと思っています。VBAをはじめたばかりなので初歩的な質問で大変恐縮です。どなたかわかる方がいらっしゃったらお願い致します。

  • エクセルVBA コンボボックス

    今データ入力用のフォームmainがあります。 そこで複数のデータを入力していくのですが、そこでわからなくなりました。 入力用コンボボックスがひとつだけのときは Private Sub userform_Initialize() Dim 配列(2) 配列(0) = "データ1" 配列(1) = "データ2" 配列(2) = "データ3" 入力用コンボ.List = 配列 End Sub Private Sub 入力用コンボ_Change() MsgBox 入力用コンボ.ListIndex End Sub としていたのですが、複数になった場合の理屈を含めわかりません。 一つの入力用フォームにコンボボックスが複数あった場合はどうすればよいのですか?

  • コンボボックスの貼りつけ excel

    vba初心者です。excel帳簿を作っております。 科目選択時にリストが28個あるプルダウンを使っておりましたが選択するのが大変だったのでコンボボックスにしたら28個全て表示されるようになり選択が楽になりました。 このコンボボックスのLinkedCellはD4です。 コンボボックスをD4の上に表示してD4セルにピッタリはめ込んでいる感じに見えます。 D4以下150個、D列にコンボボックスを貼りつけたいです。 コピーして貼り付けてもLinkedCellはD4のままですので、貼りつけたコンボボックスのプロパティを150回変えないといけないのかと思うと気が遠くなります。 このコンボボックスを何か登録して、「コードの表示」あたりで何かやれば何とかなるのではないかと思ったのですが、何か手立てがあれば教えてください。 このコンボボックスを同じブックの別のシートにも使いたいと思っております。

  • エクセルVBAのコンボボックスについて

    エクセルVBAでActiveXコントロールのコンボボックスを配置して以下の プログラムを記述しているのですが、 コンボボックスでAを選択した後に、もう一度Aを選択したときに イベントが発生しません。 Private Sub ComboBox1_Change()ならイベントが発生しないのは 分かるのですが、Clickの場合は、選択された値が変わらなくても イベントが発生すると思ってたのですが。 VB6では問題なく発生しています。 ちなみにセルの入力規則ではなくてコンボボックスで実現したいです。 Private Sub ComboBox1_Click() 'ここに処理を記述 End Sub

  • エクセルVBA コンボボックスで強制終了

    こんにちは。 エクセルVBAでいくつかのフォームを作成しているのですが、 常にではないのですが、「問題が発生したため・・・」のメッセージで 強制終了させられてしまいます。 恐らく、コンボボックスが原因かと思われるのですが。。。 申し訳ありません。教えていただけると嬉しいです。 VBA 1.Initialize  (1)コンボボックス1リスト設定:データ2  (2)コンボボックス2~21(20個のコンボボックス)リスト設定                :データ数80 2.コンボボックス1_Change  (1)コンボボックス22リスト設定:データ数80 現象  (1)コンボボックス22を▼でなく入力し、保存すると強制終了  (2)上記現象発生後、コンボボックス1の▼押下で強制終了  (3)複数のPCで試したが、性能の良いPCでもたまに起こる。   性能が悪いPCの場合、確実に起きる。  (4)他のフォームはいくらやってもこの現象は発生しない。   但し、コンボボックス2~21のような大量なコンボボックスはない 考えること  (1)コンボボックスのリストの限界等はあるのでしょうか。  (2)メモリ等の関係で発生するのでしょうか。  (3)コンボボックスに入力不可とするか、テキストでNoを入力   させる方法をとった方がよいでしょうか。 長々とすみません。 よろしくお願いいたします。    

専門家に質問してみよう