[[20141017102133]] 『シート内を検索してフォーム上のテキストボックス』(murako39) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『シート内を検索してフォーム上のテキストボックス・コマンドボタンへ結果を表示するには?』(murako39)

 はじめて書かせていただきます。
 初心者です。初めてマクロに挑戦なので、色々探して顧客管理のマクロを作っています。
 新規登録や上書きなどは、出来上がっていますが、シート内を検索してフォーム上のテキストボックス・コマンドボタンへ
 結果を表示するには?ですが、コマンドボタンだけがどうにもなりません。 
 検索の記述だけ載せました。宜しくお願い致します。

 Option Explicit
' 「性別」から選択された値を格納しておく文字列型変数sexを宣言する。
Private sex As String
' データの入っている行の個数を格納するLong型変数lastRowを宣言する
Private lastRow As Long
'■「登録」ボタンがクリックされたときの処理

Private Sub CommandButton1_Click()

  Dim sno
  If 顧客番号テキストボックス.Text <> "" Then
  sno = Application.Match(顧客番号テキストボックス.Text, Sheets("排出事業者").Columns(1), 0)
  If IsNumeric(sno) Then

   郵便番号テキストボックス.Text = Sheets("排出事業者").Cells(sno, "B").Value
   排出事業者名テキストボックス.Text = Sheets("排出事業者").Cells(sno, "C").Value
   住所テキストボックス.Text = Sheets("排出事業者").Cells(sno, "D").Value
   部署テキストボックス.Text = Sheets("排出事業者").Cells(sno, "E").Value
   電話番号テキストボックス.Text = Sheets("排出事業者").Cells(sno, "F").Value
   担当者名テキストボックス.Text = Sheets("排出事業者").Cells(sno, "G").Value
Else

 If 女性オプションボタン = True Then
    Sheets("排出事業者").Cells(sno, "H").Value = "女性" = 1
 End If
  If 男性オプションボタン = True Then
    Sheets("排出事業者").Cells(sno, "H").Value = "男性" = 1
 End If

 郵便番号テキストボックス.Text = "見つかりませんでした"
 排出事業者名テキストボックス.Text = "見つかりませんでした"
 住所テキストボックス.Text = "見つかりませんでした"
 部署テキストボックス.Text = "見つかりませんでした"
 電話番号テキストボックス.Text = "見つかりませんでした"
 担当者名テキストボックス.Text = "見つかりませんでした"

顧客番号テキストボックス.Text = ""
郵便番号テキストボックス.Text = ""
排出事業者名テキストボックス.Text = ""
住所テキストボックス.Text = ""
部署テキストボックス.Text = ""
電話番号テキストボックス.Text = ""
担当者名テキストボックス.Text = ""
End If

        MsgBox "セルの値が検索されました"
End If
End Sub

< 使用 Excel:Excel2013、使用 OS:Windows7 >


困っている箇所と、どういう結果を望んでいるのに、現状はどうなっているかを説明してください。
とりあえずぱっと見で、幾つか指摘。

Sheets("排出事業者").Cells(sno, "H").Value = "女性" = 1

これは、「"女性" = 1」という論理演算の結果をセルに代入する意味であり、絶対一致しないので、
セルにはFALSEしか入りません。それ以前に、文字列=数値という比較では、型が違うエラーになります。
なにがしたいのでしょう?

それと、オプションボタンをチェックするロジックは、If文がElseのときしか通りませんが、良いの?
(???) 2014/10/17(金) 11:09


 すみません。
 ご指摘されたElseは、外しました。何がしたいかと言いますと、検索結果をテキストボックスとオプション
 ボタンにもチェックが入るようにしたいのです。
 少し変えてみましたので載せます。

  If 女性オプションボタン = True Then
    Sheets("排出事業者").Cells(sno, "H").Value = 女性オプションボタン = True
 End If
  If 男性オプションボタン = True Then
    Sheets("排出事業者").Cells(sno, "H").Value = 男性オプションボタン = True
 End If

(murako39) 2014/10/17(金) 11:47


変えても駄目です。セルとオプションの両方をTrueにしたいのでしょうけど、その書き方はExcelでは許されません。
横着せずに、2行に分けましょう。

そもそも、女性オプションボタン = True なのに女性オプションボタンに代入する必要は無いでしょう?
(???) 2014/10/17(金) 11:53


 こんな感じでいいのでしょうか?この記述にしたら検索出来なくなりました。

 If Sheets("排出事業者").Cells(sno, "H").Value = True Then
    女性オプションボタン.Value = True
    男性オプションボタン.Value = False
 End If
  If Sheets("排出事業者").Cells(sno, "H").Value = True Then
    男性オプションボタン.Value = True
    女性オプションボタン.Value = False
 End If
(murako39) 2014/10/17(金) 11:59

よく考えてみてください。

シートのセルとフォームのオプションボタン、ユーザーが印を付けやすいのはどちらですか?
シートに直接入力するならば、フォームなんて要りませんよね。ということは、判定に使うのは
オプションボタンのほうでしょう。

それと、If Sheets("排出事業者").Cells(sno, "H").Value = True Then という判定が
男女全く同じですよ。セルの値は、Trueのときは男性?女性? どちらにしたいのでしょう?

また、オプションボタンを使用したということは、男女のチェックは自動的にどちらかだけに印が付きますよね。
ということは、セルが女性のときにTrueにしたいなら、以下の1行で終わりませんか?

