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

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

このQ&Aのポイント
  • エクセルVBAのプログラムを移植する際に、ListBox1に表示される列を変更する方法について教えてください。
  • 移植したプログラムにおいて、ListBox1には2列目のデータが表示されてしまいますが、1列目のデータを表示させたいです。
  • myCrRange.Value = WorksheetFunction.Transpose(Array("エンドユーザー", "*"))の部分を変更することで、ListBox1に1列目のデータを表示させることができるのでしょうか?

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

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

acenoh 様、こんにちは。 何度も、検討してみました。 全体の概要が分りました。UserForm1 と UserForm2 は、両方立ち上げているのですね。 本当は、UserForm1 の中で、テキストボックスとリストボックスを両方を備えていたほうが、Excel本体を意識することなく使えるかと思いますが。 最初に、UserForm2 のTextBox1 のプロパティの IMEMode は、6-fmIMEModeKakanaHalf にしてください。 それから、以下のHPの内容は、今回の仕様に直接ではありませんが、Activate を使っていますので、多少疑問はもちながらも、一応、考慮して変更しました。 http://www.h3.dion.ne.jp/~sakatsu/Excel_Tips07.htm >ユーザーフォームで入力させると"よみ"をうまく読み取ってもらえず、 理由はわかりませんが、こちらでも、現象を確認しました。マクロで文字列を入力すると、何かがジャマしているようです。 ●ところで気になるのは、「エンド・ユーザ」名は出さなくてよいのでしょうか? ListBox1.List = mySh.Range(mySh.Range("h1"), mySh.Range("h1").End(xlDown)).Value ''"h1"はListBox1に表示したい列 もしかして、ListBox が、三つあるわけではありませんよね。 販売店名とエンドユーザ名の2列表示にすればよいと思いますが・・・。 ・ユーザーフォームの起動は、以下のように、DoEvents か、起動に多少の時間差をWaitで明示的に入れてあげるか、下位のPCや下位のVersionを考慮した場合、このほうが確実かもしれません。そのまま、UserFomr2に入ってしまうと、オブジェクトの取りこぼしがあるかもしれません。 '<シートモジュール> '--------------------------------------------- Private Sub CommandButton1_Click()  UserForm1.Show 0   DoEvents  UserForm2.Show 0 End Sub '--------------------------------------------- '<Userform1 モジュール> Dim myCrRange As Range Dim mySh As Worksheet Private Sub UserForm_Activate() 'Criteriaへの書き込み If UserForm2.TextBox1.Value = "" Then  myCrRange.Value = WorksheetFunction.Transpose(Array("=C1", "")) Else  myCrRange.Value = WorksheetFunction.Transpose(Array("=C1", UserForm2.TextBox1.Value)) End If myFilterExecute myCrRange 'サブルーチンへ ListBox1.List = mySh.Range(mySh.Range("H1"), mySh.Range("H1").End(xlDown)).Value ''"h1"はListBox1に表示したい列 End Sub Private Sub myFilterExecute(myCrRange As Range, Optional UniqFlg As Boolean = False) mySh.Range("H1", mySh.Range("H65536").End(xlUp).Offset(, 2)).ClearContents mySh.Range("B1", mySh.Range("B65536").End(xlUp).Offset(, 2)).AdvancedFilter _ Action:=xlFilterCopy, _   CriteriaRange:=myCrRange, _   CopyToRange:=mySh.Range("H1"), Unique:=UniqFlg ''B1からOffset(, 2)で選択範囲’H1から3列表示が抽出範囲 End Sub Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer) 'ここで終了させる Unload UserForm2 Set mySh = Nothing Set myCrRange = Nothing End Sub Private Sub UserForm_Initialize() Me.StartUpPosition = 1 'ここで設定 Set mySh = Worksheets("Sheet2") Set myCrRange = mySh.Range("F1:F2") '’検索条件範囲 End Sub '--------------------------------------------- '<Userform2 モジュール> Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) If KeyCode <> 13 Then Exit Sub  AppActivate "Userform1" End Sub Private Sub UserForm_Initialize()  Me.StartUpPosition = 0 End Sub Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer) 'Userform2 単独では終わらせないようにする  If CloseMode = 0 Then   Cancel = True  End If End Sub '========================================= 変更点 <Userform1 モジュール> ・Private Sub UserForm_Activate() 初期に立ち上げたときに分岐をさせた。 If UserForm2.TextBox1.Value = "" クライテリア部分を、数式にした。  Array("=C1", "") ・Private Sub myFilterExecute サブルーチン側に移し、出力値を消去するようにした。 mySh.Range("H1", mySh.Range("H65536").End(xlUp).Offset(, 2)).ClearContents Uniqueフラグを設けて、オプションで、変更できるようにした。 Unique:=UniqFlg  ・UserForm_QueryClose の中で、UserForm2 を終了させた。 ・UserForm_Initialize で、StartUpPosition  の Userform2 の立ち上げと重ならないようにした。 <Userform2 モジュール> TextBox1_KeyDown で、"ENTER" コードで、UserForm1 に戻るようにした。 AppActivate "Userform1" UserForm1 のActivate イベントが作動しないことを考慮し、Userform1 自体を、Activate させた。 ・UserForm_QueryClose Userform2 側からは、終了できないようにした。 以上が変更、改良点です。

