Microsoft Access 掲示板

views
4 フォロー
5,901 件中 321 から 360 までを表示しています。
2

typoでした。㉗IDをです。

1

機種依存文字を変えてみるとどうでしょうか?
例えば ㉗UD を No27ID とか。

14
rinrin 2024/02/20 (火) 21:19:49 b4dc9@c7f00

hatenaさん。。。。。。。。;;ありがとうございます。。。^^
明日またがんばります。。。。^^
ホントにありがとうございます

6
Anonymous 2024/02/20 (火) 17:57:48 23e8e@44ebd >> 2

アルファベットに囲まれた"ー"を含むレコードを抽出するだけであれば可能でしょうか?という意味です!
抽出したレコードのどの"ー"を置換するかは、フォームか選択クエリ上で目視・手動で行おうと思います。

ですので抽出条件のみ書き方が分かればOKかなと思います。

5
Anonymous 2024/02/20 (火) 17:52:17 23e8e@44ebd >> 3

コード提示ありがとうございます。
確認してみます。

4
すずやん 2024/02/20 (火) 13:56:40 >> 2

その場合も「前後がアルファベットに挟まれた「ー」の場合は置換する」という判断をクエリで行うのがとても難しいと思います。
不可能では無いかもしれませんが、クエリにこだわらないほうが良いかと。

mayuさんが下記に例を記載されていますが、このようなVBAを使用する方法が良いのではないかと思います。

24
ぽん 2024/02/20 (火) 12:49:13 53dda@1925b

上記の様に変更して、
引数を省略したは全レコードをチェック、引数が指定してあればその引数間のレコードを対象に...
()の中で使い分けができるなんて!!とても助かります。
これで細かいチェックもできます!ありがとうございました

3

■正規表現版

Public Function SampleA(ByVal argStr As String _
                      , ByVal argSrc As String _
                      , ByVal argDst As String) As String
    If Len(argStr) < 2 Then
        SampleA = argStr
        Exit Function
    End If
    
    With CreateObject("VBScript.RegExp")
        .Global = True
        .IgnoreCase = True
        .Pattern = "([a-z])(" & argSrc & ")([a-z])"
        If .Test(argStr) Then
            SampleA = .Replace(argStr, "$1" & argDst & "$3")
        Else
            SampleA = argStr
        End If
    End With
End Function

 
■InStr関数+ループ版

Public Function SampleB(ByVal argStr As String _
                      , ByVal argSrc As String _
                      , ByVal argDst As String) As String
    If Len(argStr) < 2 Then
        SampleB = argStr
        Exit Function
    End If
    
    Dim pos    As Long
    Dim front  As String
    Dim back   As String
    Dim target As String
    
    pos = 1
    target = argStr
    
    While pos > 0
        pos = InStr(pos + 1, target, argSrc, vbBinaryCompare)
        If pos > 0 And pos < Len(argStr) Then
            back = Mid$(target, pos - 1, 1)
            front = Mid$(target, pos + 1, 1)
            If StrConv(front & back, vbLowerCase) Like "[a-z][a-z]" Then
                Mid(target, pos, 1) = argDst
            End If
        End If
    Wend
    
    SampleB = target
End Function

 
■SQL

SELECT
    SampleA(
        '株式会社zawaーZawa worldーrescue株式会社トーキョー'
      , 'ー'
      , '▼'
    ) as a
    , SampleB(
        '株式会社zawaーZawa worldーrescue株式会社トーキョー'
      , 'ー'
      , '▲'
    ) as b
;

■結果

AB
株式会社zawa▼Zawa world▼rescue株式会社トーキョー株式会社zawa▲Zawa world▲rescue株式会社トーキョー
2
Anonymous 2024/02/20 (火) 11:29:07 23e8e@44ebd >> 1

なるほどです。
であれば、前後がアルファベット(大文字・小文字問わず)だけであれば抽出は可能でしょうか?

1
すずやん 2024/02/20 (火) 11:15:57

以前も同じような質問がありましたが、プログラムでは「zawaーzawa」→変換対象、「トーキョー」→問題ないので変換しない、という判断が難しいと思います。

