Microsoft Access 掲示板

views
4 フォロー
6,281 件中 1,561 から 1,600 までを表示しています。
2
初老の人 2023/07/18 (火) 14:39:12 cfdf6@5b06d >> 1

心当たりは全くありません。今年の3月に現役を引退し、日ごろ使うこともなっかので、今年の3月までは(?)使えてたと思います。

6
ビギナー 2023/07/18 (火) 14:13:17 ddfe5@5dc2d

hirotonさん ありがとうございます。
データベースの最適化/修復では変化ありせんでした。その他の方法はこれから試して様子見たいと思ってます。
サブフォームだけ開いてみると[F振替入力Sub].Form!の借方科目、貸方科目のパラメータクエリの形になりグループ項目を入力すると絞り込みは出来てました(最初に要求される借方グループをNullで貸方グループだけ入力しても)。メインフォームで開くときだけ機能しない様です。
これはやはり謎のバグなのでしょうか?

5
hiroton 2023/07/18 (火) 13:09:02 da7ce@f966d

手動でやってダメならVBA(コード)は関係ないですね
直接クエリを開いた場合は絞り込みされているということであれば、あとはもう「ACCESS謎のバグ」ですかね

・[データベースツール]→[データベースの最適化/修復]を試す
・新規にデータベースを作成し、[外部データ]→[ACCESSデータベースのインポート]から既存ファイルのオブジェクトを全てインポートする
・新規に0から作り直す

4
ビギナー 2023/07/18 (火) 12:41:23 ddfe5@5dc2d

ご意見ありがとうございます。
F9押すと画面は一瞬ちらつきますが絞り込み機能しません(全表示になる)。Requeryコード行にブレークポイントを設定すると更新後VBA画面が表示され停止しています。

1
りんご 2023/07/18 (火) 12:06:33 935bc@0e907

原因に心当たりは?

3
名前なし 2023/07/18 (火) 11:23:45 da7ce@f966d

とりあえず確認手法として、コンボボックスにフォーカスを当て[F9]キーを押すと再計算されます(手動)
これを使うと絞り込みはされますか?

また、コードの方で[F振替入力Sub].Form![貸方科目].Requeryの行にブレークポイントを設定するときちんとここで止まりますか?

2
ビギナー 2023/07/18 (火) 10:11:52 ddfe5@5dc2d

hirotonさん ご意見ありがとうございます。
コードはメインフォームに配置してます仕訳グループコンボの更新後に [F振替入力Sub].Form![貸方科目].Requery です。
サブフォームに対する借方項目はコード中央が[借方科目]としてましてそれで機能しています。
サブフォームの貸方項目コンボの値集合ソースにクエリとしており、それを実行では機能しているのに不思議なのです・・・
何がいけないのかが分からなくて。コンパイルもしてみましたが引っかかりませんでした。

2

情報が不足しているので、下記のようだと仮定して、回答します。

テーブル名 あるテーブル
フィールド名 AutoNo, F1, F2, F3, F4, F5

AutoNo以外のフィールドはテキスト型とします。
下記のような削除クエリを作成して実行すればいいでしょう。

DELETE *
FROM あるテーブル
WHERE AutoNo>DMin("AutoNo","あるテーブル","F1='" & [F1] & "' AND F2='" & [F2] & "' AND F3='" & [F3] & "' AND F4='" & [F4] & "' AND F5='" & [F5] & "'");

 
VBAならば、
 

Dim strSQL As String
strSQL = "DELETE * FROM あるテーブル " & _ 
"WHERE AutoNo > DMin(""AutoNo"",""あるテーブル"",""F1='"" & [F1] & ""' AND F2='"" & [F2] & ""' AND F3='"" & [F3] & ""' AND F4='"" & [F4] & ""' AND F5='"" & [F5] & ""'"");"
currentDb.execute strSQL, dbFailOnError
1
りんご 2023/07/17 (月) 19:29:56 935bc@0e907

AutoNo以外の属性が完全に一致する重複レコードを1つ残して

要するに、AutoNo以外の属性の組み合わせの重複を認めない。AutoNo以外の属性を集めたテーブルを作って、全部に主キー制約をかけておく。あとは標題のレコードをループ処理で移行するような処理を考えれば?

3

帳票フォームで複数レコードを表示するには、連結フォームでないと無理ですが、
フォームはテーブルまたはクエリと連結していますか。
(レコードソースにテーブルまたはクエリが設定してありますか。)

もし、非連結フォームなら、1レコード分しか表示できません。
Do Loopでループさせても、おなじテキストボックスを上書きしているだけです。

