• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:>この様な経験された事ありますか?)

エクセルVBAでのプログラム移植時にListBoxに表示される列を変更する方法

Wendy02の回答

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.1

こんばんは。 Wendy02です。 前回、不安を残したままでしたので、気にはしていました。 >1列目、販売店名 2列目、販売店よみ(前回エンドユーザとしていた所です) 「よみ」を入れることにしたのですね。そうすると、もう少し、手直しが必要かしら? もし、「販売店よみ」で検索するなら、 myCrRange.Value = WorksheetFunction.Transpose(Array("販売店よみ", "アジア")) (本来は、「アジア」に当たる部分は、テキストボックスを一つ設けて、そこを入力場所に使います。 販売店名"をListBox1 に表示させるためには、 以下、読み込ませているわけですね。 # ListBox1.List = mySh.Range(mySh.Range("E1"), mySh.Range("E1").End(xlDown).Offset(, 2)).Value だから、出力された1列目ですから、E列でしたら、このようにします。(配列にするのは、私の好みですが)    ↓ ListBox1.List = mySh.Range(mySh.Range("E1"), mySh.Range("E1").End(xlDown).Value それと、1列でしたら、 ListBox1.ColumnCount = 3 '3列表示 ここは、コメントアウトですね。 'ListBox1.ColumnCount = 3 '3列表示 (ただし、左側に出てくる、ListBox1のプロパティのColumnCountが1であるという条件です。) ただ、前回のご質問に戻ることですが、そうすると、ダブりが出てこないかしらね。 ダブりを排除し、ユニーク・データにする場合は、以下のように、コメントアウトを戻すのですが、 CopyToRange:=mySh.Range("F1"), _ Unique:=True ご自身で、相当お分りになるようですが、話がややこしくて、分りにくいようでしたら、もう少し話を聞きご要望をまとめなおしたら、修正したものをアップロードします。 よみの検索を作らなくてはならないような気がしますからね。 私の個人的なイメージからすると、ユーザーフォームだけで、すべてをコントロールできれば、なかなか便利なデータベースが出来上がるかと思います。今のやり方は、私の使う方法と似ていて、とても良いと思います。 ただ、私の感覚からすると、今の段階は、やっと第一段階終了という感じがします。(^^; まだ、もう少し掛かりますね。

acenoh
質問者

補足

早速のご回答ありがとうございます。 私のやりたい事をお話せずに最小のマクロで表示しましたが 目的は販売店の数が50位あり、それぞれに10数件の 客先(エンドユーザ)があるのです。 その為500件程度の行数(データベース)になります まず、"よみ"で販売店をListBox1に限定表示(重複なしで)させたいのです DBなのでNOリングしていますがA1列のNoは必要ないのです。 フィルタオプションをマクロの自動作成で作る時の条件は以下です リスト範囲はb1:c501 検索条件範囲にd1:d2を 抽出範囲にf1:g1を指定し重複しないにチェックを 入れた時f1列(販売店)をListBox1に表示させています、 次に、ListBox1に表示された販売店をクリックすると その販売店のエンドユーザーがListBox2に表示される ように組んでいます。 ところで myCrRange.Value = WorksheetFunction.Transpose(Array("販売店よみ", "アジア"))のところですが"*"ですと全行表示されるのですが"アジア"にしても アジアが表示されませんが(勿論、販売店列にアジアは入っていますが)どうしてでしょうか? それとUserForm2でTextBox1アジアを入力したい時 どのようにすればよいのでしょうか?

関連するQ&A

  • この様な経験された事ありますか?

    お尋ねします ユーザーフォームを使い客先データリスト(データ数:500件)から 目的の客先を抽出するのですが200件までしか抽出してくれません 抽出件数に制限があるのでしょうか? セルa1:No、b1:販売店名、c1:エンドユーザ、d1:販売店名、e1、販売店名 VBコードは以下です UserForm1にListBox1があり UserForm1をUserForm1.Showで表示させるとき Private Sub UserForm_Activate() Range("a1:c501").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:= _ Range("d1:d2"), CopyToRange:=Range("e1:e1"), Unique:=True End Sub としているのですが ListBox1には200件までしか表示されません ListBox1のプロパティの範囲RowSourceにe2:e501としていますのに セルd2には全て表示させるよう*を入力しています 上記だけを試してみると、ちゃんと500件、抽出するのですが実は 一寸大きなアプリケーションソフトの一部で動作させています メニュープログラム:880Kb、サブメニュープログラム:320Kb 本プログラム:1,200Kbが同時に開いています PCはデルでCPU:ペンティアム4、240GHz、メモリー512MB RAMです OS:XP(Pro)office2000(Pro)のエクセルを使用 素人考えでメモリを消費しすぎていて表示されないのかなと思っているのですが この様な経験をされた方、良い方法がありましたら、アドバイスお願いします。

  • ExcelVBAのユーザーフォームについて

    ExcelVBAのユーザーフォームについて ExcelVBAをゼロから独学で学んでる超初心者です。 ExcelVBAでデータベースを作っています。sheet1に配置してあるコマンドボタンでuserform1を開きそこに配置してあるlistbox1を選択するとuserform2~Xが開く設定にしています。 listbox1の内容はsheet2のデータのタイトルA~X(2列目~X列目)を読みに行っています。 userform2~Xの内容はsheet2のデータのタイトルA~Xのの内容を個別に作成しています。 流れはタイトルA(userform1-listbox1(1列目))を選択するとタイトルAの内容を表示(userform2)するというものです。userform2~Xはsheet2の上から順番に作っています。 sheet2の2列目の内容(タイトルA)→userform2 sheet2の3列目の内容(タイトルB)→userform3 という感じです。この状態だと問題なく開いていくのですが。このデータベースは後からタイトルをどんどん増やしていきます。そして、増やすたびにあいうえお順に並び替えをします。 そうすることによってタイトルと内容が合わなくなっていきます。例えば、 sheet2の2列目の内容が5列目(タイトルD)の内容に変更 sheet2の3列目の内容が2列目(タイトルA)の内容に変更 みたいな感じでバラバラになってしまいます。 流れがタイトルD(userform1-listbox1(1列目))を選択→タイトルA(userform2)を表示となってしまいます。 並び替えを行ってもタイトルとuserformがセットになる タイトルD(userform1-listbox1(1列目))を選択→タイトルD(userform4)を表示 となる様にするにはどうしたらよいのでしょうか? へたくそな説明でわかりにくかもしれないですが一生懸命書き込みました。 宜しくお願い致します。

  • リストボックスから項目を選択してセルに入力したいのです

    EXcel2003でマクロ作成中です。エクセルシートのN列を右クリックすると、ユーザーォームが現れ、その中のリストボックスから項目を選択すると選択文字が白色に反転します。 ユーザーホームの下方に設置した「入力する」ボタンをクリックする、アクティブセルにテキスト文字列が挿入されます。 Option Explicit Private Sub CommandButton1_Click() With ListBox1 If .ListIndex = -1 Then MsgBox "項目を選択してくだい" Else ActiveCell.Value = ListBox1.list(ListBox1.ListIndex) End If End With Unload UserForm1 End Sub --------------------------- Private Sub CommandButton2_Click() Unload UserForm1 End Sub ------------------------------ これと同じものをB列につくりました。エクセルシートのB列を右クリックすると、リストボックスが表示されますが、その中の項目を選択しようとすると、一瞬にしてユーザーフォーム自体が消えてしまい項目を 選択できません。 Private Sub CommandButton1_Click() With ListBox2 If .ListIndex = -1 Then MsgBox "項目を選択してくだい" Else ActiveCell.Value = ListBox2.list(ListBox2.ListIndex) End If End With Unload UserForm2 End Sub ----------------------------- Private Sub CommandButton2_Click() Unload UserForm2 End Sub ------------------------------------------ まったく同じものを作って内容だけかえたのですが、できません。 どうしてでしょうか?ご教授おねがいします。

  • リストボックスについてです。

    リストボックスについてです。 B列をダブルクリックするとリストボックスが立ち上がり、データを選択してB列に表示できるように設定されていますが、困った現象が起こっています。 例えば、sheet1のB10にダブルクリックでリストボックスを表示し、そこから「あいうえお」という名前を表示させて、sheer1編集が終わったとします。 次のsheet2でB1をダブルクリックしているのに、sheet2のB10に勝手に「あいうえお」と表示されてしまいます。 コードは以下になってます。 VBA初心者なのでエクセルのサイト等からコピペ等して作ったコードです。 どこかおかしな箇所があると思うのですが、何処がおかしいのかがわかりません。 お分かりになる方、教えていただければ助かります。 ' ◆Worksheetのコード◆ '---------------------------------------------------- '選択範囲を変更したときに実行される Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) UserForm1.ListBox1.RowSource = "データ!A1:A100"  '表示するデータ範囲 UserForm1.ListBox1.Font.Size = 12    'フォントサイズ If Target.Column = 2 Then 'B列なら 行 = Target.Row '行番号を取得する UserForm1.Show 'ユーザーフォームを表示する End If End Sub '=================================================================================== ' ◆UserForm1のコード◆ '-------------------------------------------------------------------------- Private Sub ListBox1_Click() 'クリックされたときに実行される If 行 <> 1 Then '1行目でなければ Cells(行, 2) = ListBox1.Value 'リストボックスの値をセルにセットする End If UserForm1.Hide 'ユーザーフォームを非表示にする End Sub Private Sub UserForm_Deactivate() '非アクティブになったときに実行される Unload Me 'ユーザーフォームをメモリから削除する End Sub '========================================================================================= '============================== ' ◆標準モジュールのコード◆ Option Explicit Public 行 As Variant '行番号 Sub auto_open() Load UserForm1 'ユーザーフォームをメモリに読み込む End Sub '==============================

  • ListBoxのBackColor変更

    EXCEL2007のVBAにて質問です。 ユーザーフォームにリストボックスを配置して、選んだ物によって リストボックスの背景色を変更しようとしているのですが、うまくいきません。 例えばlistbox1を以下の様にセットし、 Private Sub UserForm_Initialize() UserForm1.ListBox1.AddItem ("ピンク") UserForm1.ListBox1.AddItem ("白") End Sub 下記の通り選んだ項目で背景色を変えたいのですが、 Private Sub ListBox1_Click() '選んだ項目で色変え If UserForm1.ListBox1.ListIndex = 0 Then UserForm1.ListBox1.BackColor = RGB(255, 128, 128) 'ピンクなら背景をピンクに Else UserForm1.ListBox1.BackColor = RGB(255, 255, 255) '白なら背景を白に End If End Sub クリックして項目を選択しても背景の色が変わりません。 何か見落としている事があるでしょうか? 又はやり方が悪いのでしょうか? お教え頂けると助かります。 以上、宜しくお願い申し上げます。

  • エクセルVBA ユーザーフォームのリストボックス

    エクセルVBAのユーザーフォームのリストボックスについて教えてください。 現在、以下のようにコードがされています。 Private Sub UserForm_Initialize() With UserForm.ListBox1 .AddItem "ABC" .AddItem "DEF" .AddItem "GHI" .ListIndex = 0 End With End Sub Private Sub ListBox1_Click() With ListBox2 .Clear Select Case UserForm.ListBox1.List(ListBox1.ListIndex) Case "ABC" .AddItem "123" .AddItem "456" .AddItem "789" Case "DEF" .AddItem "456" .AddItem "789" Case "GHI" .AddItem "789" End Select .ListIndex = 0 End With End Sub それで、ユーザーフォームを起動した時点で、ListBox1には"ABC"、ListBox2には"789"を選択し、青く色がついている状態にすることは可能でしょうか。 よろしくお願いします。

  • 【ExcelVBA】ユーザフォーム初期化時にリストボックスのサイズを変更したい

    お世話になります。 ExcelのVBAを利用してマクロを作成しているのですが、ユーザフォームにリストボックスを設定し、任意の高さを調節したいと思っております。 ユーザフォームツールで、ユーザフォーム(UserForm1)を作成し、その中にリストボックス(ListBox1)を設定しました。 下記のコードはサンプルですが、なぜかリストボックスの高さが調整されないのです。。 コードが間違っているのでしょうか? 詳しい方、ご指導お願いします。。。 Private Sub UserForm_Initialize()  With UserForm1.ListBox1   .AddItem "テスト1"   .AddItem "テスト2"   .Height = 50  End With  'リストボックスの高さを表示する  Msgbox UserFrom1.ListBox1.Height End Sub ※Msgboxでは"50"と表示されず、ユーザフォームツールで設定した高さが表示されてしまいます。。

  • VBA ユーザーフォーム

    こんばんわ。 VBA、ユーザーフォームで、ListBoxか、Comboboxで、セルの値を参照し、そこから1つ選択するようにするにはどういうコードがりますか? Private Sub Userform_Initialize   Listbox1.AddItem "700" Listbox1.AddItem "701"   ・・・・・   ・・・・・   ・・・・・ End Sub と、やると、ListBoxには反映しますが、列が多すぎて、作成するのに手間が掛かる為、例えば、"700" の値に、Sheets(1)のC2から、C500の値を入れるようなコードはありますか? 宜しくお願いします。

  • リストボックスから複数行を選択し、その複数のデータをセルに入力したい

    Excel2003でマクロをつくっています。シートのB列を右クリックすると、リストボックスが表示され 任意1行を選択するとシートのB列、C列、D列のセルにデーターが入力されます。 Private Sub ListBox2_Click() With ListBox2 If .ListIndex = -1 Then MsgBox "項目を選択してくだい" Else ’シートが保護されていたら保護を解除 If ActiveSheet.ProtectContents = True Then ActiveSheet.Unprotect End If ActiveCell.Value = ListBox2.List(ListBox2.ListIndex, 0) ActiveCell.Offset(0, 1).Value = ListBox2.List(ListBox2.ListIndex, 1) ActiveCell.Offset(0, 2).Value = ListBox2.List(ListBox2.ListIndex, 2) ActiveSheet.Protect End If End With Unload UserForm3 End Sub このリストボックスから複数の行を選択し、シートのB列、C列、D列のセルにデーターを入力したいのですが、Multiselectプロパティを変更しても、一行のみしか入力できません。 上のコードをどうかえたらよろしいでしょうか。

  • シート名を変更すると、そのシートのデータがリストボックスに表示されない

    Vista SP1 ExcelXPでマクロ作成中の超初心者です。 シートA会社のセルを、右クリックすると、ユーザーフォームが現れ、その中のリストボックスにsheet1の データが表示されます。sheet2 sheet3 も同様に、正常にリストボックスが表示できています。 ところが、シートの名前 「sheet1」を、「関係データ1」に変更すると フォームにリストボックスが表示されますが、中身は表示されません。 シート名を変更しても、右クリックでリストが正常に表示できるようにするにはどうすればよろしいでしょうか。             1)ブックには,13枚のシートがあります。  1)シート名が  A会社からJ会社           sheet1 sheet2 sheet3 2)会社シートにはそれぞれ以下のコードを記入してあります。  Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean) Cancel = True 'プロシージャ終了後に表示されるショートカットメニューの非表示 If Target.Row > 14 And Target.Row < 45 And Target.Column > 13 And Target.Column < 15 Then UserForm1.Show End If If Target.Row > 14 And Target.Row < 45 And Target.Column > 19 And Target.Column < 21 Then UserForm2.Show End If ユーザーフォームには、次のコードがあります。 Option Explicit Private Sub CommandButton1_Click() 'With ListBox1 'If .ListIndex = -1 Then 'MsgBox "項目を選択してくだい" 'Else ActiveCell.Value = ListBox1.list(ListBox1.ListIndex) End If End With Unload UserForm1 End Sub ------------------------------------------ Private Sub CommandButton2_Click() Unload UserForm1 End Sub 'Private Sub UserForm_Initialize() 'Me.StartUpPosition = 0 ' Me.Left = 200 ' Me.Top = 100 ' Me.Height = 400 ' Me.Width = 230 'End Sub Private Sub 閉じる_Click() Unload UserForm1 End Sub Private Sub ListBox1_Click() With ListBox1 If .ListIndex = -1 Then MsgBox "項目を選択してくだい" Else ActiveCell.Value = ListBox1.list(ListBox1.ListIndex) ActiveCell.Offset(0, 7).Value = ListBox1.list(ListBox1.ListIndex, 1) Selection.Offset(0, 7).Select End If End With Unload UserForm1 End Sub -------------------------------------------