「半角文字に囲まれている場合は変換対象」等では判断できるかもしれませんが、そういった複雑な判断はクエリにあまり向きません。

13

私が提示した書式で、
すべて実際のフォームのデザインビューで設定値を確認したものを提示したください。

下記の書式でお願いします。


メインフォームのデザインビューで確認
フォーム名 実際の設定値
レコードソース 実際の設定値

メインフォーム上の1番目のチェックボックス
コントロールソース 実際の設定値
名前 実際の設定値

メインフォーム上の2番目のチェックボックス
コントロールソース 実際の設定値
名前 実際の設定値

メインフォーム上の最後のチェックボックス
コントロールソース 実際の設定値
名前 実際の設定値

メインフォーム上のサブフォームコントロール
名前 実際の設定値


サブフォームのデザインビューで確認
レコードソース 実際の設定値
既定のビュー 実際の設定値

サブフォーム上の1番目のチェックボックス
コントロールソース 実際の設定値
名前 実際の設定値

サブフォーム上の2番目のチェックボックス
コントロールソース 実際の設定値
名前 実際の設定値

サブフォーム上の最後のチェックボックス
コントロールソース 実際の設定値
名前 実際の設定値


テーブル MST実査実績一覧
フィールド名とデータ型を列挙してください。

下記のような書式でお願いします。

ID 数値型 主キー
年月日 日付時刻型
担当者 テキスト型(短いテキスト)
都道府県 整数型
北海道 Yes/No型
秋田 Yes/No型



沖縄 Yes/No型

12

サブフォームのソースコード空欄じゃなかったです。。。。。。。。。。;;

サブフォームのソースコードとはなんでしょうか。

サブフォームのレコードソースのこと?
それともサブフォームのチェックボックスのコントロールソースのこと?
????

もし、コントロールソースのことなら、空欄にしないでください。
現状のままにしておいてください。

正確な用語を使ってください。不正確な用語を使っていては状況が伝わりません。
用語の意味を理解するようにしてください。
分からない用語があったら検索して調べてください。
分からない場合は、質問してもらっていいです。
勝手に解釈しないでください。

まだ、解決策を提示していません。というかできません。
まずは、そちらの状況を正確に確認する作業が必要です。

11
rinrin 2024/02/19 (月) 19:36:29 b4dc9@c7f00

hatenaさん。。。。。。。。ごめんなさい。。。。。;;
サブフォームのソースコード空欄じゃなかったです。。。。。。。。。。;;
設定したつもりないのに それぞれに値がはいってました。。。
すべて空欄にして挑戦してます。。。^^

むずかしいよぉぉぉ。。。。。。;;

15
COCO 2024/02/19 (月) 16:29:01 ddfe5@71072

色々とありがとうございます。だからMe.FilterOn = (strFilter <> "")もいけたのですね。
厳密にしようとすると細かい事が一杯ありますね。全然知らないのと少しでも知っているのでは意図しない動作の時に違うなと思いました。これも奥の深いことですね。さらっと出来る方々がすごいです。

14
hiroton 2024/02/19 (月) 16:05:18 bec36@f966d

NULL比較演算子による演算ができません

詳しいことはかなり複雑なので、一通り情報に目を通してみてください
https://www.google.com/search?q=VBA NULL 比較

本来、Nullの可能性がある場合の比較は、特別な処理・特別な判定をする必要がありますが、「VBAにおいてはNullを比較演算に使うと全てFalseとして扱われる」という特徴があります。(コードの実装としてこれを活かすのは本来よろしくありません)

つまり、

Me.[cb1].Value <> Null

とすると、コンボボックスの値に関わらず常にFalseの処理が為されるため、意図しない動作をします

逆に、<>""の判定においてコンボボックスの値がNullの場合は

Null <> "" '//本来やってはいけない演算

Falseを返して欲しいときにはFalseだった場合の処理がされるので表面上は問題なく動作しているというわけです


今回のような場合であれば、コンボボックスの値をチェックしてNull比較をしないようにするのが正解で、事前にコンボボックスの値をチェックしてコンボボックスの値がNullだったら""とみなすようにします。たとえばNz関数を使って