2
りんご 2023/07/17 (月) 16:32:55 935bc@0e907

 F_伝票番号を作って帳票形式で保存しないの?わざわざコードに書き起こすのは、何か理由があるから?
 

1
りんご 2023/07/17 (月) 07:31:45 935bc@0e907

新しいフォームを作った後、テキストボックスを全て選択して表形式に変更しましたか?

3
hiroton 2023/07/14 (金) 17:16:50 5534d@f966d

フォームを一つ用意してテキストボックスを配置し、テキストボックスの名前プロパティをNameとします

テキストボックスのダブルクリック時にイベントプロシージャを設定して、テキストボックスの内容をいろいろ変えつつ

Private Sub Name_DblClick(Cancel As Integer)
    Debug.Print Me.name
    Debug.Print Me!name
End Sub

を実行してみましょう


まぁ、日本語開発環境なら全部「.」を使ってしまってもまず問題が起きることもないんですけどね

2
nokonoko 2023/07/14 (金) 16:04:51 3e2e6@54883

ご回答ありがとうございました。できました。

理屈は難しくてわかりませんでしたが、対処は覚えておきます。

1

Controlsの前の!.に変更してください。

Set mytxt = [Forms]![元フォーム名].Controls("txt" & Format(i, "00"))

メンバー アクセス演算子

上記の公式の説明はなんか難しくてよく分からないと思いますが、
Controlsのようなプロパティは.しか使えないと覚えておくとよいでしょう。
フォーム名とかコントロール名は!でも.でも使えます。

4
nokonoko 2023/07/14 (金) 13:19:49 3e2e6@54883 >> 3

回答ありがとうございました。
頂いたコードを参考にして勉強します。

3
hiroton 2023/07/14 (金) 12:06:31 5534d@f966d

やり直す≒繰り返す動きをさせるのでループ処理を組みます

    Dim 成功 As Boolean
    
    On Error Resume Next
    Do Until 成功
        .activeworkbook.SaveAs strsavebookpath
        
        If Err <> 0 Then
            On Error GoTo -1
            MsgBox "ファイルが保存できませんでした。現在使用中でないか確認してください"
        Else
            成功 = ture
        End If
    Loop
    On Error GoTo 0

※これだけだと「保存できない」限り無限ループになることには注意が必要です

2
nokonoko 2023/07/14 (金) 11:04:08 3e2e6@54883 >> 1

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

     On Error GoTo Err_Handler2
    .activeworkbook.saveas strsavebookpath

Err_Handler2:
MsgBox "適当なメッセージ"
xls.close SaveChanges:=False

Resume Exit_Here

としてみたのですが、xls.closeが間違っているということで、うまくいきませんでした。
初歩的な質問で申し訳ございませんが、どうすればよかったのでしょう。

1
hiroton 2023/07/14 (金) 10:41:36 5534d@f966d

そのクエリでは貸方も絞り込み出来ているのにフォーム上では機能しないのです。グループのコンボボックス更新後のサブフォームの対象にはRequeryもしているのですが。

真っ先に疑うのはコードの記述ミスですね
どのようなコードを記述してるんですか?

ついでに、コードエディタの方で「[デバッグ]→[(データベース名)のコンパイル]」でエラーが出てたりしませんか?

1
hiroton 2023/07/14 (金) 08:57:45 5534d@f966d

保存しようと思ってたもの破棄しちゃっていいんですか?
https://www.google.com/search?q=VBA Excelを保存しないで終了する方法

名前変えるのがNGなら適当にメッセージボックスだして待機させた後保存処理やり直したらいいんじゃない?

9
hiroton 2023/07/11 (火) 12:03:29 fc8bf@f966d

当初、表示を分ける必要がなかったので整数部と小数部をまとめて処理するためにLeft,InStrの組み合わせにしたんですけど、最終的な目的から見ればすでにやってる方法で問題ないと思いますよ

安っぽいやり方に思えて

ACCESSは実に安いソフトなので、安っぽい方法で目的が達成できたのなら喜びましょう

軽く触れましたが、文字(文字列)の表示は非常に高度な問題です。ACCESSはかなり苦手とする部類で、「レポートの表示だけでいい」のならある程度力業を組み合わせてしまったほうがすんなりいくものです

8
hiroton 2023/07/11 (火) 10:17:02 fc8bf@f966d >> 5

やっぱり計算式間違いやってるやーつ・・・

小数部表示:IIf([商品区分]="燃料油",Mid([丸めた数量]-Fix([丸めた数量])+0.001,2,3))&[単位]


