VBA初心者によるコンボボックス表示エラーの解決方法
- VBA初心者が作成中のマクロでコンボボックスの表示エラーが発生しています。
- 元データtxtファイルのC列をコンボボックスで表示する際にエラーが出ており、解決方法を教えて頂きたいです。
- マクロのソースコードに問題があるか、コンボボックスの設定方法に誤りがある可能性が考えられます。
- ベストアンサー
VBA コンボボックス表示について
VBA初心者です。 途中まで作ってみたのですが、コンボボックスを表示するところで エラーが出てどうしても先に進むことができません。 ご指導お願い出来ますでしょうか。 ■元データtxtファイル A列 B列 C列 D列 E列 F列 G列 氏名 性別 評価1 評価2 評価3 評価4 評価5 ---------------------------------------------------- 山田太郎 男 A AB 木下花子 女 B BA 水野四郎 男 B BB 山瀬次郎 男 C CA 野山達子 女 A AA 出側三郎 男 D DB ・ ・ ■EXCELファイル(txtファイルのデータを反映させるEXCEL) シートは以下2つあります。 (1)「全体(sheet1)」:txtファイルのデータを反映させるシート ※例えば、B2には評価1がAの数の合計。 (2)「評価ごとの雛型(sheet2)」:評価1の評価(A、B、C・・)ごとにデータを反映させるシート ※例えば、評価1が「A」のデータを抽出し、雛型用のシートをコピーし、 シートの末尾に挿入、シート名を「A」に変更し、 B3には評価1がAの男の数の合計を入れる。 マクロの流れは、、 1.マクロが埋め込まれているEXCELを開き「ボタン」をクリック 2.テキストファイル(A)を「参照」で読込み、 3.続いてデータを反映させるEXCEL(B)を「参照」で読込み、 4."データを反映させますか?⇒はい"で「全体(sheet1)」に反映させ、 5.続いてコンボボックス(プルダウン)を表示し選択する。←★ココでエラーとなり先に進みません。 6.EXCEL(B)の「雛型」シートを末尾にコピーしデータを反映 ←ここからは自力で頑張ります。 ★教えて頂きたい内容 作りかけのマクロです。http://cocolodiary.com/sample.zip Call eSelect で呼び出したときに、 元データtxtファイルのC列をコンボボックス(プルダウン)で表示するところで エラーになってしまいます。 ソースの★印の箇所についてご指導頂けますでしょうか。 どうぞよろしくお願い致します。
- nanacolobiyaoki
- お礼率93% (74/79)
- Visual Basic
- 回答数3
- ありがとう数4
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
ブックはブックですから、ブックで読めたものは、テキストファイルだからファイル名が読めないなんてことはありませんが、もっと初歩的な部分です。ローカル変数を置いているのだから、Public 変数が飛んでしまいます。全体的には、もう少し方法がある気がしますが、それはいいとします。UserForm の内容は初歩的なところでミスが目立ちます。 === 'Dim oldFile As String 'Dim newFile As String ' 'Dim newSheetName As String '集計サンプルxls 'Dim oldSheetName As String 'サンプルデータtxt '●長いルーチンですから、途中からでも可能なようにしておきます。 Dim w As Object If oldFile = "" Then For Each w In Workbooks If w.Name Like "*.txt" Then oldFile = w.Name oldSheetName = w.Sheets(1).Name Exit For End If Next w End If '★ここから-------------------start 'Dim lRow As Long Dim mData As Variant With Workbooks(oldFile).Sheets(oldSheetName) ' lRow = .Range("C" & Rows.Count).End(xlUp).Row mData = Application.Transpose(.Range("C2", .Cells(Rows.Count, 3).End(xlUp)).Value) '●私の記憶では、他のブックに対して、RowSource は取れなかったはずですが…… '● .RowSource = oldSheetName & "!C2" & lRow これでは、取れるは思えません。 End With With Me.cmbSelect '●ワークブックはUserFormの親オブジェクトではありません。 .ColumnCount = 1 .ColumnWidths = "50" .List = mData End With ===
その他の回答 (2)
- layy
- ベストアンサー率23% (292/1222)
参考で。 『オブジェクト変数または withブロック変数が設定されていません』 が表示されたときの観点はどこか?。 この視点も必要です。 今回は対処できたけど、次に同じエラーが出たときは対処できるか。 掲示板頼りだとこれが身につきにくい。 掲示板は正しく稼働するものの回答がほとんどなので エラーのときは、この対処がわからずパニックになるのです。 こっちを知っておく方が実際は心強い。 ありがたいことにこういうサイトもあります。 http://www.kitagawa-hanga.com/se/s_vberr.html わざとエラーを起こしてみるのも良い。 原因については エラーの行を特定しつつ、 「設定されていない」ということだから 認識できていない変数が使われている、とかいう 見方ができれば自己解決により近づく。 エラーが起きたけどどこがおかしいですか? (だとこのシステムだけの話なので、)よりも 『オブジェクト変数または withブロック変数が設定されていません』 のエラーが起きるときはどういうときですか? のが今後の活用に役立つのでは?と思いますね。
お礼
http://www.kitagawa-hanga.com/se/s_vberr.html 拝見させて頂きました。 すごくありがたいサイトで、さっそくお気に入りに登録しました。 エラーをわざと起こして原因を特定してみるのは近道ですね。 ありがとうございました。
- imo8001
- ベストアンサー率14% (26/179)
ナニをしたいのかイマイチよくわかりませんが UserFormの出現イベントで With Workbooks(oldFile).Sheets(oldSheetName) のoilFileに格納されている値は 元データ.txtになっていますが .Txtファイルはブックではありませんのでこれでは参照することはできません
お礼
早速のご返答ありがとうございます。 txtファイルをEXCELで読み込んでいるので大丈夫だと 思ったのですが。。。 もう一度やってみます。 ありがとうございました。
関連するQ&A
- VBA コンボボックス リスト表示について
初心者ですいません エクセル VBAのフォームでコンボボックス3つと、テキストボックス3つがあります シートのListにA~F列までのデータがあり、コンボボックス1にA列のリストを表示し コンボボックス2にA列で選んだリストを参照したB列のリストを表示し、コンボボックス3 にコンボボックス1,2で選んだリストを参照し、C列のリストを表示した後、 コンボボックス1,2,3で選ばれたもののD列、E列分をテキストボックス1,2に 反映しようと思っておりますがうまくいきません どのようにしたらよいか、おしえてください 宜しくお願いします ちなみに、リストの内容は A列 B列 C列 D列 E列 テレビ 42インチ HDD内蔵 台 100,000 テレビ 32インチ BD内蔵 台 80,000 テレビ 19インチ 台 50,000 ビデオ HDD 1TB 台 100,000 ビデオ HDD 500GB 台 80,000 ビデオ BD 台 70,000 が、入ってます 希望は、質問の際のカテゴリ選択のようになればよいのですが... さらに、希望を言えば、自動で、行ごとに1,2,3...と番号を振るようにしており スピンボタンで番号を選べば、登録された上記のデータをフォームに反映させるようにしております これもうまくいきません お願いばかりで申し訳ありませんが 宜しくお願いします
- ベストアンサー
- Visual Basic
- VBAで検索した結果をコンボボックスに表示する
EXCELデータからある条件で検索した結果をコンボボックスに表示したいのですがやり方が分かりません。どなたか教えていただけますでしょうか? 例) 検索条件 A列「2」 B列「low」 表示項目C列 A列 B列 C列 ---- ----- ------- 1 high コンボ1 1 high コンボ2 2 high コンボ1 2 high コンボ1 2 low コンボ1 2 low コンボ2 2 low コンボ2 3 high コンボ1 3 high コンボ1 ☆コンボボックス表示結果☆ コンボ1 コンボ2 よろしくお願い致します。
- 締切済み
- オフィス系ソフト
- Excel VBA コンボボックスについて
はじめまして、エクセルVBAの超初心者です。 コンボボックスを使ってマクロを組みたいのですが、どうしてで良いか分からず教えていただければと思います。 エクセルのシートに下のようなデータがあるとします A B りんご あおもり りんご ながの みかん わかやま バナナ フィリピン コンボボックス1にAセルを重複しないようにセットして コンボボックス2に1で選択されたものをセットしたいのですが。 プロパティのListFillRangeでAの範囲を選択しても、重複してしまい、それからどうして良いのかわかりません。 どなたか教えて頂けませんか?
- ベストアンサー
- その他(ソフトウェア)
- VBA コンボボックスの重複削除
こんばんわ。 VBAをはじめたばかりで、コンボボックスで困っています。 sheet1にコンボボックスを配置して、sheet2のA列にあるデータ (例) A列 1 1 2 を コンボボックスに 1 2 というようにデータを入れたいのですが、どの様にしたらよいのでしょうか? sheet1.コンボボックス.value=workSheet("sheet2).Range(A1:A3).value とすると1・1・2というようにA列の値がすべて入ってしまいました。 これを1・2というようにコンボボックスに入れたいです。 よろしくお願いいたします。
- ベストアンサー
- オフィス系ソフト
- エクセルVBA 別シートからのコンボボックス連動
エクセルVBA 別シートからのコンボボックス連動について Book1(多人数入力用ブック) ・入力シート ・データ用シート Book2(反映用ブック) ・シート1 Book1にコンボボックスが2列 テキストボックスが2列 * 6行のユーザーフォームを作成しました。 コンボボックス1 コンボボックス2 テキストボックス1 テキストボックス2 コンボボックス3 コンボボックス4 テキストボックス3 テキストボックス4 ・ ・ ・ 左のコンボボックスで「あ」が選ばれたときには、右のコンボボックスで「あ行の顧客」・・・というように連動させたいと考えております。 データ用シートのデータは、 A B C 1 あ あ行で始まる顧客 か行で始まる顧客 2 か 3 さ 4 た 5 な 6 Private Sub UserForm_Initialize() Dim c As Range ComboBox1.RowSource = "データ用シート!A1:A9" End Sub Private Sub ComboBox1_Change() 'Dim Rng As Range 'Dim i As Long i = ComboBox1.ListIndex If i > -1 Then Dim c As Range Set Sh = Worksheets("データ用シート") Set Rng = Worksheets("データ用シート").Range("B2:I30") ComboBox2.Value = "" ComboBox2.RowSource = Rng.Columns(i + 1).Address End If End Sub 上記コードですと、コンボボックス2が入力シートのデータを表示してしまいうまくいきません。 欲をいえば、 Book1(多人数入力用ブック)入力シートの特定セルに コンボボックス2・テキストボックス1 コンボボックス4・テキストボックス3というように続けて1セルに反映 Book2(反映用ブック)シート1に コンボボックス2・テキストボックス1・テキストボックス2 を各1セル 1行に反映させたいと考えております。 まったく知識がないのですが 仕事上どうしても必要となったので、各種サイトを見よう見真似でやっております。 ご助力いただければ幸いです。
- 締切済み
- Visual Basic
- EXCEL VBAのコンボボックスに取り込むリストについて
すいません、EXCEL VBAのコンボボックスにデータを取り込む方法について教えていただきたいことがあります。 (1)「シート1」のA列にデータが入力されている (2)ユーザーフォームにコンボボックスを設置し、このA列のデータを取り込む。 このときにA列に入っているデータの数だけ取り組むにはどうしたらいいのでしょうか。 シート1 A列 1行 11 2行 21 3行 31 ・ ・ ・ ・ Private Sub UserForm_Initialize() ComboBox1.RowSource = Sheets("シート1").Range("?") End Sub ?の部分がわかりません。End(xlup)のようなものを使ってデータが入っている最後の行を調べるのかと思いましたが、どうもうまくいきませんでした。 よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- コンボボックスに、組み込むマクロ
こんにちは。 一人ではどうしたらよいか、わからないので、お判りの方がいらっしゃいましたら、お願い致します。 コンボボックスで、選択したIDで、別シートからの数値が表示されるシートがあります。 総計は、今のままでも出るのですが、あるカテゴリー: 例えば(会社ID)<H1,H2,H3>を小計1、<H1,H2,H3,H4>を小計2として表示させたいのです。 関数でも、マクロでも構いませんので、方法があれば教えてください。 Sheet1(集計表) A1:コンボボックス(会社名)選択 B1:会社ID(=VLOOKUP(A1,CD表!A:D,4,FALSE) C2:科目(10) A3:項目名 B3:項目ID C3:件数 D3:金額 (人件費) (455) (12) (500000) ★SUMIF関数で、各数値をdataシートから持ってきています。 Sheet2(data) A列(ID) B列(会社名) C列(科目)D列(項目名) E列(項目ID)F列(件数) G列(金額) Sheet3(CD表) A列(ID)B(会社名)C(会社ID)
- 締切済み
- オフィス系ソフト
- excel 2003 vba コンボボックス 日付
始めまして初心者です。よろしくお願いします。 ワークシートのA列に日付、B列に作業内容、C列に作業人員が入力されているとします。 それをユーザーフォームから操作したいです。 ユーザーフォーム上にコンボボックスとテキストボックス1,2を設置しています。 コンボボックスのRowSourceにA列日付をセットしています。 コンボボックスを操作すると、その日付のB列、C列の内容をそれぞれテキストボックス1,2に表示させたいです。
- 締切済み
- その他(プログラミング・開発)
- Excelマクロのコンボボックスについて
初めてマクロを扱います。 マクロに詳しい方、コードをご教授ください。 Excelマクロを使い下記の機能をシートに盛り込みたいと考えております。 【実現したいこと】 ・シート上にコンボボックスを作成し、コンボボックスで選択した項目で絞り込めるようにする。 ・コンボボックスに格納される項目は、A列の重複を除外し、昇順で並べ替えたもの。 ・またコンボボックスに格納する項目は日々レコード追加されるため、コンボボックスの中身にも随時反映するようにしたい。 ・コンボボックスには「全て表示」というアイテムを追加し、「全て表示」を選択すると、フィルターが解除される。 わかりにくいかもしれませんが上記のことを実現したいと考えております。 どうかお知恵をお貸しください!! よろしくお願いします!!
- 締切済み
- その他MS Office製品
- エクセル VBA コンボボックスで検索
エクセルVBA初心者です。 シート1行目には工場名、2行目に見出し、3行目からデータが記入されています。 2行目に見出しとして、A列には作業者名、B列に工事番号、C列から作業時間などが記入されています。 ユーザーフォームにコンボボックス、コマンドボタンを設置し、コンボボックスには工事番号一覧が表示されるようにするところまではできましたが、コンボボックスで工事番号を選択し、コマンドボタンを実行することで、1シート内の一致する行だけを表示したいのですが、いろいろなサイトを参考に試してみたのですがうまくいきませんでした。 同じ内容のシートが複数ありますが、シート毎での検索・抽出をしたいと考えています。 どのようなコードを作成したら良いのかご教授願えたら幸いです。 よろしくお願い致します。
- ベストアンサー
- オフィス系ソフト
お礼
ご回答ありがとうございました。 ------ Dim w As Object If oldFile = "" Then For Each w In Workbooks If w.Name Like "*.txt" Then oldFile = w.Name oldSheetName = w.Sheets(1).Name Exit For End If Next w End If --- テキストファイルのデータを読み込むのに こちらが必要だったのですね。 >●私の記憶では、他のブックに対して、RowSource は取れなかった >はずですが…… まったく存じ上げませんでした。。 色々調べて、勉強し直します。 ご丁寧に本当にありがとうございました。 また重複したリストは省きたかったので いろいろ四苦八苦しながら以下でやることにしました。 If oldFile = "" Then For Each w In Workbooks If w.Name Like "*.txt" Then oldFile = w.Name oldSheetName = w.Sheets(1).Name Exit For End If Next w End If Retsu = "C" topStart = Retsu & "2" endCell = Retsu & "65536" With Workbooks(oldFile).Sheets(oldSheetName) Set Hani = .Range(.Range(topStart), .Range(endCell).End(xlUp)) End With For Each cellHani In Hani On Error Resume Next List.Add cellHani.Value, CStr(cellHani.Value) If Err.Number = 0 Then cmbSelect.AddItem cellHani.Value End If On Error GoTo 0 Next End Sub 早速のご回答ありがとうございました!