Nz 関数

Nz(Me.[cb1].Value, "") <> ""

蛇足
Nullなら空文字とみなしたいなら「"" & Me!cb1 <> ""」くらいの手抜きで済ませちゃうんですけどね

13
COCO 2024/02/19 (月) 15:13:27 ddfe5@71072

何度もすみません、最後に一つだけ質問があります。hatenaさんから最初に頂いた回答の下記を使いプロシージャを作成しました(setFilter1として)。
If Me.[cb1].Value <> "" Then
    strFilter = strFilter & " AND フィールド1=" & Me.[cb1].Value
End If
***
****
strFilter = Mid(strFilter, 6) '先頭の" AND "を削除
Me.Filter = strFilter
***
そしてコンボ更新後イベントにCall setFilter1で実行しました⇒上手くいきました。(これはすごく便利です!)
質問はIf Me.[cb1].Value <> "" Thenの右辺です。ここを<>Nullにすると条件に引っかかりません。もう少し様子みるとこのフォームにはフィルター解除ボタンがあり Me.[cb1] = Null *** Me.FilterOn = False
で解除しており、その実行直後なら<>Nullでもいけますが、コンボ値を他の値に選択では<> ""でないと駄目です。
これで機能しているので問題ないのですが、それが不思議で。””とNullの違いはネットで確認しました。
この場合は<>””が妥当なのでしょうか?

23
hatena 2024/02/19 (月) 13:49:42 修正

最小値や最大値だけでなく、IDが34まで増えたときに19から22の間だけ、27から34の間だけで数値を並び替えて同じようにIDの連番をチェックするときは、どうすればいいんだろうと疑問に思ったからです。

チェックしたい範囲を引数で渡すようにすればいいでしょう。
ただし、指定した範囲だけチェックしたいのなら、その範囲のレコードを抽出して並び替える必要があります。

同じ処理をするのなら、きっともっと良い方法があるんだろうと邪推しました。お願いできますか?

引数を省略できる設定があります。引数の前に Optional をつけます。

VBA 省略可能な引数 Optional と名前付き引数

引数を省略したは全レコードをチェック、引数が指定してあればその引数間のレコードを対象にするというふうにすればいいでしょう。

上記を考慮すると下記のようなコードになります。

Public Sub SequenceCheck4(Optional MinId As Long = 0, Optional MaxID As Long = 0)
    If MinId = 0 Then MinId = DMin("ID", "T1")
    If MaxID = 0 Then MinId = DMax("ID", "T1")
    
    Dim StepNum As Long, SeqNum As Long, stOrder As String
    If DLookup("数値", "T1", "ID=" & MinId) < DLookup("数値", "T1", "ID=" & MaxID) Then
        StepNum = 1   '昇順
        SeqNum = MinId
        stOrder = "昇順"
    Else
        StepNum = -1  '降順
        SeqNum = MaxID
        stOrder = "降順"
    End If

'    CurrentDb.Execute "UPDATE T1 SET 連番チェック = Null WHERE Not 連番チェック Is Null;"
    
    Dim sSQL As String
    sSQL = "SELECT * FROM T1 Where ID>=" & MinId & " And ID<=" & MaxID & " ORDER BY 数値, ID"
    If stOrder = "降順" Then sSQL = sSQL & " DESC"
    
    Dim rs As DAO.Recordset
    Set rs = CurrentDb.OpenRecordset(sSQL)
    Do Until rs.EOF
        rs.Edit
        If rs!ID <> SeqNum Then
            rs!連番チェック = stOrder & "×"
        Else
            rs!連番チェック = Null
        End If
        rs.Update
        SeqNum = SeqNum + StepNum
        rs.MoveNext
    Loop

    rs.Close
    Set rs = Nothing
End Sub

使用例


'27から34の間だけ連番チェック
Call SequenceCheck4(27, 34)

'全レコードを連番チェック
Call SequenceCheck4()

22
ぽん 2024/02/19 (月) 12:52:22 53dda@1925b

