ComboBoxでの一文字検索が上手くいかない!Excel2003を使っています。

このQ&Aのポイント
  • ユーザーフォームでComboBoxを使用しているが、一文字検索がうまくいかない。
  • フォーム上のComboBoxにはカタカナ1文字を入力し、その文字に該当する会社の3項目を表示したい。
  • 一部のカタカナ(例:ヒ)では会社が選択されない。ComboBoxのプロパティは、MatchEntryが「0-fmMatchEntryFirstLetter」となっている。
回答を見る
  • ベストアンサー

ComboBoxでの一文字検索が上手くいきません

ソフトはEXCEL2003です。 質問内容: ユーザーフォーム習い始めたところで、つまずいています。 やりたいことは、フォーム上に配置したComboBoxに別シート(選択一覧)で作成した「カタカナ1文字、会社名、会社コード」の3項目を表示可能にしておく。 ComboBoxへのカタカナ1文字入力により、該当する会社の上記3項目を表示し、会社選択後ComboBoxには会社名を表示、リストボックスには選択した会社コードを表示し、登録リストに会社名と会社コードを登録する。 フォームを作成してテストしましたが、一部のカタカナ(ヒなど)で該当する会社が選択されません。 何が問題なのか知識が足りませんので、困っています。 お分かりになる方に教えて頂きたくお願いします。 なお今回会社名をカタカナ1文字検索にしたのは、例えば社名の前に(株)等が付くものや、同じ漢字でも日本(ニホン)、日陰(ヒカゲ)等呼び名が異なるものがあるためです。 また、ComboBoxのプロパティは「MatchEntry」を「0-fmMatchEntryFirstLetter」としてあります。 ところで作成した命令は次の通りです。 Private Sub UserForm_Initialize() Dim MyVar1 As Variant Dim Ws1, Ws2 As Worksheet Dim LastRow As Long Set Ws1 = Worksheets("登録") Set Ws2 = Worksheets("選択一覧") Ws2.Select MyVar1 = Range("A3:C490") With ComboBox1   .ColumnCount = 3  ’カタカナ1文字、会社名、会社コード   .ColumnWidths = "20;230;10"   .List = MyVar1 End With ComboBox1.TextColumn = 2   Ws1.Select   ComboBox1.MatchEntry = fmMatchEntryFirstLetter End Sub Private Sub ComboBox1_Change() '会社名処理 Dim Ws1, Ws2 As Worksheet Dim NawRow As Long Set Ws1 = Worksheets("登録") Set Ws2 = Worksheets("選択一覧") ComboBox1.MatchEntry = fmMatchEntryFirstLetter    '表示行数を確認 一番上が「0」なので+1   NawRow = Me.ComboBox1.ListIndex + 1   TextBox4.Text = Ws2.Cells(NawRow + 2, 3) '会社コード表示;選択一覧は3列3行目から開始 Ws2.Cells(1, 1) = NawRow + 3       '選択一覧1行目に選択行表示 デバック用 End Sub  ※登録リストへの会社名と会社コードを登録する部分は省略しました。  以上よろしくお願いします。 その他、このような多くの会社名選択で、よい方法があれば教えてください。

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

  • ベストアンサー
  • MARU4812
  • ベストアンサー率43% (196/452)
回答No.1

カタカナで検索したいなら ComboBox1.TextColumn = 1 だね。 ヘルプで説明されている通りの動きだと思います。 (以下、ヘルプより抜粋) > 解説 > コントロールに文字を入力すると、TextColumn プロパティが > 示す列を対象にして、入力した文字列と一致する項目があるか > どうかが検索されます。 プログラムはプログラムされている通りの動きしかしません。 貴方の思い込みどおり動いてくれる事はありません。 ただ、それだけのことです。

kumano_pusan
質問者

お礼

ありがとうございます。 習いたての嵯峨で細かなところへの注意が不足していました。 おかげ様で意図する動きとなりました。

その他の回答 (1)

  • TAKA_R
  • ベストアンサー率32% (26/79)
回答No.2

