Microsoft Access 掲示板

views
4 フォロー
6,283 件中 5,881 から 5,920 までを表示しています。
1
hiroton 2019/07/30 (火) 11:23:13 0fa98@f966d

表題と質問の最初と最後でどれが本当の質問なのかよくわからないですが

抽出条件:Like IIf([Form]![Form名]![ラジオボタン名]=0,"0[12]","")

または
クエリに抽出用にフィールドを増やして

抽出用:IIF([Form]![Form名]![ラジオボタン名]=0,[フィールドA])
抽出条件:"01" Or "02"

あたりがやりたいことですかね?

1
hiroton 2019/07/30 (火) 11:00:15 修正 0fa98@f966d

ちょっと眺めただけですが
strfilter = strfilter & " AND 参加有無 Like '*" & Me.参加 & "*'"
参加有無がYes/No型ならばLikeで比較するべきではありませんし、右辺が文字列型になっているので抽出できることはまずないでしょう。(これを見た時点でほかの条件生成文は見ていません)

strfilterMe.FilterOn = Trueの直前でウォッチウィンドウで確認するとかDebug.printでイミディエイトウィンドウで確認してみるとおかしなところがわかると思います。

2
あんぱんまん 2019/07/25 (木) 23:07:01 9a406@8f39b >> 1

回答いただきありがとうございます。
1の方法で試しまして解決しました!
Access使い始めて間もないので、一つの目的に対していくつものクエリを重ねてよいものか、プロパティなどをいじれば少ない工数でできるのではないか、といろいろ考えて手詰まっておりましたが…。もっとシンプルに、単純なクエリで一つ一つ進めればいいのだなと思いました。
2の方法は私には難しいと思うので、もう少しAccessとVBAに慣れてから勉強することにします。
ありがとうございます。

1

グループヘッダーとなるとリンク先の方法では無理ですね。
方法としては2つ考えられます。

1.集計クエリでグループ件数を計算して、それをレポートのレコードソースのクエリと結合して、それをレコードソースとする。

2.VBAでレポートのフォーマット時でグループ件数を取得して連想配列に格納して、印刷時にグループヘッダーで出力する。

1.の方法で回答します。

まず、現状の集計クエリからクエリを作成して、フィールドAとフィールドBを表示させて、
クエリプロパティの「固有の値」を「はい」にします。
これで、フィールドBの重複が排除された出力が得られます。

フィールドAフィールドB
チームうさぎみかん株式会社
チームうさぎ株式会社りんご
チームぞう合同会社いちご
チームわに株式会社メロン
 
さらにクエリを新規作成して上記のクエリを追加して、集計クエリにして、下記のように設定します。

フィールドA グループ化
フィールドB カウント

これで、重複を排除した件数が取得できます。

フィールドAフィールドBのカウント
チームうさぎ2
チームぞう1
チームわに1

このクエリをレポートのレコードソースのクエリと結合させてレポートのレコードソースにすれば、
ご希望の件数をグループヘッダーに表示できます。

2
亞紀姐 2019/07/22 (月) 16:05:27 5d094@16aef

お騒がせしましたが、自己解決しました。
更新パッチがいくつかあたっていなかったことが原因だったようです。初歩的なミスで大変お恥ずかしい限りです。
失礼いたしました。

ありがとうございました。

1
hatena 2019/07/20 (土) 22:57:12 修正

まず、テーブルで新規レコード(新規行)は最後に表示されるというのは仕様ですので変更できません。

また、空のレコードを追加したとして、それをabc順に並ぶように設定してあるテーブルで空のレコードを途中にすることはできません。abc順ではなくなるからです。

並び順を決定するフィールドが必要になります。その上でフォームでなら、下記で紹介している方法で途中に行を挿入することは可能です。

帳票サブフォームで行番号フィールドの連番を維持する その3
帳票サブフォームで行番号フィールドの連番を維持する 帳票サブフォームで行番号フィールドの連番を維持する その2 上記のサンプルに行挿入機能を追加しました。挿入ボタンをクリックでカレントレコード位置に新規レコード(空白行)を挿入します。 難易度:...
fc2

1

2019と2013の環境はあるのですが、残念ながら2016の環境は持っていませんので、私からはアドバイスは難しいですね。

ほかの方の回答をお待ちいただくか、別の掲示板で質問してください。

15

名前なしさんの式は、使い方が分かりませんでしたが、テーブルを作る方法が上手く行きました。大変助かりました。有難う御座いました。

1
hiroton 2019/07/03 (水) 10:30:21 4fd4b@f966d

データの重複数をcountして最大数nまで重複数i以上で抽出したレコードをunionする
とか
nまでの連番をデータにしたテーブルを用意してクロス結合から連番がcount以下のレコードを抽出する
とか、やってできないことはないと思うけど連番をつけるのに適さないデータでなぜ連番を付けたいのか疑問です。
本当にただ表示だけでいいのであればレポートを使えば楽だとは思います。

14

office2000 ですか。こちらには環境がないので動作確認は難しいですね。
8番目のコメントの名前なしさんの式も試してみてください。