DMin関数とDmax関数を使用して、テーブルに保存されているIDの最小値から最大値の中でチェックできました。本当にありがとうございます。うまくいかなかったというよりは
最小値や最大値だけでなく、IDが34まで増えたときに19から22の間だけ、27から34の間だけで数値を並び替えて同じようにIDの連番をチェックするときは、どうすればいいんだろうと疑問に思ったからです。
MinId = DMin("ID", "T1"): MaxID = DMax("ID", "T1")の部分を、MinId =19 や MinId =27 MaxID =22 や MaxID=34と書き換えてSub を2つ作れば、私でもできるけど...
同じ処理をするのなら、きっともっと良い方法があるんだろうと邪推しました。お願いできますか?

12
COCO 2024/02/19 (月) 12:45:39 ddfe5@71072

hirotonさん ありがとうございます。中々プロシージャは奥の深いものですね。頭がこんがりますが、少しづつ勉強していきます。

11
hiroton 2024/02/19 (月) 12:30:20 bec36@f966d

・Callで呼び出す必要はなかったのですね?

VBAにはいろいろな記述省略のルールがあります。Callは省略しても良い記述ですね

Call ステートメント
VBAの省略可能な記述について(エクセルの神髄さん)

プロシージャの呼び出しのためのCallは上記リンク先エクセルの神髄さんでは省略しないほうがいいとも言っていますね。見慣れないモノや、わかりにくいモノは省略できても記述しておいたほうが無難かもしれません

・Public Function record_idou() As BooleanのAsデータ型を()内に記述したもの

引数(ひきすう)と言います
Microsoft公式ドキュメントでも解説はありますが、さすがにわかりにくいと思うので別なサイトのリンクを貼っておきます

第107回.プロシージャーの引数(エクセルの神髄さん)

8
驚天動地!前任者失踪丸 2024/02/19 (月) 11:55:57 23e8e@44ebd

Hatenaさん、すずやんさん、ありがとうございました。
意味が分かってスッキリしました。

10
COCO 2024/02/19 (月) 11:47:59 ddfe5@71072

hirotonさん haetnaさん ありがとうございました。浅はかでした。
hatenaさんの記述で試して上手くいきました。あと初歩的な質問ですみません参考にまでお聞きします(ルールが分かってないので)、
・Callで呼び出す必要はなかったのですね?
・Public Function record_idou() As BooleanのAsデータ型を()内に記述したものを見た事があるのですが、それはケースbyケースなのでしょうか?

7
すずやん 2024/02/19 (月) 11:23:30 >> 6

そうなりますね。

6
驚天動地!前任者失踪丸 2024/02/19 (月) 11:16:29 23e8e@44ebd

つまりこのコードは、人間から同じように見えているものを、コンピュータにも同じように見えるための処理ということでしょうか?

9

ただし、F1フィールドを入力必須にしたいのなら、テーブルのデザインビューでF1フィールドのプロパティの「値要求」を「はい」(テキスト型の場合はさらに「空文字列の許可」を「いいえ」)にしておけば済みますので、実際に使う必要性はないですね。

8

理由はhirotonさんから回答済みです。
このような場合の対処法としては、SubではなくFunctionにして戻り値で次の処理を振り分けます。

Public Function record_idou() As Boolean
 If IsNull(Me.[F1]) Then
    MsgBox "F1未入力時はレコード移動できません"
     record_idou = False '戻り値設定
  Else
     record_idou = True  '戻り値設定   
 End If
End Function
Private Sub cmd前へ移動_Click()
    If record_idou() = True Then
        DoCmd.GoToRecord , , acPrevious
    End If
End Sub
7
hiroton 2024/02/19 (月) 10:47:52 bec36@f966d

Exit Subは「現在のSubプロシージャを終了する」命令です

 Call record_idou
  DoCmd.GoToRecord , , acPrevious

Public Sub record_idou()
 If IsNull(Me.[F1]) Then
    MsgBox"F1未入力時はレコード移動できません"
   Exit Sub
 End If
End Sub

は、イメージとしては

' Call record_idou
Public Sub record_idou()
 If IsNull(Me.[F1]) Then
    MsgBox"F1未入力時はレコード移動できません"
   Exit Sub    '─┐
 End If         ' │ここに飛ぶ