小数部表示:IIf([商品区分]="燃料油",Mid([丸めた数量]-Fix([丸めた数量]+0.001),2,3))&[単位]


小数部表示:IIf([商品区分]="燃料油",Mid([丸めた数量]-Fix([丸めた数量])+0.001,2,3))&[単位]


実際にACCESS触らず手打ちでやってるとイカンなやつでした

7
oilService 2023/07/11 (火) 09:33:40 13b9a@89413

hirotonさん、貴重なお時間を使わせてしまって、本当にありがとうございました。
整数と小数を分けて取出して表示する方法は、下記の通り私も作っていたのですが、どうにも安っぽいやり方に思えて長年モヤモヤしていました。

整数部:fix([数量]
小数部:IIf([商品区分]="燃料油", Format([数量]-[整数部],"#.00"),""))

Left関数とinStr関数の組み合わせで表示できるとは、hirotonさんにあらためて感謝申し上げます。

6
hiroton 2023/07/10 (月) 22:52:30 7d804@2ee8f >> 2

さらに修正・・・

数量の表示: Left([丸めた数量]+0.001,InStr([丸めた数量] & ".",".")+IIf([商品区分]="燃料油",2,-1))

[丸めた数量][数量]は例えば[数量]9.999のとき[丸めた数量]10となって桁が変わる可能性があるので横着せず両方とも[丸めた数量]を使う必要がありました
意図せず記述してましたが、[丸めた数量]はやっぱり別フィールドにして計算させておいた方がよさそうですね

5
hiroton 2023/07/10 (月) 22:46:36 修正 7d804@2ee8f

整数の位置に表示できないでしょうか?

単位をどう表示するかも悩ましいところですが、文字位置は使っているフォントで調整が必要になったりするのでとても難しいですね

整数表示(右詰め)、小数部表示(左詰め)とテキストボックスを2つ並べてしまうのが簡単だと思います

整数表示 :Fix([丸めた数量])
小数部表示:IIf([商品区分]="燃料油",Mid([丸めた数量]-Fix([丸めた数量]+0.001),2,3))&[単位]
4
hiroton 2023/07/10 (月) 22:14:28 修正 7d804@2ee8f

ACCESS標準の書式設定ではちょっと難しい案件なので文字として整形してしまいます

Left(
    [丸めた数量]+0.001                    :0詰めをして小数点3桁にそろえた文字
    ,InStr([丸めた数量] & ".",".")        :小数点の位置
        +IIf([商品区分]="燃料油",2,-1)    :条件に合わせて+2(小数点以下2桁)/-1(整数)
)

登録するデータはある程度入力ルールが決まっていると思いますが、単純に数値とするといろいろな入力が考えられます

パターン123456←文字位置
A4
B24.13
C24.1
D9.543
E24.999

ほしい結果は2パターンで
Ⅰ:先頭から小数点の前の文字まで
Ⅱ:先頭から小数点の2文字先まで

先頭から文字列を抜き出せばいいのでLeft関数を使ってそれぞれ

Ⅰ:Left( 基準の文字列, 先頭から小数点の2文字先まで)
Ⅱ:Left( 基準の文字列, 先頭から小数点の前の文字まで)

を作ります

基準の文字列
文字列として処理するので丸め処理をした数値を基にします
注意が必要なのは、上記ACパターンで、小数点以下2桁までほしいのに文字列としては桁数が足りません。そこで、元の数値に影響なく、桁が足りないデータに対しては0で埋められるように[丸めた数量]+0.001と計算させています。丸め処理済みであれば数値のない小数点以下第3桁に1を加えても影響がでません
逆に丸め処理が済んでいない場合、例えばEパターンにこのような計算式を当ててしまうと基にすべき数値が変わってしまうので注意が必要です

先頭から小数点
InStr関数で文字位置を調べればいいですね。ただし、整数のデータには小数点がないので、小数点があると仮定した位置を返すように、[丸めた数量] & "."を元のデータとして"."を探すようにします

の2文字先まで/の前の文字まで
単純に+2/-1でいいので、これをIIf関数で条件を付けて切り替えます

3
oilService 2023/07/10 (月) 20:48:12 79353@76ab6

hirotonさん、すばらしいです!希望通りの表示になりました。ありがとうございます。ただ私のレベルでは、この式を紐解くのは無理なようです。ぜひ詳細なご説明をお願いいたします。
欲を言いますと、整数が右詰になってしまい、燃料油の少数第二位の位置に表示されます。
   レギュラー 23.56ℓ
   タイヤ     4本
ではなく
   レギュラー 23.56ℓ
   タイヤ    4  本