acenoh
質問者

お礼

ご紹介いただいたHP大変参考になりました。 どうしてそうなるのか、わからず使っていました。 仕方なくUserForm1からUserForm2を呼ぶ時は同じ大きさで 同じ場所に表示させていました。(下に隠れていて見えないから) >●ところで気になるのは、「エンド・ユーザ」名は出さなくてよいのでしょうか?  お話していませんでしたが、 UserForm2で、50音のコマンドボタンを配置し1文字を選択すると 選択した文字で(例”ア*”とシートのセルc2に書込みます) UserForm2をUnloadさせUserForm1をShowさせActivateした時に ListBox1で販売店名を表示(この時まだ、ListBox2は空欄) 中の1件をクリックするとその販売店の扱い店(エンドユーザ)を 表示するListBox2があるのです。 (クリックした時に別の場所で抽出するマクロを作成) ListBox2にあるエンドユーザをクリックするとUserForm1を閉じて 納品書(シート)に販売店名とエンドユーザ名を表示させています。  UserForm2からUserForm1を表示させた時、もし選択ミスをした時には キャンセルボタンでUserForm2に戻り1文字選択し直すようにしていますが 問題なく使用できています。(会社のpc(Office2000)で修正したからですかね?) アドバイスいただいた、DoEventsを使用したモジュールに 書き換えてみます。 大変参考になりました。一旦このスレッド閉じさせていただきますが Wendy02さんには又わからないことをお尋ねする事があるやも知りません その時はよろしくお願いいたします。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

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

こんばんは。Wendy02です。 >リスト範囲はb1:c501 ということですが、「販売店よみ」は、どこにあるのですか? AdvancedFilter の範囲に、「販売店よみ」を含めなければ、検索できません。 B列が販売店名, C列がエンドユーザー, D列がよみ? 全体の位置情報が分らなくなりました。 また、クライテリア部分(検索条件範囲)は、1列しか使わなくても、2列の余裕を持ったほうがよいです。論理和検索だけでなく、論理積検索のことも考えなくてはなりません。今の話の流れからすると、E-F列をクライテリア部分にし、G列からということになってしまいます。 それから、 「読み」は、Phonetic 関数をお使いなのですか?半角全角の区別があります。メニューの書式-ふりがな-編集 で、全角か半角か、カタカナかを設定をみて、クリアテリア部分の入力を決定します。 もう1つは、Version(Excel 2002 のみ、ワイルドカード・オプションの違いがあります)によって、「アジア○○○」の時もあるので、「アジア*」というようにしてあげなくてはならない、ということがあります。 また、Excel 2002 以外(つまり Excel 2003 /Excel 2000 などということ)ですと、デフォルトが、ワイルドカード(文字に「*」をつけた状態)付きになっていますので、逆に、ワイルドカードなし状態にするには、このクライテリア部分を、2列にしないと、フィルタオプションを使いこなすのは難しいはずです。 >UserForm2でTextBox1アジアを入力したい時 正直なところ、UserFormをふたつにすることで、前回よりも、難しくなっています。手直ししてみましたが、たぶん、全部作り直しのほうが早いような気がします。任意の部分なので、タイミング(イベント)は、こちらでは決めかねますが、ボタンなどでUserForm2 を起動するなど考えなくてはなりません。いままでの、変数も、グローバルレベルに変更したほうが良いかもしれません。