確かに動きますし、やりたいこととも一致していますが。 目指しているところは違うように思えます。 銀行の振込みやナビの画面のようなものを目指しているのではないでしょうか。 今のままではただのリストだし、「ComboBox1.MatchEntry」が生かせないと思います。 提案としては、コンボ1でカナ1文字を確定、コンボ2にそのカナを持つ会社名を送って 選択できるようにする。(会社さえ確定できればコードは自然と決まりますよね) ちなみにインプットボックスとFindを使った似た感じのコードでよければどうぞ http://questionbox.jp.msn.com/qa7387952.html

kumano_pusan
質問者

お礼

ありがとうございました。 ご回答頂いたように、今のままではただのリストですが、同一社名で支社等が異なるものが数多くあり、その中から選択することや、その他金額入力Boxやオプションボタン等も配置しており、少しでもBoxを少なくして同じBoxで処理しようと考えたものです。 またご紹介いただいたFindを使った検索も、知識に加えて勉強させて頂きます。

関連するQ&A

  • ComboBox1_Changeについて

    Private Sub ComboBox1_Change() Dim si As Integer With UserForm1 .ComboBox2.Text = "" si = .ComboBox1.ListIndex ' ComboBox1 の何番目が選択されたかを得る Select Case si Case 0 ' 0番が選択されていたらComboBox2 の内容をC列から作成する .ComboBox2.RowSource = "Sheet1!C1" Case 1 .ComboBox2.RowSource = "Sheet1!C2" End Select End With End Sub コンボボックス1で選択された値に対して『Sheet1!C1』が 表示されるようにするには、『.RowSource』の部分に 適切な言語がありますでしょうか。 また、『.RowSource』は、こういう効果がある等 紹介しているサイトをご存知あれば教えてください。 (探してみたのですが、めぐり合えず)

  • エクセル 複数のComboBoxの連携

    エクセルでフォームを使い、社内各部署での案件の一覧の検索データベースを作成中です。 その際、ComboBoxを3つ使い、1「支店名」2「課名」3「チーム名」を選択するようにしたいのですが、支店により課名やチーム名が異なるため、1で選択した支店名と合致する課やチーム名が選べるようにしたく、以下のようなマクロを組みました。が、実行すると、支店名は表示されるものの、何故か選択できません。また、2つ目(課)の結果から3つ目(チーム名)も得る方法もいまいちよくわかりません。ご教示お願いいたします。 Option Explicit Private Sub ComboBox5_Change() Dim si As Integer With UserForm1 .ComboBox5.Text = "" si = .ComboBox5.ListIndex Select Case si Case 0 .ComboBox6.AddItem "A課" .ComboBox6.AddItem "B課" .ComboBox6.AddItem "C課" 以下必要分続く ’ComboBox6の結果から7を得るには? End Select End With End Sub Private Sub UserForm_Initialize() ' ComboBox がアクティブの時の処理 With UserForm1 .ComboBox5.AddItem "A支店" .ComboBox5.AddItem "B支店" .ComboBox5.AddItem "C支店" .ComboBox6.AddItem "A課" .ComboBox6.AddItem "B課" .ComboBox6.AddItem "C課" .ComboBox7.AddItem "Aチーム" .ComboBox7.AddItem "Bチーム" .ComboBox7.AddItem "Cチーム" End With End Sub

  • 最後の3枚を除くシート名をセルに表示したい。

    Excel2007でマクロ作成の初心者です。 シート名をセルに表示したいのですが、シートの最後の3枚だけは セルに表示したくないです。 以下やってもできませんでした。 Sub シート名をセルに() Dim ws As Worksheet Dim i As Integer Const EXCEPT_NAME = "請求書 経理部 一覧表" i = 0 For Each ws In Worksheets i = i + 1 Cells(i + 3, 4) = ws.Name Next End Sub たとえば、Worksheets.Count -3  の数だけセルに表示するにはどうしたらよいでしょうか。

  • ComboBoxについて

    ComboBoxのアイテムリストからアイテムを選んだら 選んだアイテムに対応した別の文字列 をComboboxに表示したいと思います。 動き的には Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load  ComboBox1.Text = ""  ComboBox1.Items.Add("000")  ComboBox1.Items.Add("001")  ComboBox2.Text = ""  ComboBox2.Items.Add("0個目")  ComboBox2.Items.Add("1個目")  ComboBox2.Visible = False End Sub Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged  Select Case ComboBox1.SelectedIndex   Case 0    ComboBox1.Visible = False    ComboBox2.Visible = True    ComboBox2.SelectedIndex = 0   Case 1    ComboBox1.Visible = False    ComboBox2.Visible = True    ComboBox2.SelectedIndex = 1  End Select End Sub Private Sub ComboBox2_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles ComboBox2.GotFocus  ComboBox1.Visible = True  ComboBox1.DroppedDown = True  ComboBox2.Visible = False End Sub こんな感じで、ComboBoxを二つ使えば実現できるのですが一つだけでも実現できる方法が ありましたら、教えてくださいませ。

  • VBAのComboBoxについて

    UserForm1にComboBoxが8個(ComboBox1~8)あります。 各ComboBoxはSheet1の下記列に入力されているリストを表示します。 ComboBox1 : A列 ComboBox2 : B列 ComboBox3 : C列 ComboBox4 : D列 ComboBox5 : E列 ComboBox6 : F列 ComboBox7 : G列 ComboBox8 : H列 ComboBox9 : I列 ComboBox10 : J列 そこで、UserForm1の各ComboBoxでデータ選択する際に、リストにある場合はそれを選択し、リストにない場合はComboBoxに新しいデータを入力し、UserForm1のCommandButton1を押下時にその新しいデータをSheet1の各列に追加したいのですが、どのようにしたらよいのでしょうか。 Sheet1にあるリストをComboBoxに表示するところまではできています。 ※ComboBoxの番号とリストの列番号を一致させています。 --------------------------------------------------------------- Private Sub UserForm_Initialize() Dim lastrw As Integer, retu As Integer, i As Integer For retu = 1 To 10 lastrw = Sheet1.Cells(1, retu).End(xlDown).Row For i = 1 To lastrw - 1 Controls("ComboBox" & retu).AddItem Sheet1.Cells(i + 1, retu).Value Next i Next retu End Sub ---------------------------------------------------------------

  • エクセル2010 シート上のコンボボックス

    エクセル2010を使用しております。 シート1にコンボボックス1(アクティブXコントロール)を設置しており、 コードは下記です。 Private Sub ComboBox1_DropButtonClick() Dim i As Long With Worksheets("シート操作").OLEObjects("ComboBox1").Object .Clear    For i = 1 To 100 .AddItem i Next i End With End Sub コンボボックス1のドロップボタンで リスト1~100の数字の中から、任意の数字を選び テキスト表示部分に表示させたいだけなのですが、 上記コードではリストから選択しても何も表示されません。 コードの誤りと詳しい説明を希望します。 よろしくお願いいたします。

  • Excel VBA comboboxへの割り当て

    下記コードにてcomboboxを任意の数作成しました。 このComboboxに Sub Sub1を割り当てたいのですが どうすればいいでしょうか、 (OnChange,Chaneはエラーでした) また、その際どのcomboboxからよばれたか引数で渡したいのですが どうすればいいでしょうか。 '---------------結果こうなるようにしたい Private Sub ComboBox1_Change() call sub1("コンボの名前") End Sub '----------combobox作成 With Worksheets("AAA").OLEObjects.Add(ClassType:="Forms.ComboBox.1", Link:=False, DisplayAsIcon:=False) .Left = X .Top = Y .Width = 100 .Height = 18 .ListFillRange = "LIST" .OnChange="sub1" ->エラーでした .Change="sub1" ->エラーでした End With

  • エクセルVBA シート名の部分一致検索について エクセル2007

    VBAでエクセルの全シート名を部分一致で検索したいと考えています。 そこで以下のコードを書いたのですが、 インプットボックスにどんな文字列を入力しても全てのシート名を 取得してしまって途方にくれています。 どなたかお助けください。 Sub test01() Dim name As String Dim ws As Worksheet shn = InputBox("検索文字列を入力") For Each ws In ThisWorkbook.Worksheets If ws.Name Like " * " & name & " * " Then ws.Activate MsgBox ws.Name End If Next ws End Sub

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

    図の左のように、商品リスト欄のセルA3から下方向に大分類(A16まで14種類) セルB3~O3(Bから数えて14個目のO)列から下方向に小分類があります。 P2~P11には1から10までの数字が入っています。 図の右側がユーザフォームで、コンボボックスの番号を入れています。 コンボボックス「1.4.・・・28.」までは大分類を選べるようにして、 コンボボックス「2.5.・・・29.」までは左の大分類に応じた小分類の値を表示させたいと思っています。 大分類「111」→小分類「あ~そ」 大分類「222」→小分類「た~と」といった具合です。 そのコンボボックスの値を指定したセルに入力しようと思っています。 下のように記述した結果、問題が発生しました。 (1)大分類で14個ほどあるリストの3つほどしかでてこない。 (2)Select Caseの構文を使用していて、大分類が14個だから「Case 13」までと しているが、「大分類の数-1」までの変えられる数までにしたい。 アドバイスをいただけると助かります。 ------------------------------------------------------------------ Private Sub UserForm_Initialize() Dim MyVar1 As Variant MyVar1 = Sheets("商品リスト").Range("A3:A" & Range("A3").End(xlDown).Row) Dim MyVar20 As Variant MyVar20 = Sheets("商品リスト").Range("P2:P" & Range("P2").End(xlDown).Row) '種類欄を指定 With ComboBox1 .List() = MyVar1 End With ※・・・(省略)・・・ コンボボックス4から25まで※ With ComboBox28 .List() = MyVar1 End With '数量欄を指定 With ComboBox3 .List() = MyVar20 End With ※・・・(省略)・・・ コンボボックス6から27まで※ With ComboBox30 .List() = MyVar20 End With End Sub '1番目 Private Sub ComboBox1_Change() Dim MyVar1 As Variant ※・・・(省略)・・・ MyVar2~13 As Variant※ Dim MyVar14 As Variant Dim MyVar20 As Variant MyVar1 = Sheets("商品リスト").Range("A3:A" & Range("A3").End(xlDown).Row) ※・・・(省略)・・・ B列からN列まで※ MyVar15 = Sheets("商品リスト").Range("O3:O" & Range("O3").End(xlDown).Row) MyVar20 = Sheets("商品リスト").Range("P2:P11") Select Case ComboBox1.ListIndex Case 0 With ComboBox2 .List() = MyVar2 End With ※・・・(省略)・・・ Case1~ Case12 ※ Case 13 With ComboBox2 .List() = MyVar15 End With End Select End Sub

  • EXCEL VBA 多種のコンボボックス操作

    こんばんは。 現在ユーザーフォーム上に10個のコンボボックスを配置しています。 1-8は共通リストを、9と10は別々のリストを表示させたいのですが・・ Private Sub UserForm_Initialize() Dim X, No, Y As Integer With UserForm2 For No = 1 To 8 For X = 0 To 7 .Controls("ComboBox" & No).AddItem Worksheets("Letter").Cells(X + 1, 10).Value Next Next For Y = 0 To 7 .ComboBox9.AddItem Worksheets("Letter").Cells(Y + 1, 11).Value .ComboBox10.AddItem Worksheets("Letter").Cells(Y + 1,12).Value Next End With End Sub 上記のコードですが、エラーが出てどうにも行き詰っています。 Private Sub UserForm_Initialize() Dim X, No As Integer For No = 1 To 8 For X = 0 To 7 UserForm2.Controls("ComboBox" & No).AddItem Worksheets("Letter").Cells(X + 1, 10).Value Next Next End Sub ↑だと1-8まで問題なく動くのですが・・・ すみませんが、アドバイスお願いいたします。

専門家に質問してみよう