【ExcelVBA】ワークシートからListBoxへ取得

このQ&Aのポイント
  • Excelのsheet1に入力されているリストを、ユーザフォームのListBoxに取得したい。一意に抜き出したリストを別シートにコピーしてリストを解除することで、ListBoxに設定することはできたが、別シートを使わずに処理を済ませたい。
  • 【年次|コード|名称】の構成でユニークなリストを取得し、ListBoxに表示したい。AdvancedFilterを使用して一意に抜き出したリストを別シートにコピーし、リストを解除した方法は成功したが、別シートを使用せずに処理を完了したい。
  • WindowsXP/Excel2003/VB6の環境で、Excelのsheet1に入力されている【年次|コード|名称】のリストをユーザフォームのListBoxに取得したい。AdvancedFilterを使用して一意に抜き出したリストを別シートにコピーし、リストを解除した方法は成功したが、別シートを使用せずに処理を完了したい。
回答を見る
  • ベストアンサー

【ExcelVBA】ワークシートからListBoxへ取得

はじめまして。最近VBAを始めたばかりです。 今回ご指導戴きたいのは、以下の内容になります。 Excelのsheet1に入力されているリストを、ユーザフォームのListBoxに取得したいのですが、思うようにできません。 sheet1に入力されているリストの構成は、【年次|コード|名称】となっており、【年次+コード】でユニークになっています。 今回私が行いたい操作は、『コードを重複せず取得し、コードに紐付く名称をListBoxに表示』という操作です。 一応AdvancedFilterを使い、一意に抜き出したリストを別シートにコピーしてリストを解除することで、ListBoxに設定することはできました。 ですが、できれば別シートを使うことなくsheet1だけで処理を済ませたいと思っています。 環境は、WindowsXP/Excel2003/VB6です。 ご存知の方がいらっしゃいましたら、ご指導お願い致します。

  • izunu
  • お礼率25% (1/4)

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

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.1

標題が不適当。 >ワークシートからListBoxへ取得 ではなくて、 重複しない行の取得が重点内容のはず。 ーー それとリストボックスへのアイテムへの設定 ーー 一方法を挙げておくが、色々な方法がありそうです。 私は関数の応用で簡潔にできないかとやったが。 リストの2列設定も含め、コントロールのことを勉強してください。 >最近VBAを始めたばかりです、の人には難しすぎるとおもう。 その分、回答丸写しにならざるを得ないだろう。 例データ I列   J列 コード 名称 12-111 aa 13-222 bb 12-111 aa 13-222 bb 15-345 cc 18-435 dd 20-225 ee Sub test01() Dim mylist(2, 20) '2 列 21行の例 UserForm1.ListBox1.ColumnCount = 2 UserForm1.ListBox1.Clear d = Range("I65536").End(xlUp).Row MsgBox d k = 0 For i = 2 To d If Application.WorksheetFunction.CountIf(Range("I2:I" & i), Cells(i, "I")) = 1 Then mylist(0, k) = Cells(i, "I") mylist(1, k) = Cells(i, "J") k = k + 1 End If Next i '--- UserForm1.ListBox1.Column() = mylist UserForm1.Show End Sub

izunu
質問者

お礼

早い回答ありがとうございました。 >標題が不適当。 >>ワークシートからListBoxへ取得 >ではなくて、 >重複しない行の取得が重点内容のはず。 ご指摘ありがとうございます。次に質問させていただく際には、一目で疑問内容が分かるよう表題に気をつけさせていただきます。 >最近VBAを始めたばかりです、の人には難しすぎるとおもう。 やはり、処理としては難しい部類に入るのでしょうか・・・。 >リストの2列設定も含め、コントロールのことを勉強してください。 ご指摘ありがとうございます。コントロールは知らない事が多々あるため、重点的に勉強していこうと思います。 それと、上記内容はシート側に記述するものであってますか? 質問に明記するのを忘れていましたが、実際はユーザフォーム側で処理を行うことになります。 上記回答を元に自分でいじってみるつもりですが・・・。 また、重ねての質問になるのですが、リストに設定したアイテムを選択してユーザフォームのボタンを押下した場合、別シートにある表の最終行へ追加させる事って可能なのでしょうか?

