コンボボックスの値を参照する

このQ&Aのポイント
  • VBA初心者の方がコンボボックスの値を参照する方法について質問されています。
  • 質問内容では、出身地とデータを定義し、選択という名前でD1~D3を定義していることが分かります。
  • また、空白セルを見つけるための方法として、Rangeを使用することがわかりました。しかし、その後のユーザーフォームでの処理が上手くいかないようです。
回答を見る
  • ベストアンサー

コンボボックスの値を参照する

こちらVBA初心者です。宜しくお願い致します。 A:Aを"出身地"、 B:Bを"データ"という名前で定義しており、 D1~D3を"選択"という名前で定義しています。 入力内容はこうです。 D1・・・空白 D2・・・出身地 D3・・・データ そしてA列とB列の最初にある空白セルを見つける為に、 Range("出身地").Select Selection.End(xlDown).Offset(1, 0).Select もしくは、 Range("データ").Select Selection.End(xlDown).Offset(1, 0).Select で可能だと言う事がわかりました。 そして、それをユーザーフォームでコンボボックス内のRowSouceに選択と入力して、 コンボボックスでどちらかを選び、ボタンを押して実行。と、したいのですがここから先がうまくいきません。 VBAに関するサイトは多く、様々な場所で勉強させていただきましたがどうにも理解出来ませんでした。 どうか、お助け下さい。

  • go-to
  • お礼率100% (32/32)

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

  • ベストアンサー
  • masa_019
  • ベストアンサー率61% (121/197)
回答No.2

No.1です。 どうやら、質問を正しく理解できていなかったようです。 やりたいことは、こういうことかな?  Private Sub UserForm_Initialize()  Me.ComboBox1.RowSource = ActiveSheet.Range("選択").Address  End Sub  Private Sub CommandButton1_Click()  ActiveSheet.Range(Me.ComboBox1.Value).Range("A1").End(xlDown).Offset(1).Select  End Sub

go-to
質問者

お礼

・・・・・・・素晴らしい なんといいますか、理想の形が120%叶った気分です。 さっそくこれの続きにかかりたいと思います。 ありがとうございましたm(_ _)m

その他の回答 (1)

  • masa_019
  • ベストアンサー率61% (121/197)
回答No.1

UserForm1上に、ComboBox1とComboBox2、CommandButton1があり、 ComboBox1にはアクティブシートのA列、 ComboBox2にはアクティブシートのB列のデータをセット、 CommandButton1をクリックすると、 ComboBox1の値がアクティブシートのD2に、 ComboBox2の値がアクティブシートのD3に表示されるようにしたい といったところでしょうか?  Private Sub UserForm_Initialize()  'ユーザーフォームの表示前にComboBoxのRowSourceを設定  With ActiveSheet  Me.ComboBox1.RowSource = .Range(.Range("A1"), .Range("A1").End(xlDown)).Address  Me.ComboBox2.RowSource = .Range(.Range("B1"), .Range("B1").End(xlDown)).Address  End With  End Sub  Private Sub CommandButton1_Click()  'ComboBoxの値をシートに出力  With ActiveSheet  .Range("D2").Value = Me.ComboBox1.Value  .Range("D3").Value = Me.ComboBox2.Value  End With  End Sub A:Aを"出身地"、 B:Bを"データ"という名前で定義する必要はありませんが、 出身地を =OFFSET(Sheet1!$A$1,0,0,COUNTA(Sheet1!$A:$A),1) データを =OFFSET(Sheet1!$B$1,0,0,COUNTA(Sheet1!$B:$B),1) と定義しておけば、UserForm_Initializeのコードを  Private Sub UserForm_Initialize()  Me.ComboBox1.RowSource = "出身地"  Me.ComboBox2.RowSource = "データ"  End Sub とすることも可能です。

go-to
質問者

お礼

長い文章を最後まで読んで頂き、その上考えを汲み取って頂いた回答に感服いたしました。 ありがとうございました。

go-to
質問者

補足

