リストボックスを使用して選択した項目のデータとワークシートのデータを比較したい

このQ&Aのポイント
  • Excel2003を使用している個人用マクロブックにユーザーフォームを作成し、リストボックスを配置しました。リストボックス1では年(2005,2006,2007)、リストボックス2では週(01,02・・・・,53)を選択できるようにしています。クリックしたコマンドボタンで、選択した項目を取得し、hizukeという変数に代入します(例:2005 02)。
  • hizukeの値を既に開いているcsvファイルから検索し、一致しているセルを選択したいのですが、同じものと認識してくれません。hizukeのデータ型はStringにしていますが、問題があると思われますか?
  • Excel2003で個人用マクロブックを使用している際に、リストボックスで選択した項目を取得して、csvファイルから一致するセルを選択したいです。しかし、hizukeの値が同じでも認識してくれません。hizukeのデータ型はStringに設定していますが、問題があると思いますか?
回答を見る
  • ベストアンサー

リストボックスで選択した項目のデータとワークシートのデータを比較したい

Excel2003を使用しています。 個人用マクロブックにユーザーフォームを作成し、年と週を入力するリストボックスとコマンドボタンを配置しました。 Listbox1では年(2005,2006,2007)、Listbox2では週(01,02・・・・,53) が選択できるようになっています。 コマンドボタンをクリックすると、Listbox1とListbox2で選択した項目を取得し、hizuke という変数に代入します(例:2005 02)。 hizuke の値を 既に開いているcsvファイルから検索し、一致しているセルを選択したいのですが、どうしても同じものと認識してくれません。 hizukeのデータ型はStringにしていますが、何か問題があると思われますか? どうぞご教授ください。宜しくお願い致します。

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

  • ベストアンサー
  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.1

>hizukeのデータ型はStringにしていますが、何か問題があると思われますか? これはCSVのデータを見てみないと何とも言えませんが、CSVのデータが文字列型で入力されているなら問題はありません。 でもhizuke変数の例として"2005 02"とありますが、実際には途中の空白がなく "200502"だとすると、CSVの"200502"は数値となるので、型が一致しないため検索してもヒットしないでしょう。 また個人用マクロブックではなく、CSVシートの標準モジュールシートにそのマクロを貼り付けて実行したら違う結果になりませんか? その場合はシートオブジェクトの指定が曖昧になっており、意図するシートを検索していない可能性もあります。 いずれにせよ質問文ではどんなデータ、どんなマクロか具体的に記載がないので、「想像」で回答するしかありません。お互い無駄だと思いませんか? 結果を早く手に入れたいならデータの一部と、マクロを掲載した方がよいですよ。

terakura
質問者

お礼

質問後に体調不良となり、お礼が送れましたこと大変失礼致しました。 また、質問内容に不備がありましたことお詫び申し上げます。 データ型の一致で苦しんでおりました。 リストボックス内で選択した項目の値を取得する際 With Listbox1 For i = 0 to .ListCount-1 If Selected(i) = True then    (以後略) とWithステートメント内に書いておりましたが、これをやめて For i = 0 to ListBox1.ListCount-1 という書き方にしたらうまくいきました。 なぜなのかは全く分かりませんが・・・。 >また個人用マクロブックではなく、CSVシートの標準モジュールシートにそのマクロを貼り付けて実行したら違う結果になりませんか? そういうこともあるのですね。 今回はどうしてもcsvシートにモジュールを置くことができませんでしたが、その機会ができたら早速試してみようと思います。 ありがとうございました。