End Sub          '←┘
  DoCmd.GoToRecord , , acPrevious

となり、record_idouプロシージャが終了して、それに続くDoCmd.GoToRecord , , acPreviousが実行されます

つまり、この例では意味のないExit Subですね(続く処理がないのでどうせ何もせずプロシージャが終了する)

6
COCO 2024/02/19 (月) 10:13:55 ddfe5@71072

hatenaさん ありがとうございます。Subプロシージャ、Functionプロシージャの事は少し調べました。何となくしか分かってませんが実際に試そうと思いまして(別のコードで同じフォームに記述しているものがあるので)下記の様な内容のでプロシージャを作成しました。
Public Sub record_idou()
 If IsNull(Me.[F1]) Then
    MsgBox"F1未入力時はレコード移動できません"
   Exit Sub
 End If
End Sub
これをフォームのレコード移動ボタンに下記を記述しました。
 Call record_idou
  DoCmd.GoToRecord , , acPrevious
試すとF1未入力時・・・・のメッセージは出るのですがレコード移動はしてしまいます。Exit Subが効いてません。
何か記述不足しているのでしょうか?

10
rinrin 2024/02/18 (日) 15:03:26 b4dc9@c7f00

hatenaさん。。。。。。いつもいつも すぐな対応ほんとにありがとうございます。。。^^

>>うーん、「ACCESSプログラム自体が会社にあるもの」ということですか。>>
>>会社から「ACCESSプログラム」を見ながら、この掲示板でやりとりはできますか。
>>あるいは「ACCESSプログラム」を自宅に持ち帰って、自宅から掲示板でやりとりできますか。

会社のACCESSプログラムは 外部に持ち出すことは ぜーったいダメです。。。。;;
システムの会社じゃないので、パソコンもできる人はあまりいない現状です。。。;;
それだけに たとえプログラムのソースコードだからって言っても 持ち出すことはダメ!の一点張りなんです。。。;;
ごめんなさい。。。。。;;

>>正確な情報がつかめないと先に進むのは難しそうです。
ですよね。。。。。。。。;;

とりあえず、提示されている情報から、不足している部分、不正確な部分は推測で補った現状の設定と思われるものを提示しておきますので、出社してから、提示の情報に間違いがないか確認してください。
明日 出勤したらすべての確認を行います。。。^^

なにがいけないのかな?????
ありがとうございます^^

9
hatena 2024/02/18 (日) 11:36:43 修正

うーん、「ACCESSプログラム自体が会社にあるもの」ということですか。
会社から「ACCESSプログラム」を見ながら、この掲示板でやりとりはできますか。
あるいは「ACCESSプログラム」を自宅に持ち帰って、自宅から掲示板でやりとりできますか。

正確な情報がつかめないと先に進むのは難しそうです。

とりあえず、提示されている情報から、不足している部分、不正確な部分は推測で補った現状の設定と思われるものを提示しておきますので、出社してから、提示の情報に間違いがないか確認してください。


メインフォーム
フォーム名 MSTmain実査実績一覧
レコードソース (空欄)

メインフォーム上のチェックボックス
コントロールソース (空欄)
名前 Chk北海道、Chk秋田、・・・Chk沖縄 (48個)

メインフォーム上のサブフォームコントロール
名前 SubMST実査実績一覧


サブフォーム
レコードソース MST実査実績一覧
既定のビュー 帳票フォーム または

サブフォーム上のチェックボックス
コントロールソース (空欄)
名前 北海道、秋田、・・・沖縄 (48個)


テーブル MST実査実績一覧
フィールド名 データ型
ID 数値型 主キー
年月日 日付時刻型
担当者 テキスト型(短いテキスト)
都道府県 整数型
北海道 Yes/No型
秋田 Yes/No型



沖縄 Yes/No型
 都道府県名のYes/No型フィールドが48個


異なる部分があったら、上記のようなフォーマットで修正したものを提示してください。

8
rinrin 2024/02/18 (日) 08:29:58 b4dc9@c7f00