御回答ありがとうございます。 私に文章力が無いせいか、勘違いをさせてしまったのかもしれません;;; 完全に書き忘れてしまっている事もあり、そこの訂正も致します。 UserForm1にはComboBoxは一つだけでそこで選択したいのはD1~D3のセルに入力してある値 >入力内容はこうです。 >D1・・・空白 >D2・・・出身地 >D3・・・データ D1は空白、D2は"出身地"という値、D3には"データ"という値が予め入っている状態 そしてD1~D3の名前を"選択"と定義してある。 コンボボックスのRowSourceに入れるのはその"選択"という範囲。 そこで選んだ方、今の状態なら"出身地"か"データ" A:Aを"出身地"、 B:Bを"データ"という名前で定義しており、 出身地を選んだのであれば、 Range("出身地").Select Selection.End(xlDown).Offset(1, 0).Select データを選んだのであれば Range("データ").Select Selection.End(xlDown).Offset(1, 0).Select これのどちらかをCommandButton1で実行したい。と考えております。 ComboBox1で選んだ値を、 Range("xxxx").Select Selection.End(xlDown).Offset(1, 0).Select のxxxxにどうやったら反映させられるのか?という事です。 それだと、ただセルを選択するだけなんじゃ?と、思われるかもしれませんがその通りです。 やりたい事はもうちょっと複雑なのですがまずはこれから。と思っております。 IF文を使うと長くなりそうですし、 (簡単に説明する為、D列には2つしか項目を入れておりませんが本当は9個の項目をComboBox1に入れたい) 何か簡単なものはないかと探していた次第でございます。 質問の題を"コンボボックスの値を参照する"と書いてしまったのもいけなかったのだとも思います;;; 改めて、よろしくお願い致します。