13

ご返答有難うございます。自作関数を試したのですが家のパソコンでは上手くいくのですが、会社のwin7 office 2000では○○を含む文字列を除外しようとしても表示されてしまいます。エラーは、表示されません。自宅環境は、win10 office 2003です。宜しくお願い致します。

12

リンクテーブルだとうまくいかないのですか。
どのようにうまくいかないのですか。
エラーがでるならエラーメッセージをご提示ください。

11

再投稿します。やはり必要に迫られてODBC経由のリンクテーブルである場合の上記の対応策は、ありませんでしょうか?ご教授お願い致します。

6
けんたろー 2019/06/28 (金) 13:36:56 a63a9@86c72

どうもありがとうございました。
ひとまずは現状の方法で対応さるようにいたします。

4

テーブル名、フィールド名に間違いはないか、もう一度確認してください。
原因はそれ以外は思いつきません。

あと、下記を参考にクエリで表示できるか確認してみてください。

ColumnHistory関数
データ型が「長いテキスト」である列の値の更新履歴(更新時刻と更新後の値の組み合わせを連ねたもの)を返します。使用例 この関数を用いるにはちょっとした準備が必要です。 まずテーブルに、データ型が「長いテキスト」である列を設けます(右の例では「内容」列)。さらに、そのプロパティのうち「追加のみ」を「はい」にします。こうすることで初めてColumnHistory関数による値の取得が可能となります。「追加のみ」という名前がちょっと奇妙ですが、一度記録した値を削除することもできますし、値を記録していく上で何も支障は生じません。 ところで、プロパティの注釈(画像右下)はたいてい「〜かどうかを指定します。」…
Hatena Blog

表示出来たら、それをフォームのレコードソースにすればいいでしょう。

3
tyanpon 2019/06/28 (金) 11:10:18

うまくいきませんでした。
テーブル「データA」の主キーのフィールド名はIDとデータ型はオートナンバー型です。
「コメント」フィールドのデータ型は長いテキストです。

2

名前なしさんの回答てうまくいけばいいですが、
上手くいかない場合は、下記の情報を提示してください。

テーブル「データA」の主キーのフィールド名とデータ型、
「コメント」フィールドのデータ型、

5

メインフォームの方にチェックを入れたいのですよね。
まあ、サブフォームでもメインフォームでも実装は可能ですが、
現状の方法で十分だと思います。

4
けんたろー 2019/06/27 (木) 16:54:44 a63a9@86c72

お返事遅くなって申し訳ございません。

サブフォームコントロールを使っておりますので、アドバイスいただいた方法は実装が困難です。

こういう手が使えないのだとしたら、これまで私がやっていたような方法がリーズナブルでしょうか?

1
名前なし 2019/06/27 (木) 14:58:46 dd5c4@2b788

コントロールソースを以下に修正でいかがでしょうか?

=ColumnHistory("データA","コメント","[ID] = " & Nz([ID],0))
3

下記で紹介している方法を使えば、更新できないクエリでも、チェックボックスにチェックを入れることはできます。

非連結のチェックボックスでレコードを選択する
帳票フォームでチェックボックスを配置して、チェックしたレコードのみ選択して印刷したいのですが、一つのレコードをチェックするとすべてのレコードが選択されてしまいます。 掲示板でたまにみかける質問です。気持ちは分かりますが、非連結コントロールでの更新はすべてのレコードに反映されてしまいます。一つのコントロールにプロパティ値は一つしかもてませんので。各レコード毎にプロパティ値を持つような設計にしたら大量...
fc2

ただし、フォーム上のテキストボックスに選択データを格納しているので、フォームを閉じれば消えてしまいます。
また、エクセルにエクスボートする場合は、SQLをVBAで生成する必要があります。

2
けんたろー 2019/06/25 (火) 11:32:51 a63a9@86c72

最初のご質問への回答は、メインフォームです。

二つ目のご質問への回答は、その通りです。できたらいいなと思ってご質問させていただきました。

1

グループ化をすると更新不可のクエリになってしまって、

メインフォームののことですか。サブフォームのことですか。

上司のカラムデータを基にグループ化して、上司ID、上司氏名、フラグの属性を持たせたメインテーブルにデータを追加(追加前にデータを削除)

これをせずに、グループ化したクエリをメインフォームのソースにしたいということでしょうか。

2
月子 2019/06/24 (月) 09:12:07 ff722@7f6ca

返答ありがとうございます。
そんな、便利機能があったのですね・・・
小難しく考えすぎていたようで恥ずかしい限りです。

4
5流クン 2019/06/23 (日) 16:47:55 39554@9ec8c

If rs.EOF Thenでしたか

ありがとうございました

2
hatena 2019/06/23 (日) 09:49:41 修正

外部データベースのテーブルが対象ですね。