hatenaさん   れんらくありがとうございます
ただ このACCESSプログラム自体が会社にあるもので。。。;;あたしの記憶で話してます

>>レコードソースは、フォームのデザインビューでプロパティの「データ」タブの一番上にあります。
>>既定のビューは、フォームのデザインビューでプロパティの「書式」タブの2番目です。
>>これらの設定を教えてください。
それらに何かを設定した記憶はありません。空白です。。。

>>メインフォーム ”MSTmain実査実績一覧” です。。。は完全なユーザーフォームで、、、それにテキストボック>>>>ス、、、あるいはコンボボックス     それとチェックボックスが48個設定してあります。。。^^

>>Accessにユーザーフォームというものはありません。正確な用語を理解していないと、掲示板でのやりとりは難しいで>>す。
ごめんなさい。。。;;

>>メインフォームのレコードソースに”MSTmain実査実績一覧”というテーブル名か設定されているということですか。
>>それともメインフォームの名前が”MSTmain実査実績一覧”ということですか。
メインフォームの名前が MSTmain実査実績一覧 です。。。

>>チェックボックスのコントロールソースの設定はどうなってますか。
>>*コントロールソース**はデザインビューでチェックボックスを選択して、プロパティの「データ」タブの一番上にあり>>ます。
>>チェックボックスの名前も教えてください。
チェックボックスのコントロールソースの設定も 特に何もしてません 空白です。。。
チェックボックスの名前は  メインフォームが Chk北海道  
                       Chk秋田
                         ⇃
                       Chk沖縄    です。。。
              サブフォームが 北海道
                      秋田
                        ⇃         
                      沖縄       です。。。

>>サブフォームには項目”ID(主キー)”年月日””担当者”あとは都道府県のチェックボックスが48個 並んでいる状態で>>す。

>>このチェックボックスのコントロールソースと名前も教えてください。
ここも特に何も設定はしてません

>>あと、メインフォームのデザインビューのスクリーンショットをアップロードしてください。
>>投稿欄の下の「画像アップロード」ボタンをクリックするとアップロードできます。
>>下記の画像の赤丸で囲んだボタンです。
ごめんなさい。。。。。;;プログラム自体が会社です。。。;;
見ていただきたいのですが。。。。あたしの手元に プリントアウトした画像が一枚あるだけです。。。;;

宜しくお願い致します

7

レコードソースは、フォームのデザインビューでプロパティの「データ」タブの一番上にあります。
既定のビューは、フォームのデザインビューでプロパティの「書式」タブの2番目です。
これらの設定を教えてください。

メインフォーム ”MSTmain実査実績一覧” です。。。は完全なユーザーフォームで、、、それにテキストボックス、、、あるいはコンボボックス     それとチェックボックスが48個設定してあります。。。^^

Accessにユーザーフォームというものはありません。正確な用語を理解していないと、掲示板でのやりとりは難しいです。

メインフォームのレコードソースに”MSTmain実査実績一覧”というテーブル名か設定されているということですか。
それともメインフォームの名前が”MSTmain実査実績一覧”ということですか。

チェックボックスのコントロールソースの設定はどうなってますか。
*コントロールソース**はデザインビューでチェックボックスを選択して、プロパティの「データ」タブの一番上にあります。
チェックボックスの名前も教えてください。

サブフォームには項目”ID(主キー)”年月日””担当者”あとは都道府県のチェックボックスが48個 並んでいる状態です。

このチェックボックスのコントロールソースと名前も教えてください。

あと、メインフォームのデザインビューのスクリーンショットをアップロードしてください。
投稿欄の下の「画像アップロード」ボタンをクリックするとアップロードできます。
下記の画像の赤丸で囲んだボタンです。
画像1

6
rinrin 2024/02/17 (土) 20:04:18 b4dc9@c7f00

hatenaさん。。。連絡ありがとうございますーー

>>%%{fg:silver}%%{fg:silver}まず、メインフォームのレコードソースの設定を教えてください。
この質問の意味が分かりません。。。。。。。;;
ごめんなさい。。。。::特になにも設定してるわけではありません。;;