関連するQ&A

  • VBAについて

    皆様、こんにちは。 VBAを使って会計シートを作っていますが、初心者なので、色々と悩んでいます。今回、コンボボックスにセールをリンクして、コンボボックスで選ばれた値に合わせてシートの行を増やしたいですが、どうすればいいでしょうか?例えば、linked cellは2の場合は、 Range("D25:G27").Select Selection.Insert Shift:=xlDown 3の場合は Range("D25:G28").Select Selection.Insert Shift:=xlDown などのようにしたいですが、誰か詳しい方が教えてくだされば非常に助かります。どうぞよろしくお願いいたします。

  • マクロでシート2~6のデータをシート1に転記したい

    マクロでシート2~6のデータをシート1に転記したいです。 シート2~6のデータを シート1に順番に転記したくてマクロの記録を利用して作成しました。 シート2~6は列は同じですが行数は異なります。 また行数は作業の都度異なります。 同じ記述が繰り返されているので もう少し記述が短くできるのではと思うのですが どうすればいいでしょうか? Sub データ更新() 'シート1の前回データをクリア Sheets("シート1").Select Range("A2:Q2").Select Range(Selection, Selection.End(xlDown)).Select Range(Selection, Selection.End(xlDown)).Select Selection.ClearContents Range("A2").Select Sheets("シート1").Select Range("A1").Select Sheets("シート2").Select Range("A1").Select 'ヘッダーも合わせて取得 Range(Selection, Selection.End(xlToRight)).Select Range(Selection, Selection.End(xlDown)).Select Selection.Copy Sheets("シート1").Select ActiveSheet.Paste Application.CutCopyMode = False Selection.End(xlDown).Select Selection.Offset(1, 0).Select Sheets("シート3").Select Range("A2").Select 'データのみ取得 Range(Selection, Selection.End(xlToRight)).Select Range(Selection, Selection.End(xlDown)).Select Selection.Copy Sheets("シート1").Select ActiveSheet.Paste Application.CutCopyMode = False Selection.End(xlDown).Select Selection.Offset(1, 0).Select Sheets("シート4").Select Range("A2").Select Range(Selection, Selection.End(xlToRight)).Select Range(Selection, Selection.End(xlDown)).Select Selection.Copy Sheets("シート1").Select ActiveSheet.Paste Application.CutCopyMode = False Selection.End(xlDown).Select Selection.Offset(1, 0).Select Sheets("シート5").Select Range("A2").Select Range(Selection, Selection.End(xlToRight)).Select Range(Selection, Selection.End(xlDown)).Select Selection.Copy Sheets("シート1").Select ActiveSheet.Paste Application.CutCopyMode = False Selection.End(xlDown).Select Selection.Offset(1, 0).Select Sheets("シート6").Select Range("A2").Select Range(Selection, Selection.End(xlToRight)).Select Range(Selection, Selection.End(xlDown)).Select Selection.Copy Sheets("シート1").Select ActiveSheet.Paste Application.CutCopyMode = False Selection.End(xlDown).Select Selection.Offset(1, 0).Select End Sub

  • エクセルVBAで値のカウントをしたい

    C列~AA列まで値が入っています 1行目にはタイトル 2行目からそれぞれ値が入っており、終了行は毎回ランダムです 各列毎に値の合計と1以上の値の合計数を表示するために下記のマクロを使用しているのですが、もっとスマートな方法は無いでしょうか? 現在のマクロだとマクロ行数がとても多いものになっています。 Sub Count() With Range("C2") .End(xlDown).Offset(1, 0) = _ "=SUM(" & Range(.Address, .End(xlDown)).Address(False, False) & ")" End With '本当はCの最終行に直接COUNTIFを書き込みたいが、他のセルを使用しないと0になる Range("A1") = "=COUNTIF(C2:C10000,"">=1"")" Range("A1").Select Selection.Copy Range("C1").End(xlDown).Offset(1, 0).Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Application.CommandBars("Stop Recording").Visible = False With Range("D2") .End(xlDown).Offset(1, 0) = _ "=SUM(" & Range(.Address, .End(xlDown)).Address(False, False) & ")" End With Range("A1") = "=COUNTIF(D2:D10000,"">=1"")" Range("A1").Select Selection.Copy Range("D1").End(xlDown).Offset(1, 0).Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Application.CommandBars("Stop Recording").Visible = False '以降AAまでセルの位置を変えた同一マクロを繰り返す End Sub

  • VBA Do Until内で値の貼り付けができない

    Excel2003を使用しております。 コピー&値のペースト作業をやってくれるマクロを作成しております。 具体的には、名簿に公がついていれば、その3つ左の名前をD27へ値のみコピペし、 D27がすでに値があれば、D28に書くことを、D37までループするようにしております。 しかし困ったことに、Do Untilコードを使用しておりますが、このコードではなぜか値の貼り付けが出来なくなります。 Sub Ns公() Dim work As Range Set work = Selection If Selection.Value = "公" Then ActiveCell.Offset(0, -3).Select Selection.Copy Do Until Range("D37").Select Range("D27").Select If Selection.Value = "" Then Selection.PasteSpecial paste:=xlPasteValues work.Select Else ActiveCell.Offset(1).Select End If Loop If Range("D36").Value <> "" Then Do Until Range("I37").Select Range("I27").Select If Selection.Value = "" Then Selection.PasteSpecial paste:=xlPasteValues work.Select Else ActiveCell.Offset(1).Select End If Loop work.Select End If work.Select End If work.Select ActiveCell.Offset(1).Select End Sub 原因や対策をご教授いただけるとうれしいです。よろしくお願いします。

  • VBA、セルの選択範囲について

    下記のような表を用意し、   A   B  C  D  E 1    1月 2月 3月 合計 2 Aさん 1  2  3  6 3 Bさん 1  2  3  6 4 Cさん 1  2  3  6 5 合 計 3  6  9  18 セルの範囲選択を指定し別シートの任意のセルへコピーをVBAで行いたいのですが、 Aさん、Bさん、Cさんという範囲を選択する為に、合計という文字は含みたくないので、 Range("A2").Select Range(Selection, Selection.End(xlDown).Offset(-1)).Select と記載し、これは出来ました。 同様に、 1月、2月、3月という範囲も同様にxlToRightを使用し選択出来ました。 Range("B1").Select Range(Selection.End(xlToRight).Offset(, -1), Selection).Select しかし、B2:D4の範囲の指定の仕方がわかりませんでした。 データのレコード数は一定ではないのでB2:D4というように範囲を指定する事は出来ません。 そのときに応じてDさん、Eさんと増えたり、4月、5月と増えたりするので。 何か方法があればご指導お願いします。

  • データの最後尾より連続入力するマクロについて

    VBA初心者です。宜しくお願いします。 やりたい処理は、データ最後尾に連続データを順に入力していく作業です。 下記ですとA5:F5のデータをA6:F6にオートフィルで入力し、 A6= 6 B6= 空白 C6= 空白  D6= 空白 E6= を F6= ん という計算結果にしたいのです。 ___|A__B__C__D__E__F 1 | 1 あ い う え お 2 | 2 か き く け こ 3 | 3 さ し す せ そ 4 | 4 た ち つ て と 5 | 5      を ん 6 | Range("A1").End(xlDown).Select Range(ActiveCell, ActiveCell.Offset(0, 5)).Select A5:F5を選択した後のオートフィルのマクロはどう記述すればよいでしょうか? 宜しくお願いいたします。

  • いい方法を教えてください(VBAについての質問)

    よろしくお願いします。 ある処理についてプロシージャを作成しました。 それは「毎回データの行数・列数の異なるデータから必要な列のデータだけを取り出して別のシートにコピーして貼り付ける」処理です。 具体的にはセルのA2以下にデータを貼り付けて必要な列の1行目空白セルに1を、不要な列は0を入れ、必要なデータ(1を入れた列にあるデータ)だけ取り出すという処理です。  Do Until ActiveCell.Value = ""   If Selection.Value = "1" Then   Selection.Offset(1, 0).Select   Range(Selection, Selection.End(xlDown)).Copy _   Destination:=mySht.Range("IV1").End(xlToLeft).Offset(0, 1)   Selection.End(xlUp).Offset(0, 1).Select   Else   Selection.Offset(0, 1).Select   End If  Loop ↑こんな感じで書きました。 myShtは変数で、必要データ貼り付け用に作成したシートです。 使ってみて穴に気付きました。 データに空白があった時に、空白以後のデータがコピーされないのです。そういう書き方なので当然ですが・・・。 範囲の指定をその列のデータの最初から空白関係なくデータのある最終行までにしようとあれこれと試しましたがことごとくうまくいきません。 これが1つ目の悩みです。 もう1つは   Range(Selection, Selection.End(xlDown)).Copy _   Destination:=mySht.Range("IV1").End(xlToLeft).Offset(0, 1) の部分、取り出した列のコピーを別のシート(mySht)に左寄せで順番に詰めてコピーしていくようにしたのですが、この記述だと1列目が空いてしまいます。 ですから実際はこの後1列目を削除する処理をしています。 この1列目の削除というのが本来不要な作業なので、なんだかイヤなのです。 何かいい方法を教えてください。 ヒントみたいなものでもうれしいです。

  • 色々なものを見ながら作っている初心者です。

    色々なものを見ながら作っている初心者です。 よろしくお願いします。 VBAでのエラー対処について 下記のマクロを実行すると、実行時 「Selection.Resize(, Selection.Columns.Count - 2).Select」のところで セルがブランクだった時にエラーが出てします。 対処の方法を教えていただけませんでしょうか? よろしくお願いします。 Sheets("sheetB1").Select Range("A7:C161").Select Application.CutCopyMode = False Selection.ClearContents Sheets("sheetA").Select Range("D12").Select Range(Selection, Selection.End(xlDown)).Select Range(Selection, Selection.End(xlToLeft)).Select Selection.Resize(, Selection.Columns.Count - 2).Select Selection.Offset(0, 1).Select Selection.Copy Sheets("sheetB1").Select Range("A7").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Sheets("sheetA").Select Range("E12").Select Range(Selection, Selection.End(xlDown)).Select Selection.Copy Sheets("B1").Select Range("C7").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Sheets("sheetB2").Select Range("A7:C161").Select Application.CutCopyMode = False Selection.ClearContents Sheets("sheetA").Select Range("J12").Select Range(Selection, Selection.End(xlDown)).Select Range(Selection, Selection.End(xlToLeft)).Select Selection.Resize(, Selection.Columns.Count - 2).Select Selection.Offset(0, 1).Select Selection.Copy Sheets("sheetB2").Select Range("A7").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Sheets("sheetA").Select Range("K12").Select Range(Selection, Selection.End(xlDown)).Select Selection.Copy Sheets("steetB2").Select Range("C7").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=Fals

  • エクセルVBAで範囲の指定をしたいです(初心者)

    エクセルVBAで範囲の指定をしたいです(初心者) 列AからJがデータが入る範囲です。 列AとBとCには必ず数値等が何かしら入ります。 列Dは常に空白です。 列E以降は何か入ることも入らないこともあります。 7行目までデータがある場合、 A1セルからこの場合はJ7セルまでを範囲指定したいのですが 行数は未定なので、 Range("A1").Select Range(Selection,Selection.End(xlDown)).Select でA列のデータ最終行まで下がり、そこから9つ右の列までを 範囲指定するというのがよくわかりません。 自動記録で絶対参照と相対参照を切り替えてやってみたのですが、 どうしても Range(Selection, Selection.End(xlDown)).Select ActiveCell.Range("A1:J7").Select と常にA1からJ7が指定になってしまいます。 バージョンは2003です。 つたない質問文で申し訳ありませんが、 どなたか宜しくお願いいたします。

  • 空白までのデータを範囲指定する

    EXCEL VBAにて教えてもらいたい事があります。 空白までの行列を範囲指定したいのです。         A  B   C   D  1   1123 123  12  57 2    32 1 5 52 3 2 98 852 11 4 65 2 72 1 A列からD列の行が空白になるまでの範囲を指定する マクロを教えてほしいです。 A列の最終行の次の行にカーソルを合わせるマクロはわかるのですが 範囲を指定する方法がわかりません。 よろしくお願いいたします。 最終行の次の行にカーソルを合わせるマクロ Range("A1").End(xlDown).Select ActiveCell.Offset(rowOffset:=1).Activate Selection.Copy