Microsoft Access 掲示板

6,622 件中 6,201 から 6,240 までを表示しています。
1
hatena 2019/08/09 (金) 03:01:52 修正

単票フォームで現在表示されているレコードのデータをエクセルへ転記したいということですよね。

なら、わざわざレコードセットを開かなくても(OpenRecordsetしなくても)、フォームのデータをそのまま代入すればいいでしょう。

提示のコードではシートを指定していないのでエラーになると思いますので、それも修正すると下記のようなコードになると思います。

Private Sub EXCEL出力_Click()

    Dim intRow As Integer
    Dim intCell As Integer
    Dim xls As Object

    'Excelオブジェクトを生成
    Set xls = CreateObject("Excel.Application")
    With xls
        '画面の再描画を抑止
        .ScreenUpdating = False
        '既存のブックを開く
        .Workbooks.Open ("C:\Users\xxx\Documents\Access_expo_excel\請求書.xlsx")

        '各レコードをExcelに出力
        With .Workbooks("請求書.xlsx").WorkSheets(1)
            .Cells(15, 2).Value = Me!お名前
            .Cells(16, 2).Value = Me!〒
            .Cells(17, 2).Value = Me!ご住所
            .Cells(18, 2).Value = Me!お電話番号
            .Cells(19, 2).Value = Me!メールアドレス
            .Cells(20, 2).Value = Me!車名
        End With
  '画面の再描画を元に戻す
  .ScreenUpdating = True
  'Excelを可視状態にする
  .Visible = True

End With
Set xls = Nothing

End Sub

Me!フィールド名 でフォームに表示されているデータを参照できます。

1

データの持ち方が間違っていると思いますか、

既存のものなので元のデータを西暦にという考えはなしです。

ということなので、そういうことにして、
年に対する元号をクエリで表示させたいということでしょうか。
テーブルを作成して結合するのが一番速いと思います。

元号
1令和
2令和
27平成
28平成
29平成
30平成
31平成

年 フィールドにはインデックスを設定しておきます。

クエリで、「年」同士を結合して「元号」を表示させます。

14
ただいま勉強中 2019/08/01 (木) 07:35:44 4f2cf@96e2f >> 13

くわしく解説いただきまして、ありがとうございます。
意味も理解できずに使用していまして、全くダメですね。
この掲示板をもっと活用させて頂いて、勉強していきます。

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

13
hiroton 2019/07/31 (水) 13:26:48 1a36d@f966d

無事に行ったようでなによりです。
せっかくなので軽く解説を置いておきます。

演算子には優先順位があります。
3 + 3 * 3 = 12 '・・・18ではない(乗算が優先される)
といったようなものです。

ACCESS(SQL)のANDORにも優先順位がありANDが優先されます。
例えば元コードで男性の伊藤さんを探そうとなった場合、漢字指定だと
氏名='伊藤' OR フリガナ='伊藤' AND 性別='*男*'

氏名='伊藤' OR (フリガナ='伊藤' AND 性別='*男*')
と同じとなります。その他の検索項目はフリガナで抽出できた場合にしか影響しないということですね。
提示した修正はこれを
(氏名='伊藤' OR フリガナ='伊藤') AND 性別='*男*'
となるようにするものです。

4
ただいま勉強中 2019/07/31 (水) 12:10:05 4f2cf@96e2f

ありがとうございます。
頑張ります!🙋‍♀️

3

最初のうちはネットで調べてコピペでもいいと思います。
ただ、そのまま使うのではなくそれぞれの関数やコードの意味を調べて理解するようにするといと思います。
調べても分からなければ、このような掲示板でどんどん質問すればいいでょう。
そのうちにスキルアップしてきます。

2
ただいま勉強中 2019/07/31 (水) 10:29:36 4f2cf@96e2f

詳しく教えて戴きましてありがとうございます。
意味も考えずに使用しているだけでは、全くダメですね。
勉強していきます。
ありがとうございました。

1