Sheets("排出事業者").Cells(sno, "H").Value = 女性オプションボタン.Value
(???) 2014/10/17(金) 12:30


 教えていただいたSheets("排出事業者").Cells(sno, "H").Value = 女性オプションボタン.Valueですと
 セルにFalseが書き込まれてしまいます。男女関係無くです。
 逆にして女性オプションボタン.Value = Sheets("排出事業者").Cells(sno, "H").Valueしたらコマンド
 ボタン女性側に灰色のチェックが入りましたが、男女どちらでも同じです。
 色々変えてみましたがわかりません。
 宜しくお願い致します。
(murako39) 2014/10/17(金) 14:13

現在、どのようなソースコードになっているのか見せてください。
女性にチェックが付いた状態でボタンを押すと、Trueになるはずですが、他の処理でそれを書き換えていませんか?

元のソースでも、"見つかりませんでした"とセットした直後にそれを消していたので、見た目には何も表示されていませんでしたが、そこも考え直しましたか?
(???) 2014/10/17(金) 14:23


 横から失礼します。
 murako39さんの質問の意図が正しく伝わっていないのでは、と思います。

 > シート内を検索してフォーム上のテキストボックス・コマンドボタンへ
 > 結果を表示するには?ですが、コマンドボタンだけがどうにもなりません。 
 (この「コマンドボタン」は「オプションボタン」の間違いだと思いますが)

 ソースを見ると、検索した結果をフォームの各項目へ設定していますが、
 オプションボタンへの設定の仕方がわからないという質問と読み取りましたが
 違いますか?

 検索結果が見つかった時と見つからなかった時、それぞれでの設定方法が
 わからないということでは?

 皆さんの回答はオプションボタンを判断してシートのセルに設定する回答になっています。
(めいぷる) 2014/10/17(金) 14:34

 そうです。それが知りたいのです。
 質問の仕方すら駄目なんですね・・・すみません。
 何日もずーっと考えてやりましたが、できません。
(murako39) 2014/10/17(金) 14:41

私もオプションボタンが入力のためでなく、出力のためかも?、と思いつきました。
検索条件は「顧客番号」だけであり、他は全部結果なんですね?

その場合、H列にはどのようなデータが入っていますか? 本当にTRUE/FALSEですか?
男/女という文字列だったりしませんか?

 Private Sub CommandButton1_Click()
    Dim sno

    顧客番号テキストボックス.Text = ""
    郵便番号テキストボックス.Text = ""
    排出事業者名テキストボックス.Text = ""
    住所テキストボックス.Text = ""
    部署テキストボックス.Text = ""
    電話番号テキストボックス.Text = ""
    担当者名テキストボックス.Text = ""

    If 顧客番号テキストボックス.Text <> "" Then
        sno = Application.Match(顧客番号テキストボックス.Text, Sheets("排出事業者").Columns(1), 0)
        If IsNumeric(sno) Then
            郵便番号テキストボックス.Text = Sheets("排出事業者").Cells(sno, "B").Value
            郵便番号テキストボックス.Text = Sheets("排出事業者").Cells(sno, "B").Value
            排出事業者名テキストボックス.Text = Sheets("排出事業者").Cells(sno, "C").Value
            住所テキストボックス.Text = Sheets("排出事業者").Cells(sno, "D").Value
            部署テキストボックス.Text = Sheets("排出事業者").Cells(sno, "E").Value
            電話番号テキストボックス.Text = Sheets("排出事業者").Cells(sno, "F").Value
            担当者名テキストボックス.Text = Sheets("排出事業者").Cells(sno, "G").Value

            If InStr(Sheets("排出事業者").Cells(sno, "H").Value, "女") Then
                女性オプションボタン.Value = True
            Else
                男性オプションボタン.Value = True
            End If
        Else
            MsgBox "見つかりませんでした", vbExclamation, "エラー"
        End If
    End If
End Sub
(???) 2014/10/17(金) 14:48

 ???さんと衝突しましたが・・・

 検索して見つかった時、オプションボタンへ表示する元ネタが設定されているのは
 Sheets("排出事業者").Cells(sno, "H")のセルですね?
 セルの値は何が設定されているのですか?
 提示のソースだと、"女性"または"男性"と文字列が設定されているのでしょうか。
 設定値が空白の場合もありますか?

 その場合なら、見つかった時の設定は以下のように。

 Select Case Sheets("排出事業者").Cells(sno, "H").Value
   Case "女性"
    女性オプションボタン.Value = True
    男性オプションボタン.Value = False
   Case "男性"
    女性オプションボタン.Value = False
    男性オプションボタン.Value = True
   Case Else
    女性オプションボタン.Value = False
    男性オプションボタン.Value = False
 End Select

見つからなかった場合は、上記Case Elseと同じでよいのでは。
(めいぷる) 2014/10/17(金) 14:55


 すみません、訂正です。
 オプションボタンは、どちらか一方にTrueを設定したらもう片方はFalseになるので、
 以下でOKでした。

 Select Case Sheets("排出事業者").Cells(sno, "H").Value
   Case "女性"
    女性オプションボタン.Value = True
   Case "男性"
    男性オプションボタン.Value = True
   Case Else
    男性オプションボタン.Value = False ・・・ デフォルトでTrueにしておきたい方に
 End Select

 ※「Sheets("排出事業者").Cells(sno, "H").Value」に必ず男性/女性を表す値が
    設定されている(空白やその他の値が無い)なら、???さんのコードが分かりやすいと
    思います。

(めいぷる) 2014/10/17(金) 15:10


 できました!!ありがとうございます!
 そうなんです、"女性"または"男性"と文字列にしてありました。何度も言葉足らずすみません。
 ありまとうございました。助かります。
 色々ネット検索するたびにこちらの掲示板を参考に見させていただいていて、何度質問しようか悩んだ
 ことか・・
 有難う御座いました。
(murako39) 2014/10/17(金) 15:26

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.