関連するQ&A

  • リストボックスで選択した項目を削除するには

    Excel2003を使用しています。 ユーザフォームのリストボックスには"Sheet1!A1:C10"が表示されるようになっています。 Private Sub UserForm_Initialize()  UserForm1.ListBox1.ColumnCount = 3  UserForm1.ListBox1.RowSource = "Sheet1!A1:C10" End Sub たとえばリストボックス上で3行目(A3:C3)を選択して、削除ボタンをクリックすれば選択された値が表示から消えて、セル上の値も削除されるようにしたいのです。 できれば削除されると同時に4行目(A4:C4)以降の値が上にスライドされるようにできればいいのですが、まだまだ理解できない部分が多くて自分では解決できませんでした。 ご存知の方がいらっしゃいましたらご教授頂けないでしょうか。 宜しくお願い致します。

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

    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 ------------------------------------------ まったく同じものを作って内容だけかえたのですが、できません。 どうしてでしょうか?ご教授おねがいします。

  • ダイアログのリストボックスを3つ連ねて作りたい

    マクロの作成は全くの初心者なのですが、 うまい具合にそういったリスト表の作成マクロが載っていたので コピペして作ってみたのですが、 サイト通りの1つだけのリスト表ならうまくいくのですが 3つ連ねて、コントロールの書式設定で複数選択にチェックを入れているのですが、 選択するところまではうまくいきますが、OKボタンを押すとエラーが出ます。 そして、     '確認ボタン(OKボタン)が押された場合の処理 → If ListBox1.ListIndex > 0 Then の部分が黄色く表示されます。 何がおかしいのか、どこをどう直せば良いのか分かる方教えて下さい。 お願いします。 参考までに、私がコピペしたサイトを載せておきます。 リストもまさにサイトのような感じのものを 3つ連ねたいのです。果物のリスト、野菜のリスト、魚のリスト と、 いった感じで...。 宜しくお願い致します。 「はじめてのダイアログシート」というサイトです。 http://hp.vector.co.jp/authors/VA016119/excel95/dialog1.html 以下 参考 ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー Sub MyFormShow() Dim Dialog1 As DialogSheet Dim ListBox1 As ListBox 'オブジェクト変数の設定 Set Dialog1 = ThisWorkbook.DialogSheets("Dialog1") Set ListBox1 = Dialog1.ListBoxes(1) 'オブジェクト変数の設定 Set Dialog1 = ThisWorkbook.DialogSheets("Dialog1") Set ListBox2 = Dialog1.ListBoxes(2) 'ダイアログボックスの表示 If Dialog1.Show Then '確認ボタン(OKボタン)が押された場合の処理 If ListBox1.ListIndex > 0 Then ActiveCell.Value = ListBox1.List(ListBox1.ListIndex) End If Else 'キャンセルボタンが押された場合の処理 MsgBox "キャンセルされました。", vbInformation End If End Sub ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

  • リストボックスで選択した項目に該当するデーターをラベルに表示する

    よろしくお願いします ユーザーフォームにリストボックスが2つ ラベルが1つ 配置しています。 リストボックス1で選択した項目に該当するリストを リストボックス2に表示する。 次に リストボックス2で選択した項目に該当するデーターを ワークシートのセル(E5:E300)から選んで ラベル1に表示する。 このようにしたいのですがエラーが出ます。 Dim LastRow As Long Dim DstRow As Long Const FstRow As Long = 5 Dim MctRow As Long   -  -  - Private Sub UserForm_Initialize() With Me.ListBox1 .RowSource = Worksheets("入力").Range("A5:A300").Address(External:=True) End With End Sub   -  -  - Private Sub ListBox1_Click() Dim j As Integer Dim RowCnt As Long With Worksheets("入力") LastRow = .Range("E300").End(xlUp).Row ListBox2.Clear For RowCnt = 5 To LastRow If ListBox1.List(ListBox1.ListIndex) = .Cells(RowCnt, 3).Value Then ListBox2.AddItem For j = 0 To 1 ListBox2.List(ListBox2.ListCount - 1, j) = .Cells(RowCnt,5 + j).Value Next j End If Next RowCnt End With End Sub   -  -  - Private Sub ListBox2_Click() Dim SrcCode As Long SrcCode = ListBox2.List(ListBox2.ListIndex, 0)     ↑    ↑    ↑ ここでエラーになります。 実行時エラー 型が一致しません と表示されます With Worksheets("入力") LastRow = .Range("E300").End(xlUp).Row MctRow = Application.WorksheetFunction.Match(SrcCode, .Range("E5:E" & LastRow), 0) + 5 Label1 = Format(.Cells(MctRow, 5)) End With End Sub

  • Excel マクロ リストボックス複数選択

    いろいろ拝見させていただいているのですが 理解が低いのが原因で困っています。 データのシートがあります。 ・B列には、起点となる人の名前が記載(300名ほど) ・データの入っている列は、A:CE データシートでB列にてオートフィルタをかけ 抽出シートに転記したい。 抽出シートでは、ユーザーフォームを組みました。 オプションボタン1 単一選択 オプションボタン2 複数選択 オプションボタン3 拡張選択 リストボックス(2・3に対して) コマンドボタン   終了 とした場合、単一選択はできたのですが 複数選択の場合 該当数が「0」の表記となってしまい、うまくいきません。 同じような質問が…というお返事があることを承知でお伺いしています。 いただいた回答を基に、勉強をしていきたいと思っていますので なにとぞよろしくお願い申し上げます。 Private Sub UserForm_Initialize() ListBox1.ColumnCount = 1 'リストボックスの列は1 ListBox1.BoundColumn = 0 'ListIndexの値(行数)を使用する ListBox1.MultiSelect = 0 '最初は単一選択状態にする ListBox1.RowSource = 'リストのソース ListBox1.ColumnHeads = True '列見出し表示 OptionButton1.Value = -1 'オプションボタン1を選択状態にする End Sub Private Sub OptionButton1_Click() ListBox1.MultiSelect = fmMultiSelectSingle '単一選択状態にする End Sub Private Sub OptionButton2_Click() ListBox1.MultiSelect = fmMultiSelectMulti '複数選択状態にする End Sub Private Sub OptionButton3_Click() ListBox1.MultiSelect = fmMultiSelectExtended '拡張(連続)選択状態にする End Sub Private Sub ListBox1_Click() 'リストボックスがクリックされたとき(単一選択) Dim 条件 As String 条件 = UserForm1.ListBox1.Text '氏名 With Worksheets("データ") .Range("A1").AutoFilter _ field:=2, Criteria1:=条件 .Range("A1").CurrentRegion.SpecialCells(xlCellTypeVisible).Copy _ Worksheets("抽出").Range("A1") .Range("A1").AutoFilter End With End Sub Private Sub CommandButton1_Click() '選択終了ボタンがクリックされたとき(複数・拡張選択) Dim 条件 As String Dim lastRow As Long With ListBox1 If .ListIndex = -1 Then Exit Sub '何も選択されていない For 条件 = 0 To .ListCount - 1 If .Selected(条件) Then '行選択あり With Worksheets("データ") .Range("A1").AutoFilter _ field:=2, Criteria1:=条件 .Range("A1").CurrentRegion.SpecialCells(xlCellTypeVisible).Copy _ Worksheets("抽出").Range("A1") .Range("A1").AutoFilter End With End If Next End With End Sub Private Sub UserForm_Deactivate() Unload UserForm1 '×ボタンを押したら、ユーザーフォームのunloadをする End Sub

  • ユーザフォームのリストボックス

    お世話になります。 ユーザフォームのリストボックス内の下記2個のどちらかを選択し Private Sub UserForm_Initialize() ListBox1.AddItem ("印刷プレビュー") ListBox1.AddItem ("印刷") End Sub CommandButton1をクリックして Worksheets("Sheet1").PrintOut か Worksheets("Sheet1").PrintPreview を実行したいのですが どうやってリストボックスとコマンドボタンを 連動できるようにすればいいのでしょうか コマンドボタンのみだったら出来るのですが、 リストボックスを使うとうまくいきません。 ご教授よろしくお願いいたします。

  • リスト内のアイテムをプログラムで選択・ハイライトするには?

    とほほさんのJavaScript マニュアルサイトにつぎのような説明があります。 ■ フォーム部品(セレクト部品) ◆ window.document.form.select.selectedIndex (e3/N2) 現在選択されているオプションオブジェクトを示すインデックス番号(0~)を示します。これに値を代入することにより、セレクションボックスの選択項目を変更することができます。 わたしはそこで、 <?myFORM.listbox.selectedIndex=$j; ?> として、表示されているアイテムの中から、変数$j の番号に一致するアイテムを選択・ハイライトさせたいのです。どういうPHPスクリプトを書けばよろしいのでしょうか?

    • ベストアンサー
    • PHP
  • リストボックスの値を拾うには

    リストボックスの値を拾うには 以下のボタンコマンドでListBox1のListIndexから配列二番目の値を「hinban」という変数に取り込みたいのですがうまくいきません。 「hinban = ListBox1.List(ListBox1.ListIndex, 1)」という行を書いてみましたが 「オブジェクトは、このプロパティまたはメソッドをサポートしていません。」とアラートが出てしまいます。 VBA初心者です。 解決法を教えてください。 Private Sub CommandButton1_Click() Dim lastRow As Long Dim i As Integer With Worksheets("Sheet1") lastRow = .Cells(Rows.Count, 1).End(xlUp).Row + 1 'For i = 1 To 3 '.Cells(lastRow, i).Value = ListBox1.List(ListBox1.ListIndex, i - 1) hinban = ListBox1.List(ListBox1.ListIndex, 1) 'Next i End With End Sub

  • Excel2007で、sheetを選択できません。

    ここで、最近教えてもらい、一旦は解決したと考えました。 しかし別のファイルで、そのようにならない例が見つかりました。 Officeボタン→Excelオプション→詳細設定→次のブックで…→シート見出しを表示するにチェックされているのに、 sheetが表示されません。コマンドとは表示されています。 添付画像はExcelの画面と、Excelオプションを重ねて表示したものです。

  • リストボックス 何も洗濯されてない場合はNullではなく""?

    VB2008です。 フォームにリストボックスを設置し、何も選択せずに コマンドボタンを押すと下記のコードのとおり動くようにしているのですが Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click If IsNothing(ListBox1.Text) = True Then MessageBox.Show("選択してください(Null)") ElseIf (ListBox1.Text) = "" Then MessageBox.Show("選択してください(空白)") Else MessageBox.Show(ListBox1.Text) End If End Sub 「選択してください(空白)」が返ってきます。 ということは何も選択していないときはNULLではなく""なのでしょうか?

専門家に質問してみよう