acenoh
質問者

補足

再度のご返答ありがとうございます。惑わしてしまい申し訳ありません 実はWorksheet3は A1:No、B1:販売店、C1:販売店よみ、D1:エンドユーザ 又、抽出条件としてF1:(販売店よみ)抽出範囲にH1としています。 自分なりに教えていただいたマクロのセル位置を作り変えてみました。 Dim myCrRange As Range Dim myCrRange2 As Range Dim mySh As Worksheet Private Sub UserForm_Activate() Set mySh = Worksheets("Sheet2") Set myCrRange = mySh.Range("f1:f2") '’検索条件範囲 Set myCrRange2 = mySh.Range("l1:l1")'’UserForm2で一時書き込む所 '出力データは、ちゃんと消さないと次の検索に出てきません。 mySh.Range("F1", mySh.Range("F65536").End(xlUp).Offset(, 2)).ClearContents 'Criteriaへの書き込み myCrRange.Value = WorksheetFunction.Transpose(Array("販売店よみ", myCrRange2)) myFilterExecute myCrRange 'サブルーチンへ ListBox1.ColumnCount = 3 '3列表示 '列が離れすぎていたら、 'ColumnWidths | 30 ; 30 ;30  'などと入れます。 'RowSource よりもListのほうが動きが速い ListBox1.List = mySh.Range(mySh.Range("h1"), mySh.Range("h1").End(xlDown)).Value ''"h1"はListBox1に表示したい列 End Sub Private Sub myFilterExecute(myCrRange As Range) mySh.Range("b1", mySh.Range("b65536").End(xlUp).Offset(, 2)).AdvancedFilter _ Action:=xlFilterCopy, _ CriteriaRange:=myCrRange, _ CopyToRange:=mySh.Range("h1"), Unique:=True ''b1からOffset(, 2)で選択範囲’h1から3列表示が抽出範囲 End Sub Private Sub UserForm_Terminate() Set mySh = Nothing Set myCrRange = Nothing End Sub UserForm2でセルl1に一時書き込み抽出条件としました。 なんとか目的を達することが出来ました。 ''のコメント部分がいろいろ数値を入れ替えて試した結果です まだエクセルVBの初心者の私には中身は理解出来ていないのですが! これは初心者なりに納品書入力プログラムの一部でしてUserForm1には他に品名入力など有りまして 抽出を多用しますとListBoxのRowSourceプロパティが原因でエラーになる事があり困っていました。 「読み」は、Phonetic 関数を使わず強引によみを単体で半角カタカナで入力しています。 (ユーザーフォームで入力させると"よみ"をうまく読み取ってもらえず、 販売店名とよみのテキストボックスを使っていますが良い方法があるのでしょうか?) Excel 2002 とExcel 2000でそのような事があったのですか、Excel 2003は所持していないのですが Excel 2002 で作成し(自宅pc)Excel 2000(事務所pc)で使用していますので気をつけます エクセルVBは変数を余り意識せず出来るので初心者の私はOption Explicitを表示させないで 使ってきましたが、今後、Dim宣言して使うようにいたします。

全文を見る
すると、全ての回答が全文表示されます。
  • 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 -------------------------------------------

専門家に質問してみよう