と整数の位置に表示できないでしょうか?

2
hiroton 2023/07/10 (月) 18:01:50 2c180@2ee8f >> 1

修正修正を重ねたらやっぱり間違ってるし

数量の表示: Left([丸めた数量]+0.001,InStr([数量] & ".",".")+IIf([商品区分]="燃料油",2,-1))

※不要な「)」が残ってました
数量の表示: Left([丸めた数量])+0.001,InStr([数量] & ".",".")+IIf([商品区分]="燃料油",2,-1))

1
hiroton 2023/07/10 (月) 17:27:04 修正 10a5a@f966d

表示用にテキストでデータを作る。かな

数量の表示: Left([丸めた数量])+0.001,InStr([数量] & ".",".")+IIf([商品区分]="燃料油",2,-1))
15
ビギナー 2023/07/10 (月) 16:48:02 ddfe5@06621

hatena様ありがとうございます。複数ユーザーで使用することはありません。現状は中途半端な知識なので非連結フォームはやめておいた方がいいですね。大変参考になりました。ありがとうございました。

14

あとご意見お聞きしたいのですがファームで入力の際、テーブル等を基にして直接する方法と非連結フォームを使い追加クエリーで登録する方法ありますが一般的にどうしているのしょうか? メリット・デメリットがあるのでしょうか? 

非連結フォームは帳票表示できないので、基本1レコード毎での入力になります。
帳票表示で入力したい場合は、一時テーブルに転記してそれを更新する、更新後、クエリかVBAで元テーブルに反映させるという設計になります。

メリット
自由度が高い
複数ユーザーで共有する場合、データベース破損の危険性が低減する

デメリット
コード量が多くなる
Accessが自動でやってくれることをすべて自前でやる必要があるので、高いスキルが必要。
特に複数ユーザーで共有する場合、排他制御などかなり高度なスキルが必要です。
中途半端なスキルだとかえってデータ破損、整合性不可の危険性が高いです

連結フォームはメリットデメリット上記の逆になります。
データベース破損の危険性はユーザー数か一桁なら、めったに壊れません。
2桁以上のユーザーが同時更新するなら、危険性は高くなりますが、そうなると、SQLサーバーなどのRDBMSを検討した方がいいという話になります。

13
ビギナー 2023/07/10 (月) 14:27:14 ddfe5@06621

すみません、この件は解決できました。仕訳時の貸方金額-借方金額が0より大きい場合のIIfでいけました。
色々とありがとうございました。もう少し経理の知識身につけてACCESSに展開したいと思います。

12
ビギナー 2023/07/10 (月) 13:17:14 ddfe5@06621

hiroton様ありがとうございます。確かにそうですね、その点は考えてみます。別の関連書類でどうしたら出来るのかなという事がでてきました。例えば日々の仕訳で下記の場合
仕訳ID 日付  借方科目     借方金額    貸方科目  貸方金額
  1  6/1   普通預金     9,500     売掛金   10,000
    2        支払い手数料    500

総勘定元帳(科目毎の履歴)には2つ以上の仕訳の場合”諸口”という表現での転記が必要で、売掛金用の台帳は
  日付  相手方勘定科目(売掛金に対して)  借方金額   貸方金額     残高
  6/1   諸口 ←                      10,000    10,000 
となるのです。この形にデータの加工はIIfか何かで可能でしょうか? いいアイデアありますでしょうか?

11
hiroton 2023/07/10 (月) 11:52:59 10a5a@f966d

借方or貸方のどちらかがNULLになることもあります。

とのことなので

案件ID
1
2

このようなデータに対して問題のレポートで「行をずらす」をした場合、1レコードに左右両方のデータを保存してしまうと

案件ID
1
1
1
2
2
2

のようになってしまいます。(行内で段を作って疑似的に行分けをしているだけでそれぞれの行が変わるわけではないため)

それと、1つの仕訳に関するデータが複数レコードになる場合があるので、どのデータがグループになっているのかという情報が必要になります。仕訳IDの設定とそれに付随して、仕訳メインテーブルの作成、日付は仕訳メインで登録というのはあってもいいと思います

というわけで、

項目

項目ID借り項目貸し項目
1売掛金売上高
2売掛金消費税

仕訳サブ

明細ID仕訳ID借り貸しフラグ項目ID金額
110111000
211110000
31121000

こんな感じでやるかなぁというのがhirotonの感想です

多対多のデータになるようなので結構大変な案件なんじゃないですかね

10
あん 2023/07/10 (月) 10:16:13 927ea@53b5d

