• ベストアンサー

office(Access)の条件付き書式について

メインフォームで指定した条件で抽出したクエリーデータを表形式サブフォームに表示しているのですが、サブフォームの各セルに規定のデータが入力されていない場合や規定の条件以外で更新を行った場合は背景色を黄色にしたくて「条件付き書式」であれこれ試してみたのですが出来ません。 セルへの入力項目と規定の入力データは以下の通りです。  (1)社員コード  固定長(6文字)の半角数値  (2)社員名    10文字以内の全角文字 よろしくお願いいたします。

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

  • ベストアンサー
  • nda23
  • ベストアンサー率54% (777/1415)
回答No.2

>Dim 修理者コード as String これが間違い。 正規表現オブジェクトを受け取る変数が「文字型」じゃオカシイでしょ? 正しくはRegExp型なんですが、Access標準オブジェクトではないので、 参照設定に正規表現を指定しないと、エラーになります。 サンプルでは面倒くさいので、何でもOKのVariant型(型指定がない)に しているはずです。 理論上の「修理者コード」は引数で渡される「文字列」の方です。これは 画面コントロールなので、Nullもあり得ます。それでやはりVariant型に しているのです。 正規表現オブジェクトにどのようなプロパティやメソッドがあるかは 下記を参照してください。 http://msdn.microsoft.com/ja-jp/library/cc392487.aspx また、正規表現の構文は下記です。 http://msdn.microsoft.com/ja-jp/library/cc392020.aspx イキナリは難しいので、"^\d{6}$"の解説をします。 "\d"は「数字(半角)」という意味です。"{6}"は桁数で6文字限定を 表わします。"^"は「先頭に一致」、"$"は「末尾に一致」ということ。 それに他の文字を許す記号が無いので、次のような意味になります。 「先頭が数字6文字である」And「末尾が数字6文字である」And 「間に任意の文字を許さない」 この条件を満たすには数字6文字以外にあり得ませんね。 他のやり方としてはLenで文字数を確認し、"\D"を使って非数字を 検出する方法もあります。以下はサンプルです。 If Len(文字列) = 6 Then     正規表現.Pattern = "\D"     半角数字6桁 = Not 正規表現.Test(文字列) '★ End If ★非数字が見つかったらTrueになるので、結果の反対(論理否定)を 戻り値にするようにしています。

nodapapa
質問者

お礼

ありがとうございました!  おかげさまで今日完成することができました。 2度目の回答を頂き修正してみましたが、「型が一致しません」とエラーメッセージを表示する ので行き詰っていたのですが今日原因が解りました! 原因はデータ入力フォームがメイン/サブフォーム形式のサブフォームなので条件付き書式で Forms!メーンフォーム名!サブフォーム名!社員コードと記述しなければならないところを Forms!サブフォーム名!社員コードと記述していました。 今回私の質問に対し親切丁寧な回答を頂きほんとうにありがとうございました。

その他の回答 (1)

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.1

これが最善ではないと思いますが、以下のようにします。 判断メソッドを作成します。 Function 半角数字6桁(ByVal 文字列) As Boolean Dim 正規表現 半角数字6桁 = False If IsNull(文字列) Then Exit Function Set 正規表現 = CreateObject("VBScript.RegExp") 正規表現.Global = True 正規表現.Pattern = "^\d{6}$" 半角数字6桁 = 正規表現.Test(文字列) End Function Function 漢字10文字以内(ByVal 文字列) As Boolean Dim 正規表現 漢字10文字以内 = False If IsNull(文字列) Then Exit Function If Len(文字列) > 10 Then Exit Function Set 正規表現 = CreateObject("VBScript.RegExp") 正規表現.Global = True 正規表現.Pattern = "[\x00-\xFF]" 漢字10文字以内 = (正規表現.Execute(文字列).Count = 0) End Function フォームが入力、フィールドが社員コード、社員名とすると、 次のように条件書式を記述します。 【社員コード】 条件:「式」を選択 式:半角数字6桁(Forms!入力!社員コード) フォント、色:適宜 【社員名】 条件:「式」を選択 式:漢字10文字以内(Forms!入力!社員名) フォント、色:適宜 [関数の説明] (1)半角数字6桁  Nullは不一致とみなし、Falseを返す。  正規表現で半角数字6桁であるかどうかをBooleanで返す。 (2)漢字10文字以内  Nullは不一致とみなし、Falseを返す。  10文字より多ければFalseを返す。  正規表現で半角文字を検索し、なければTrueを返す。 (1)の方はLen、StrConv、StrCompを組み合わせて、 条件付書式の式に記述することもできます。できれば その方が良いのですが、長くなるので、関数化して います。