ADODBに参照設定をしておいて、

 Dim strFileName As String
  Dim cn As ADODB.Connection
  Dim rs As ADODB.Recordset
  Dim strSQL As String

  strFileName = "データ.accdb" 'データベースのファイル名
 Set cn = New ADODB.Connection
  Cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\tasukaru\Desktop\通販\出品データ\" & strFileName & ";" '
 Set rs = New ADODB.Recordset
 strSQL = "SELECT 1 * FROM マスター where JAN = '1000000151749'"
 
 rs.Open strSQL , cn
  If rs.EOF Then
      MsgBox "該当データ無し"
  Else
      MsgBox "該当データ有り"
  End If

 rs.Close: Set rs = Nothing
 cn.Close: Set cn = Nothing

1
名前なし 2019/06/21 (金) 17:11:34 dd5c4@2b788

文字表示を変えるだけならば、合計値のテキストボックスを条件付き書式で条件分岐したほうが良いかと

20
名前なし 2019/06/21 (金) 16:29:02 feab0@f966d

(社員番号、せい、姓)すべて前方一致でいいのであればLikeの条件を区切り文字+検索文字とすると良いです。

DoCmd.SearchForRecord,,acNext,"';' & 社員番号 & ';' & せい & ';' & 姓  Like '*;" & Me!検索 & "*'"

ざっくり解説すると「Me!検索=たけ」のとき
検索文字だけで検索(Likeの条件は「'*たけ*'」)
(社員番号);おおたけ;大竹 ←一致する
(社員番号);たけだ;武田 ←一致する

区切り文字+検索文字で検索(Likeの条件は「'*;たけ*'」)
;(社員番号);おおたけ;大竹 ←一致しない
;(社員番号);たけだ;武田 ←一致する

このように前方一致を満たせます。
ただし、この形にすると社員番号で検索したいときもLikeの条件には「;」がついてくるので比較元の文字列も区切り文字から始まるようにします。

19

ありがとうございます。上記のコードで、全ての検索が可能になりました。

現状、「たけ」で検索すると、「おおたけ」がヒットするのですが、
前方一致にする方法はありますでしょうか。

17

下記を試してみてください。

DoCmd.SearchForRecord,,acNext,"社員番号 & ';' & せい & ';' & 姓  Like '*" & Me!検索 & "*'"
15
名前なし 2019/06/21 (金) 11:54:34 8b8f2@f9cf6 >> 8

あっ、そうか、*はMarkdownの斜体なので見えなくなるんでした。忘れてた('◇')ゞ

14

連投、申し訳ありません。
新田(にった)など、小さい文字もヒットしません・・・。

13

・・・濁点の含まれた検索だけ、解決していませんでした。汗
「いそがい」は、「いそ」で検索すれば出てくる状態ですm(_ _)m

12

回答ありがとうございます!!

せいの検索のコードを、
    ElseIf Not Me.検索.Value Like "[!あ-ん]" Then
        DoCmd.SearchForRecord , , Rec, "せい Like '" & Me!検索 & "*'"
にしてみたところ、解決しました。

いつも本当にありがとうございます。また困ったら質問させてくださいm(_ _)m

11

ありがとうございます。
検索ボックスの値も、検索したいデータも、完全一致を想定した「せい」のみです。

と、回答の途中で、謎が解けました!せいのどこかに、濁点が含まれるとヒットしていませんでした。
解決方法がありますでしょうか。

10
名前なし 2019/06/21 (金) 10:44:19 feab0@f966d >> 8

自分も最初そう思ってたんですけどMarkdownのアレかなーってやつですね。
ソース表示したら・・・

9

ありがとうございます。
当初部分一致のつもりで、*も入れていたのですが、
「お」で検索すると、頭に「お」が付く人だけでなく、「あさおか」などもヒットしてしまっていたので、
完全一致に変更したつもりでいました。

8

回答ありがとうございます。
質問のコードには、* が付いてないので、完全一致での検索かと思います。

部分一致なら、どうせインデックスは無効になるので、下記でもOKですね。

DoCmd.SearchForRecord,,acNext,"社員番号 & ';' & せい & ';' & 姓  Like '*" & Me!検索 & "*'"

ひょっとすると、質問者さんは部分一致での検索を想定していて、うまくいかないといっているのかも、と思ってきますか。

7

社員番号がテキスト型のとのことですが、数字のみでしょうか。それとも数字以外も含まれてますか。
数字のみなら、下記のように修正すればいいかと思います。

    If Not Me.検索.Value Like "*[!0-9]*" Then
        DoCmd.SearchForRecord , , Rec, "社員番号 = '" & Me!検索 & "'"

せいでは、検索できる人とできない人がいます。条件は不明です。

出来ないときの、検索ボックスの値と、検索したいデータの値の例をいつくか提示してもらえますか。

6
名前なし 2019/06/21 (金) 09:33:50 feab0@f966d

行儀悪いのは承知で

次へ
DoCmd.SearchForRecord,,acNext,"社員番号 Like '*" & Me!検索 & "*' or せい Like '*" & Me!検索 & "*' or 姓 Like '*" & Me!検索 & "*'"

前へ
DoCmd.SearchForRecord,,acPrevious,"社員番号 Like '*" & Me!検索 & "*' or せい Like '*" & Me!検索 & "*' or 姓 Like '*" & Me!検索 & "*'"

なんかどうですかね