hatena様、hiroton様
ご提案のコードでプログラム作成させていただきました。

動作検証も行いましたが、特に問題なさそうです。
どちらかを使わせていただきたいと思います。
また、コードのお勉強もさせていただました。
毎度、ありがとうございます。

hiroton様
バック(テーブル)がSQL Serverを用いておりますので、ファイル容量には問題ありません。
ご心配ありがとうございます。

りんご様
既製品の導入に関してですが、
Accessでファイル管理していくことに問題や不便があれば、検討しますが、何もないので導入はしません。
特に有料であればなおさらです。
無料の場合でも、Accessでの入力とは別途に、ユーザーが既製品ソフトを起動して、ファイルを保存したり、該当ファイルを出力したりの操作をするのは余計な手間になりますし、間違いも起こりえるでしょう。
ただし、Accessから自動的に既製品ソフトを開いてファイルを保存したり、該当ファイルを出力したりするプログラムが出来れば別ですが。

昭和でも、黒歴史でも、目的が達成できればいいです。
ユーザー本位のプログラムができれば。それができなければ、失敗作なのでしょう。

それでは、この度もありがとうございました。

10
ビギナー 2023/07/10 (月) 08:41:52 ddfe5@06621

hatena様ご意見ありがとうございます。親子フォームにしたいのでテーブルを1対多のリレーションの固定観念がありました。確かにメインが日付位であれば1レコードでいけますね。まだまだ試しの段階ですので日々の仕訳データを基に加工して色々な書類(最終的に決算書) の作成となります。経理の知識も平行して進めたいと思います。その際色々なコードが必要となりますのでまた質問させて頂きますね。あとご意見お聞きしたいのですがファームで入力の際、テーブル等を基にして直接する方法と非連結フォームを使い追加クエリーで登録する方法ありますが一般的にどうしているのしょうか? メリット・デメリットがあるのでしょうか? 

9

仕訳サブ のデータ例ですね。
これと 仕訳メイン の関係はどのようなものですか。
仕訳メインが 処理ID 日付 の2フィールドだけなら、メインとサブに分ける必要もないと思います。
仕訳サブ の方に 日付 フィールドを追加すればすみますので。

メインサブフォーム形式にしたいのなら、メインフォームは非連結で、非連結の日付テキストボックスを配置すればすみます。

上記の点は除外して、現状のテーブル設計で特に問題はないと思いますが、どの辺に不満点がありますか。

りんごさん提案の設計法もあると思いますが、最初の質問のような出力をレポートでするなら現状の方が扱いやすいように思います。

8
ビギナー 2023/07/07 (金) 15:00:19 ddfe5@06621

色々コメントありがとうございました。私自身経理担当ではなく詳しくはないのですが、日々の様々な取引が仕訳処理され、借方と貸方の合計金額は必ず合致します。項目は多数あります。売上高、売掛金、仕入れ高、買掛金 等。それらは借方、貸方のどちも使う項目となります。例えば1つの取引の仕訳で
仕訳明細ID  借方科目  借方金額  適用   貸方科目  貸方金額
1       売掛金   11,000     A社へ  売上高   10,000
2                                           消費税    1,000

こんな感じで借方or貸方のどちらかがNULLになることもあります。
例えば売上高に対しては売掛金、手形、現金等と選択肢は決まってきます。
経理担当がエクセルで処理しておりそこからデータ拾って色々な台帳作成しているのですが同じ事を何度も転記は手間でACCESSならこの仕訳入力だけでいけると思い。提案しているところなのです。経理ソフトもあるのですが自作の方がカスタマイズが自由にできていいなと思った次第です。(私自身別業務で少しだけACCESS使った経験があり、なんて便利なんだろうと感じたので)

7

hatena様 借方、貸方データはテーブルを分けておいた方が融通が効きますでしょうか? 

経理には詳しくないのですが、分ける必要性はないように思います。

・テーブル/仕訳メイン⇒①処理ID ②日付
・テーブル/仕訳サブ⇒①明細ID ②処理ID ③借方項目 ④借方金額 ⑤貸方項目 ⑥貸方金額

仕訳メイン と 仕訳サブ の関係性がよくわかりませんが、どのようなデータが格納されているのか、
データ例を提示してもらえませんか。

6
りんご 2023/07/06 (木) 18:36:59 935bc@0e907

何かいいアイデアがあればお願いします。
 借方項目、貸方項目は、1つのフィールドにまとめて、勘定科目。借方金額、貸方金額は、1つのフィールドにまとめて、仕訳金額。そして、貸借区分フィールドを追加。