Year(DateAdd("m",-3, [入出庫日]) について
DateAdd で入出庫日の3か月前を取得、
これにより 2019/4/1 ~ 2020/3/31 の日付は、2019/1/1 ~ 2019/12/31 に変換される。
Year で年を取得すると 2019 となる。

IIf(Month([受理年月日])<=3,Year([受理年月日])-1,Year([受理年月日]))
月が3以前だったら年から1をひく、そうでなかったら年をそのまま返す。
つまり、4月から12月のまでの日付はその年を返して、3月以下だったら年から-1する。

どちらにしても結果は同じになります。

12
ただいま勉強中 2019/07/31 (水) 08:06:19 4f2cf@96e2f

hatena様 hiroton様

本日、試したところ無事思うように動きました。
大変勉強になりました。
ありがとうございました。😊

11
hiroton 2019/07/30 (火) 17:00:44 0fa98@f966d

提示されている式をそのままコピーして使っているだけなんですが不思議ですね。
(ちなみに自分のところでは元のコードからエラーになります)

10
strfilter = strfilter & " AND (氏名 Like ""*" & Me.氏名検索 & "*"" Or フリガナ Like ""*" & Me.氏名検索 & "*"")"

Orフリガナ の間に半角空白が必要です。

9
ただいま勉強中 2019/07/30 (火) 16:37:14 4f2cf@96e2f

ありがとうございます。
早速試しに アオキ で検索しようとした所、

実行時エラー‘3075
クエリ式’(氏名 Like “アオキ” Orフリガナ Like”アオキ”)’の構文エラー:演算子がありません。
と、表示され、下記部分が 黄色に反転しています。

Me.Filter = Mid(strfilter, 6)

申し訳ありません、ほぼ見よう見まねですので、どうしよう・・・という感じになっています。

8
hiroton 2019/07/30 (火) 16:12:59 修正 0fa98@f966d

氏名検索のところを

strfilter = strfilter & " AND 氏名 Like ""*" & Me.氏名検索 & "*"" Orフリガナ Like ""*" & Me.氏名検索 & "*"""

strfilter = strfilter & " AND (氏名 Like ""*" & Me.氏名検索 & "*"" Orフリガナ Like ""*" & Me.氏名検索 & "*"")"

でどうでしょう?

7
ただいま勉強中 2019/07/30 (火) 15:47:01 4f2cf@96e2f

申し訳ありません。
Me.氏名検索 のところで、フリガナ を入力して性別検索であったり 産業検索等の項目をいくつか選択し
抽出をかけると、絞り込みが出来るのですが、
Me.氏名検索 に 漢字で氏名 を入力して同じように項目をいくつか選択し
抽出をかけると、漢字(氏名)のみの絞り込みしか出来ず、その他のいくつか選択した項目の絞り込みが出来ません。

6
hiroton 2019/07/30 (火) 15:09:51 0fa98@f966d

その他の検索項目を選択すると、動作したり、しなかったり

具体的に上げてください。
何をどうしたらこうなってほしい」のだけれど「何をどうしたらどうなった」というのがなければ書いたとおりに動いているだろうとしか言えません。
エラーが出てコードが途中で止まるという話ではないですよね?

5
ただいま勉強中 2019/07/30 (火) 14:24:26 4f2cf@96e2f

お返事ありがとうございます。
質問は編集できたのですね。申し訳ありません。
Me.参加 はチェックボックスです。
データ登録画面で、参加する しない を チェックボックスで選択してもらい、
検索画面で、チェックが入ったデータのみを抽出しようと思いましたので、
チェックが入っていないものは抽出しない、程度にしか考えていませんでした。

4

あと、確認ですか、Me.参加 はチェックボックスでしょうか。

チェックボックスとして、チェックが入っているときは、「参加有無」フィールドがTrueを抽出するのだと思いますか、チェックが入ってないときはどうしたいのでしょうか。

3

質問は後からでも編集できるので、質問のコードを実際のものに修正してください。

2
ただいま勉強中 2019/07/30 (火) 12:46:06 4f2cf@96e2f

お返事ありがとうございます。
すみません、確認すると実際には
strfilter = strfilter & " AND 参加有無 =" & Me.参加
と、記述していました。

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で生成する必要があります。