>>¥空欄なら空欄と、テーブル名かクエリ名が設定されているなら、その名前を提示してください。
??テーブルかクエリならそのフィールド名を提示してください。
メインフォーム ”MSTmain実査実績一覧” です。。。は完全なユーザーフォームで、、、それにテキストボックス、、、あるいはコンボボックス     それとチェックボックスが48個設定してあります。。。^^

>>サブフォームのレコードソースの設定を教えてください。
テーブルのMST実査実績一覧をサブフォームとして、、、データベースのような、、、一覧表を作ってあります。。。^^
サブフォームには項目”ID(主キー)”年月日””担当者”あとは都道府県のチェックボックスが48個 並んでいる状態です。
ホントはクエリを使って、→のようなデーターベースを構築したいのですが、、、、名前は ”SubMAIN実査実績一覧”
MST実査実績一覧を軸に、3つのテーブルを"ID"で、リレーションシップでつなげてます。。。^^
それだとうまく抽出ができないから、、、;;
あきらめて”MST実査実績一覧”だけ単体でテーブルのまま使ってます。。。^^

>>テーブル名またはクエリ名
テーブルは4つ
☆MST実査実績一覧
     ”ID”(主キー)、”年月日”(日付型)、”担当者”(文”字列型)、”都道府県”(整数型)、都道府県(チェックボックス型)が48個並んでいます。。。^^、それと役職(整数型)と交通手段(整数型)があります。。。。^^
☆MST都道府県
     ”ID”、”都道府県”
☆MST役職名
     ”ID”、”役職名”
☆駅から目的地までの交通手段
     ”ID””交通手段”
    IDは全て 整数型(INTEGER)です。基づくレコードは文字列型(STRING)

>>サブフォームの「既定のビュー」の設定も教えてください。%%
これもわかんないです。。。。。;;既定のビューなんて設定してないです。。。;;

とりあえず上記を回答ください。%%
何卒ご指導よろしくお願いいたします

5
hatena 2024/02/17 (土) 17:26:30 修正

ちょっとその説明では状況を読み取れません。
ひとつずつ確認していきますので、回答してください。

まず、メインフォームのレコードソースの設定を教えてください。
空欄なら空欄と、テーブル名かクエリ名が設定されているなら、その名前を提示してください。
テーブルかクエリならそのフィールド名を提示してください。

サブフォームのレコードソースの設定を教えてください。
テーブル名またはクエリ名
そのフィールド名

サブフォームの「既定のビュー」の設定も教えてください。

とりあえず上記を回答ください。

4
rinrin 2024/02/17 (土) 16:08:23 b4dc9@c7f00

Excelだと要領的に厳しい状態なんです。。。
ACCESSなら メインフォームの中にサブフォームを設定して
いろいろなプログラム構築した経験があるから いいかな?
とおもって。。。

ACCESSあきらめて、、EXCELでやるしかないのかな???

3
りんご 2024/02/17 (土) 12:12:05 935bc@0e907

Excelで頑張るのはどうでしょう?

>お怒り、見捨てないで、

例えば、刺身包丁を使って木材加工しようとしていたら、難しいよね、と思いませんか?

2
rinrin 2024/02/17 (土) 11:03:29 b4dc9@c7f00

メインフォームに日付の開始日(テキストボックス 日付)と終了日(テキストボックス 日付)を設けています。その他”ID(コンボボックス Integer)”””社員名(コンボボックス String) 後は都道府県(チェックボックス YesNo型)で48都道府県が並んでいる状態です。それとコマンドボタンを4つ置いてます。(新規、編集、クリア、統計MAP)があります。そこにサブフォーム(一覧表のフォームです。。。)も表示させてあります。”
一つのMSTとなるフォームがあって、全てIDでリレーションシップでテーブルを最初に(クエリではない)つなげています。
主Keyは社員(勝手に番号[ID]を付けています。)です。サブフォームには社員名単位でチェックボックスが48個 都道府県ごとに並んでいます。
最終的には コマンドボタンの”統計MAP”ボタンで どの社員さんが、どこの都道府県を訪れているか 分布図が表示できるものを作りたいと思っています。
お力を貸し願えましょうか。何卒宜しくお願いします