関連するQ&A

  • VBAのシート名称取得について

    VBAにてシート名称を取得しシート1の一覧にまとめ、ハイパーリンクで一覧から各シートへ飛べるようにしています。 Dim retsu As Long,gyo As Long For retsu = 1 To Worksheets.Count 'シート名称をリストに記入 ThisWorkbook.Worksheets(1).cells(gyo + 1, 2) = Worksheets(retsu).name Next このコードでシート名称を取得するとシート名称が「001」などの頭に0の数字があるとき、リスト上では「1」となってしまいます。 そのため、リスト上とシート名称が異なり、ハイパーリンクの設定時に参照エラーとなってしまいます。 桁数を問わずに「001」は「001」のまま、「1」は「1」のまま取得するにはどうすればよいでしょうか? ※シート名称には「1月度」などの文字列もあります。(数字の名称のみではありません)

  • ExcelでListBoxを閉じるには?

    Excelにリストボックスを作成します。 そして、特定のセルの値が変更されたら、入力候補をリストボックスに表示する。 リストボックスの項目をダブルクリックまたはEnterキーを入力したら、 リストボックスを非表示にする。 (要は、オートコンプリートなんですが、入力候補は別シートの値を表示したい) ということをしたいのです。 が、VBAで Private sub ListBox1_KeyDown(...) ListBox1.Visible = false end sub とやってしまうと、excelがアプリケーションエラーで死んでしまいます。 どのようにすればよいのでしょうか? よろしくお願いします。

  • Excel VBA ListBoxについて

    お世話になります。 Excelで以下のようなフォーム画面を作成しております。 1.フォーム画面には、リストボックス、テキストボックス、登録ボタンを設定 2.リストボックスには、Sheet1のデータが表示される。 3.リストボックスのレコードを選択すると、選択した値がテキストボックスに表示される。 4.登録ボタンをクリックすると、テキストボックスのデータが、Sheet1に反映される。 今1~3まではできましたが、4で悩んでおります。 テキストボックスの値を取得してセルに反映させようと以下のコードを書きました。 'リストボックスで選択したレコード数 ListNo = Me.ListBox1.ListIndex 'TextBox1の値を、Sheet1のセルにセット Sheets("sheet1").Cells(ListNo, 1).Value = Me.TextBox1.Value  これを実行すると、何故かここから3のリストボックスのレコードをクリックしたイベントを呼びます。 Private Sub ListBox1_Click() クリックしてもいないのですが、Private Sub ListBox1_Click() を呼ばないようにしたいので、 ListBoxをEnableプロパティをfalseにしても、呼んでました。 呼びにいかない方法をご教授いただけますでしょうか。 よろしくお願いいたします。

  • EXCELのワークシート名とセルの値の取得に付いて

    EXCEL2000を使用しておりますが、ワークシート名と、そのシート内の複数のセルの値を取得し、別シートにマトリックス表示出来るように 入力フォームを設計したいのですが、固定の名称を予め組み込むのではなくフォーム上で入力したテキストをワークシート名及び、セルの位置として扱えるようにするのには、どのようなマクロを書けばよいでしょうか?例えばシート名A~Fの各シートのA1~F1のセルに10~15の数値が 入っていて、Gのシートでマクロを動かすと、シート名とセルの位置を 入力するフォームが現れ、それぞれ入力すると、指定されたシート名と セルの中の値が、Gシートに、1行ずつ追加されて行く処理をイメージ しています。何卒、宜しくご指導の程、お願いいたします。

  • ユーザーフォームでのListBoxからの・・・

    Excelファイルを起動しシート上の様式に入力するユーザーフォームを初めて作成しております。 今回の質問ですが、フォーム上でのリストから合致する内容を別テキストボックスへ表示する様にしたいのですが御教授下さい。 ※VBA作成シート上ではVLOOKUP関数を使い使用しておりました。 例) ListBox1でリストで氏名を選択 → TextBox1へ氏名に合致するTEL番号表示  → 様式のセルへ転記 ※セルへの転記は心得ております。 Office2010 Win7での環境です。 初めてVBAをいじり、作動した時の喜びをニヤけながら作成しております。 どうぞ、よろしくお願いいたします。

  • excel vba listboxについて

    EXCELのVBA LISTBOXに関することで質問です。 ワークシート1のA2-5セルに取引先名を入力してあります。 UF1という名前のユーザーフォームの中にリストボックスを作成し、ワークシート1のA2-5の取引先を表示するには、 Private Sub UserForm_Initialize() Dim torihiki As String torihiki = Worksheets(1).range("A2:A5") UF1.ListBox1.List() = torihiki End Sub と打ち込んでいます。 ちなみに、ユーザーフォームは以下のようにOKボタンで閉じるようにしました。 Private Sub CommandBottan1_Click() unload UF1 End Sub 質問したいのはここからですが、 上のユーザーフォーム内のリストボックスで選択された取引先をTRHKという変数に代入したい場合、どうしたらいいのでしょうか? 私の少ない知識を振り絞って以下のように考えてみたのですが、 TRHK = UF1.ListBox1.List() としても代入されていないようです。 List()ではないメソッドが必要なのだと思うのですが・・・・ .Selectedとかでしょうか? どなたか、ご教授願います! 宜しくお願い致します。

  • 別のシートの文字列を他のシートに移すには?

    エクセル VBAで別のシートの文字列を他のシートにコピーするには どのようなコードを記入すればよろしいでしょうか? 同一ブック内に「Sheet1」と「リスト」のワークシートがある場合、 次の順序でリストのデータを他のシートに貼り付けるには どのようにコードを入力すればよろしいでしょうか? (1)2行目からのリストの使用行数を調べる。  ※リストの使用行数は変動するため、決まっていません。 (2)Sheet1は、32行しか入力できないため、(1)で求めたリストの行数から  ワークシートを必要数コピーする。 例 リストの行数が100の場合、Sheet1を3つコピーし、計4つにする。 (3)リストの図番(A列)、名称(C列)、金額(E列)をコピーし Sheet1のA,B,C列に「値」で貼り付ける。 (4)Sheet1のA,B,C列に32行貼り付け終わったら(2)でコピーした次のシートに続きのリストを貼る。 (5)リストの最後(文字が記入してある箇所)まで他のシートへのコピーが終わるまで  ワークシートを変えて続ける。 以上です。 よろしくお願い致します。 エクセルは2003、2007使用しております。

  • ListBoxを数字Keyで選択したい

    お世話になります。 OSはWin XP Home、Excel2002を使用しています。 EXCELのsheet1にCommandButton1とListBox1を貼り付けて以下のようにコーディングしています。 'Listbox1表示 Private Sub CommandButton1_Click() ListBox1.Visible = True End Sub '使用者はリストボックスのダブルクリックでリストボックスの入力ができる。 Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean) ListBoxDataSet End Sub '使用者はリストボックスでマウスで選択後EnterKeyで入力ができる。 Private Sub ListBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) If KeyAscii = vbKeyReturn Then ListBoxDataSet KeyAscii = 0 '←これがないとなぜかEXCELが異常終了するので注意! End If End Sub 'リストボックスで選択したリストを、シートの選択セル(単一)に転記し、 'その後でリストボックスを非表示 Sub ListBoxDataSet() ActiveCell.Value = ListBox1.Text ListBox1.Visible = False End Sub さらにListBox1のプロパティのListFillRangeはA1:B100としており、A列は1から100の連番、B列は上から順に「中山」、「常盤」、「高島」・・・98番目には「吉岡」という名前があります。 現在A列の数字は表示以外の機能は持っておらず、ダブルクリックか、マウスで1クリックで項目選択をした後にEnterKeyで名前だけがActivecellに転記されるようになっています。 100件もの項目をひとつのリストボックスには表示しきれず、スクロールバーで探すのも大変なので、例えば数字Keyで1と打てばすぐに「中山」が選択され、さらにEnterKeyで転送される、98と打てば「吉岡」が選択され・・・という風に機能追加したいのです。 いろいろ調べましたが、方法が分かりませんでした。 よろしくお願いします。

  • エクセル、コントロールツールボックスでListBoxへの範囲の設定方法

    エクセル、コントロールツールボックスでListBoxへの範囲の設定方法について疑問があります。 ワークシート上にフォームコントロールのListBoxではなくコントロールツールボックス(ActiveXコントロール?)のListBoxを配置した場合、リストの範囲をSheet1のA1:A10と設定するには、RistFillRange欄にSheet1!A1:A10と一々手入力しなければいけないのでしょうか? フォームコントロールのListBoxの場合は、「コントロールの書式設定」の「コントロール」で入力範囲をドラッグするだけで自動的に入力され、とても便利だったのですが、ActiveXコントロールを使おうと思うととても面倒です。 それともわたしがやりかたをまちがえているのでしょうか?

  • リストボックスにシートの値を表示させたいのですが

    vbaでシートのリストボックスにシートの値を表示させたいのですが シートモジュールでこのコードを実行しようとしてもエラーになり出来ないのですが どこが間違ってますか? Sub リストボックスに値を表示する() Me.ListBox1.RowSource = Range("c1:c10").Value End Sub Me.ListBox1.Value = Range("c1:c10").Value もエラーになりました。

専門家に質問してみよう