nodapapa
質問者

お礼

お礼が遅くなり申し訳ありませんでした。 回答頂きありがとうございました。 回答を頂いてから参考書を開いて内容を理解しようと努力してはみましたが、CreateObject("VBScript.RegExp")や "^\d{6}$"の意味が理解できぬまま半角数字6桁の判断メソッドを以下のようにモジュールに記述し試してみましたが、「オブジェクトが必要です」とメッセージが表示されSet 正規表現のところを指してコンパイルエラーとなり行き詰ってしまいました。 申し訳ありませんが何処が原因なのかもう一度教えて頂けないでしょうか。お願いいたします。 Function 半角数字6桁(ByVal 文字列) As Boolean Dim 修理者コード as String 半角数字6桁 = False If IsNull(文字列) Then Exit Function Set 修理者コード = CreateObject("VBScript.RegExp") 修理者コード.Global = True 修理者コード.Pattern = "^\d{6}$" 半角数字6桁 = 修理者コード.Test(文字列) End Function

関連するQ&A

  • 条件付き書式でできますか?

    エクセル2007ユーザーです。セルにコピーした半角数字を貼り付けるのですが、その数字が10桁と9桁の場合があります。9桁の数字のみ、条件付き書式でセルの色と文字をマーキングすることは可能でしょうか。 入力規則ですと、貼り付けた場合、規則は無効となってしまいます。 マクロやVBAを使わないでできれば、関数で行うことは可能でしょうか。 ご教示よろしくお願いします。

  • クエリーで、全角混じりデータの抽出[access95]

    半角で入力すべきフィールドの中に全角文字が混在している時に、 この全角文字が混在しているデータを、クエリーで抽出する方法を 教えてください。 データ型はテキストで、フィールド長は50です。 また入力されているデータは、任意<50文字とないっています。

  • エクセルの条件付き書式の条件を増やしたい

    文字列のデータのなかで別のセルに入力した文字と一致するセルに着色したいのですが条件付き書式を使用し3色の指定(条件1、条件2、条件3)はできますが、検索するセル(入力セル)を10個(10色)に増やしたいのですが可能でしょうか?ウインドウズXP エクセル2003を使用しています。よろしくお願いいたします。

  • AccessでBetween条件を含むクエリーで、Between条件を

    AccessでBetween条件を含むクエリーで、Between条件を入力しなくてもデータを抽出するには? Access97でデータの抽出を行いたいと思います。 「顧客名」「商品名」「出荷日」という項目を含むクエリーから、希望のデータを抽出するフォーム(名:検索フォーム)を作成しています。 検索フォームにそれぞれ「顧客名」「商品名」「出荷開始」「出荷終了」という名前の非連結のテキストボックスを作り(規定値を"*"にしています)、それに値を入力すると、これらのテキストボックスの下に配置したサブフォームに抽出されたデータが抽出される様にしたいのです。 現在、クエリーの「顧客名」項目の抽出条件に「[forms]![検索フォーム]![顧客名]」という様に入力し、同じ様な記述を「商品名」項目にも行い(条件は[商品名]としています)、出荷日に「Between[forms]![検索フォーム]![出荷開始]And[forms]![検索フォーム]![出荷終了]」と記述しています。(これらは全てAnd条件にしています) さて、この検索フォームの値入力項目で、全てのテキストボックスに入力しなくても(1つ以上値が入力されていれば)データをサブフォームに抽出できるようにしたいのです。 現在、「出荷開始」&「出荷終了」に値を入力すれば、その他の値(「顧客名」と「商品名」)を入力してもしなくてもデータが抽出できますが、「出荷開始」&「出荷終了」を入力しない限りデータが抽出されません。 この「出荷開始」&「出荷終了」を入力しないケースでもデータが抽出できる様なフォームを作成したいのですが、 どの様に記述を変えたらよいでしょうか?

  • ACCESSの条件付書式

    アクセスのデータシートビューで条件付書式ができるのは フォームをデータシートビューで表示したときだけでしょうか? テーブルやクエリでは ツールバーに「書式→条件付書式」は表示されませんが フォームのデータシートビューを開いている時のみ、 「書式→条件付書式」が表示されます。 テーブルやクエリでも条件付書式を設定できる方法があれば教えてください。 よろしくお願いします。

  • 条件書式

    パソコンVistaでの条件書式設定が分かりません。 セルに"教育"の文字が入力したら赤の文字に替えたいのですが どうしたらいいのか? 2003年は書式→条件書式で行けるのですが、 2007年はグラフ対応は分かります。 ホーム→条件書式→の次は何処へクリックして条件を設定するのでしょうか? 分かる方お願いします。

  • 「Access」の抽出条件に、書式設定をしたいのですが…

    「Access2002」を 使用している初心者です。 クエリの抽出条件に、 [納品日を入力して下さい] と記述しました。 すると、開く際に メッセージボックスが現れて 条件を入力するように求めてくれるのですが、 そこの書式を設定することは 出来るのでしょうか? 自動的に 「yyyy/mm/dd」 で入力されるようにしたいのですが…。 VBAなどはよく分からないのですが、 簡単に出来る方法はありませんでしょうか?

  • テキストボックスの書式について

    例えばセルA1の書式が、分類:日付、種類:3月14日とします。(数字は半角) この場合、セルA1に03(全角)月14(半角)日と入力しても、3月14日(数字はすべて半角)と表示されます。 マクロを作成しているのですが、セルA1とテキストボックスの書式がどうしてもうまくいきません。 セルA1はUserform1内のTextbox1の値を取得します。 しかし、Textbox1の値をセルA1へ表示させると、セルA1と同じ書式に表示されません。 テキストボックスの値は文字列として扱われているようです。 Textbox1に03(全角)月14(半角)日と入力しても、3月14日(数字はすべて半角)と表示される方法はありませんか?

  • アクセス サブフォーム条件付き書式の反映が若干遅い

    アクセスのフォームの中のサブフォーム条件付き書式を設定しています。 サブフォームにはテーブルのデータが紐づいております。 フォームを開いたと同時に条件付き書式に色付けがサブフォームに行われるようにしたいのですが フォームを開いただけだと色が付かず、サブフォームのどこかのレコードをクリックしたら色が付きます。 もしくは、フォーム上でマウスを動かすと色が付きます。 デザインビューでサブフォームに条件付き書式を設定しているので サブフォームを開くと同時に色が付くし、 サブフォーム単独で開くと、すぐ色が付きます。 親フォームを開いたと同時にサブフォームの条件付き書式を反映させる方法はありますか? アクセス2010です。 ご教授よろしくお願いします。

  • エクセル 条件付き書式

    こんにちは。エクセルの条件付き書式を使って特定の文字を含む文字列に色を付けて表示したいのですが、うまくいきません。例えばDATA1,DATA2,DATA3...と入力して、条件を値=DATA*としてみたのですが、色が付きません。試しにセルにDATA*と入力してみたところ、色が付きました。これは*がワイルドカードとしてではなく、記号として認識されてしまっているということですか?どうすればDATAを含む全ての文字列に色を付けることができますでしょうか?よろしくお願いします。