'''Private Sub Cmd新規登録_Click()
MyForms=Forms!MAINMST実査実績!Chk実査flg

'ADO接続開始
Dim Cn ADODB.Connection
Dim Rs ADODB.Recordset

Set Cn = CurrentProject.Connection
Set Rs = New ADODB.Recordset

Rs.Open "MST実査実績一覧",Cn,adOpenkeyset,adLockOptimistic

Dim a,b,c,d,e,f,g As Variant
a=""
a=Nz(Dlookup("ID","MST実査実績一覧","実査住所='" &
Me.Txt実査住所.Value & "'),"" AND "& "担当者='"

& Me.Cmb実査担当者.Value & "'"),"")

a=MsgBox("登録しますか?",vbYesNo + vbDefaultButton1)
If a = vbYes Then

'登録
Rs.AddNew
'上記の個所で実行時エラー”テーブルが設定されたレコードが必要なので、レコードの追加や変更ができません。と表示されてしまいます。
Rs!年月日 = Me.Txt実査実施日
Rs!担当者 = Me.Cmb実査担当者
'チェックボックス
Rs!北海道=Me.Chk北海道.Value
Rs!青森=Me.Chk青森.Value
' ⇃
' ⇃
' ⇃
Rs!沖縄=Me.Chk沖縄.Value
Me.SugMST実査実績一覧.Form.Filter=""
Me.SubMST実査実績一覧.Form.FilterOn=False
Rs.Update

a=Dmax("ID","MST実査実績一覧")
Me.Cmb実査ID.Value=a
b=Dlookup("年月日","MST実査実績一覧","ID=" & a)
Me.Txt実査実施日.Value=b
Msgbox("登録完了しました。"

'ADOを切断
Cn.Close
Set Cn=Nothing
End Sub'''
お怒りなことは重々承知の上、再度投稿させていただきます。
何卒 何卒ご指導よろしくお願いいたします。。。見捨てないでください。。。;;

3

非公式なので、事前通告なしに使えなくなる可能性はありますね。

公式のものなら、使えなくなる前に事前通告はあるはずです。

その辺をどう考えるか次第ですね。

2

かつては ISAMStats ってのが非公式で存在してたけど、途中で無くされちゃいましたね

1

そもそも、csvもexcelもデータベースとして扱っているはずなのに、
Data Source=を使用しないのは、なぜなのでしょうか?

Data SourceはADODB.Connectionの必須プロパティになりますので
使用していない」 のではなく
タークンさんの記述方法では 「明示していない」 というのが正確な表現になります

Sub Sample1()
    Dim adoCn As ADODB.Connection
    Dim incantation As String
    Dim testDir As String
    
    testDir = CreateObject("WScript.Shell").SpecialFolders("Desktop") & "\VBA\hoge\hogehoge"
    
    Set adoCn = New ADODB.Connection
    adoCn.Provider = "Microsoft.ACE.OLEDB.12.0"
    adoCn.Properties("Extended Properties") = "Text;HDR=No"
    adoCn.Open testDir
    incantation = adoCn.ConnectionString
    adoCn.Close
    
    adoCn.Open incantation
    Debug.Print adoCn.State
    adoCn.Close
    Set adoCn = Nothing
    
    MsgBox "接続文字列中のData Sourceの位置は " & _
               InStr(1, incantation, "Data Source", vbTextCompare)
End Sub

  
ちなみに CSVをレコードセットとしてOpenするのが目的でしたら、以下のような簡略表記も可能です

Sub Sample2()
    Dim adoRs As ADODB.Recordset
    Dim testDir As String
    Dim strSQL As String
    
    testDir = CreateObject("WScript.Shell").SpecialFolders("Desktop") & "\VBA\hoge\hogehoge"
    strSQL = "SELECT * FROM [Text;DATABASE=" & testDir & ";HDR=NO;].holiday.csv;"
    
    Set adoRs = CurrentProject.Connection.Execute(strSQL)
    If Not adoRs.EOF Then MsgBox "CSVの列値: " & adoRs.Collect(0)
    adoRs.Close
    Set adoRs = Nothing
End Sub