Access フォームのテキストボックスに入力した年月でテーブルのフィールド名を検索し、レコードを表示させることはできるのでしょうか?
方法があればご教授ください。
よろしくお願いします(❁ᴗ͈ˬᴗ͈)

A 回答 (3件)

>Dim myDB As Databaseでコンパイルエラーで『ユーザ定義型は定義されていません。

』のエラーが出るのですがどうしたら良いでしょうか…?

Dim myDB As Database → Dim myDB As DAO.Database
Dim myTB As TableDef → Dim myTB As DAO.TableDef
このように DAO. を付けてみたらどうですか?

それでもエラーが出るようでしたら、Accessのバージョンと、VBAエディタ のツールにある「参照設定」で
チェックの入っている項目を教えてください。

Access2000か2002でしたら、参照設定で Microsoft DAO 3.6 Object Library にチェックが入っていないのかも。。。。
    • good
    • 0
この回答へのお礼

助かりました

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

お礼日時:2017/05/24 18:29

フィールド名を検索する部分ですが、以下の方法ではどうでしょうか?


レコードの表示に関しては、どのように表示させたいのか、もう少し具体的に書いていただけると
回答も出やすいのではと思います。

例えばテーブルAに日付型のフィールドが1しかない場合はそのフィールド名を見つけ、
そのフィールド名の中からフォームで指定された日付のレコードを抽出してはどうでしょうか。

Dim myDB As Database
Dim myTB As TableDef
Dim TBcnt As Integer
Dim I As Integer

Set myDB = CurrentDb
Set myTB = myDB.TableDefs!テーブルA

'テーブルのフィールド数も変動すると仮定して、フィールド数を取得
TBcnt = myTB.Fields.Count

For I = 0 To TBcnt - 1 Step 1

  'フィールドの型が日付型だったらフィールド名を取得
If myTB.Fields(I).Type = dbDate Then
Debug.Print myTB.Fields(I).Name
End
End If

Next


テーブルAに日付型のフィールドが複数ある場合はフォームで指定された日付を探すしかないと思います。

Dim myDB As Database
Dim myRS As Recordset
Dim TBcnt As Integer
Dim myDATE As Date
Dim I As Integer

Set myDB = CurrentDb
Set myRS = myDB.OpenRecordset("テーブルA", dbOpenTable)

'フォームから日付を取得
myDATE = Me.Txt日付
TBcnt = myRS.Fields.Count

myRS.MoveFirst
Do Until myRS.EOF
For I = 1 To TBcnt - 1 Step 1
If myRS(I) = myDATE Then
Debug.Print myRS.Fields(I).Name
End If
Next
myRS.MoveNext
Loop
    • good
    • 0
この回答へのお礼

すみません。
Dim myDB As Databaseでコンパイルエラーで『ユーザ定義型は定義されていません。』のエラーが出るのですがどうしたら良いでしょうか…?

お礼日時:2017/05/18 14:41

質問の意味がちょっと分からないのですが、


フォームAに例えば 「Txt年月」という非連結のテキストボックスがあり、
テーブルAには、どこかのフィールドに年月を格納している場所があるということですか?

そして、Txt年月に入れた値を元にテーブルAのフィールド名を探して、
そのフィールド名とTxt年月の値とマッチするテーブルAのレコード全てを
抽出するということでしょうか?
    • good
    • 0
この回答へのお礼

そうです!
わかりにくくてすみません(>人<;)

お礼日時:2017/05/17 18:44

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aと関連する良く見られている質問

QACCESS vbaでレポート名の変更をプログラムでできるんでしょうか?

ACCESS vbaでレポート名の変更をプログラムでできるんでしょうか?

Aベストアンサー

DoCmd.rename "Old Report Name", acReport, "New Report Name"
で行けるんじゃないかな? 
https://msdn.microsoft.com/en-us/library/office/ff823209.aspx
docmdをvbaと呼ぶかどうかは、よくわからないけど、
そういう意味でのVBAなら、ADOXでも可能だと思う。

Qaccess別のテーブルを参照してテキストボックスに値を表示、編集したい

お世話になっております。
フォームで入力したテーブルの情報を別フォームのテキストボックスに表示したいのですが
表示した情報はまれに変わる事もあるため、編集も出来るようにしたいと考えております。

そのままテーブルのフィールドを追加してしまうと、元のテーブルが変更されてしまうため
DlookUp関数をコントロールソースで表示させてみましたが「このコントロールは式(略)に連結しているため、編集できません」というエラーがでて編集ができませんでした。

=DLookUp("[支払サイト]","[Tお客様情報]","[メンテNO]=" & [Forms]![F工事情報入力]![メンテNO])
既定値にそのまま入力するとうまく反映されませんでした。

なにか他にこうしたらいい等ありましたらアドバイスください。よろしくお願いします。

Aベストアンサー

コントロールソースは設定せずにF工事情報入力のメンテNOが変わったらマクロの値の代入を使って
DLookUp("[支払サイト]","[Tお客様情報]","[メンテNO]=" & [Forms]![F工事情報入力]![メンテNO])
を代入する。

QAccess 新規入力画面にするコード DoCmd.GoToRecord,,acNewRec を入力

Access
新規入力画面にするコード
DoCmd.GoToRecord,,acNewRec
を入力後新規ホームを開くと
一番上の顧客CDに0が表示されます。
非表示または(新規)というふうに変更するのはどうやればいいのか教えてください。

Aベストアンサー

顧客CDがテーブル上では数値型で、テーブルをデザインビューで開いた時に
規定値に「0」が入っていませんか。

QAccessを使用して引継ぎ

Access初心者です。
よろしくお願いいたします。

Accessを使用して引継ぎをしたいと考えておりますがどのように作成したらよいか分からず悩んでおります。
アドバイスをよろしくお願いいたします。

まずメニュー画面があり登録画面と確認画面を作ります。
登録画面の内容は
日付、表題、内容の三項です。

次に悩んでいる確認画面です。
イメージは添付の画像のような形を考えております。

まず左側に登録してある日付を一覧で表示し、見たい内容の日付を選択すると右側に内容の一覧が表形式で表示されるようにしたいです。

以上のようなことを行うにはどのようにすればよいでしょうか?
※左側はテキストボックスを使用して…など

ざっくりとした質問ですみませんがよろしくお願いいたします。

Aベストアンサー

メインとなるフォームの中にサブフォームを2つ(日付一覧と内容一覧)作ってみてはどうでしょう。
ただ、登録日付が順次増える等を考えると、イメージ画像のような日付ボタンでは難しいと思いますので、
若干イメージとは異なりますが日付一覧もリストで表示するようにしてはいかがでしょうか?

具体的には、登録テーブルを作成します。内容は日付(日付型)、表題(短いテキスト型)、内容(長いテキスト型)の3項目と仮定します。
「登録テーブル」を基にクエリを2つ作ります。
Q_クエリ1:テーブルの日付のみを表示させ、日付をグループ化しておきます(同一日付で、複数の内容がある場合もあるので)
Q_クエリ2:テーブルの3つの内容を表示させるようにします

次にサブフォーム(イメージ画像の左右2つのフォーム)を作ります。
F_サブ1:帳票形式のフォームを作り、テキストボックス(Tx_日付とします)を1つ配置し、その横にボタンを1つ配置します(選択ボタンとします)。
     ボタンを配置するとウイザードが動きますがキャンセルしてボタンだけにしておいてください
     レコードソースにQ_クエリ1を指定し、Tx_日付のコントロールソースは「日付」にします
F_サブ2:帳票形式のフォームを作り、テキストボックスを2つ配置します(Tx_表題、Tx_内容とします)
     レコードソースにQ_クエリ2を指定し、Tx_表題、Tx_内容のコントロールソースをそれぞれ「表題」、「内容」にします

メインとなるフォーム(F_フォームとします)を作成し、デザインツールからサブフォームを選んで、左右に2つ配置します。
ウイザードでは左側にはF_サブ1、右はF_サブ2を選択します。次の名前の指定では例えば左をサブフォーム1、右をサブフォーム2とします。

Q_クエリ2をデザインビューで開き、「日付」の下の抽出条件に [Forms]![F_フォーム]![サブフォーム1]![Tx_日付] と記述します。

F_サブ1に配置した「選択ボタン」のクリック時イベントでマクロビルダーを開き、以下のようにマクロを設定します
 ・オブジェクトの選択
    オブジェクトの種類:フォーム
    オブジェクト名:F_フォーム
 ・コントロールの移動
    コントロール名:サブフォーム2
 ・再クエリ
    コントロール名:空白のまま

これでメイン(F_フォーム)を開くと、左に日付が並んで表示されますので、
必要な日付の横にある選択ボタンをクリックすれば、右にその日付の表題と内容がリスト表示されます。

日付の横に配置したボタンの代わりに、フォームヘッダを表示させて、そこにボタンを1つ配置し、
そのボタンのマクロを上記と同様にすれば、1つのボタンで同じ動作をさせることが出来ます。
ただし、この場合は、一度日付を選択(クリック)して、フォームヘッダのボタンを押す必要があります。

メインとなるフォームの中にサブフォームを2つ(日付一覧と内容一覧)作ってみてはどうでしょう。
ただ、登録日付が順次増える等を考えると、イメージ画像のような日付ボタンでは難しいと思いますので、
若干イメージとは異なりますが日付一覧もリストで表示するようにしてはいかがでしょうか?

具体的には、登録テーブルを作成します。内容は日付(日付型)、表題(短いテキスト型)、内容(長いテキスト型)の3項目と仮定します。
「登録テーブル」を基にクエリを2つ作ります。
Q_クエリ1:テーブルの日付の...続きを読む

QVBA 3文字ずつ、配列に入れたい

お世話になります。

dim atai as variant
atai="1234567890"
という文字列があります。

これを

hairetu[0]=123
hairetu[1]=456
hairetu[2]=789
hairetu[3]=0

という風に、3文字単位で配列に格納したいのですが、どのように
VBAを作成すればよいでしょうか?

よろしくお願いいたします。

Aベストアンサー

例えば、

Dim atai As Variant
Dim hairetu() As Variant
Dim hairetu_size, iIndex As Integer ' 配列のサイズ, インデックス

atai = "1234567890"
' 配列のサイズを、ataiの文字数÷3 + 1で計算
hairetu_size = Int(Len(atai) / 3 + 1)
' 配列の大きさを再設定
ReDim hairetu(hairetu_size)
' 0番から配列サイズ-1までループ
For iIndex = 0 To hairetu_size - 1
  ' 3文字ずつ抜き出し
  hairetu(iIndex) = Mid(atai, 1 + iIndex * 3, 3)
Next iIndex

Q”#REF!” の表示が出ないようにする良い方法は。。

次のような手順で作業を行いました。

①Excelを開き、セルを3×3の範囲でドラッグして選択してコピー。
②Wordを開き、「元の書式を保持」して貼り付け。
③貼り付けた表の、左上と左中に、数値を入力。
④③をドラッグして選択してコピーをする。(上から2行目まで、3×2の範囲でコピー)
⑤新しく開いたExcelに、「形式を選択して貼り付け」→「リンク貼り付け」→「テキスト」で貼り付け。

①~⑤をすると、Wordの数値を変更すると、Excelの数値もちゃんと変わってくれました。
ここまでは、思った通りです。
ところが次のことをすると、エラーになります。

①ExcelとWordを両方閉じた後、まずWordを開き、次にExcelを開く。
②Excelに「セキュリティの警告 リンクの自動更新が無効にされました ”コンテンツの有効化ボタン”」と出る。
③ ”コンテンツの有効化ボタン” を押す。
④するとExcelのセル内に ”#REF!” と表示が出てしまう。

”#REF!” の表示が出ないように対処する良い方法を教えて下さい。

次のような手順で作業を行いました。

①Excelを開き、セルを3×3の範囲でドラッグして選択してコピー。
②Wordを開き、「元の書式を保持」して貼り付け。
③貼り付けた表の、左上と左中に、数値を入力。
④③をドラッグして選択してコピーをする。(上から2行目まで、3×2の範囲でコピー)
⑤新しく開いたExcelに、「形式を選択して貼り付け」→「リンク貼り付け」→「テキスト」で貼り付け。

①~⑤をすると、Wordの数値を変更すると、Excelの数値もちゃんと変わってくれました。
こ...続きを読む

Aベストアンサー

ご参照、
https://kokodane.com/kan22.htm

Q【ACCESS】フォーム名/コントロール名を文字列型変数で指定するには

バージョン:Access2002

フォーム「frm01」にテキストボックス「tb01」が作ってある場合、
Forms.frm01.tb01.Value="あいう"
とすれば、フォームもコントロールも指定できるのですが、
Dim strTxt As String
strTxt = "tb01"
Forms.frm01.strTxt.Value="あいう"
だと、文字列型変数"strTxt"が展開されないのでフォーム「frm01」のコントロール「strTxt」を探してしまいエラーになってしまいます。

文字列型変数でフォームやコントロールを指定するには、どのようにすればよいのでしょうか?

Aベストアンサー

フォームの場合
 Forms(strFrm)

フォームのコントロールの場合
 Forms(strFrm).Controls(strTxt)


これでも参照できますが、普通ここまで省略しませんね。
 Forms(strFrm)(strTxt)

あとで見たとき、訳がわからなくなりそう。

Q元ある式にSUMで修正を加えたのですが、エラーが出てしまいました。何が良くなかったのでしょうか?

Wordに、Excelのワークシートを挿入しました。
それを、AとBの2組作りました。
そして、Aで出た計算結果をaとし、Bで出た計算結果をbとします。
最後に、a+bの計算結果をBに表示させるようにしました。

最初、a+bを求める式を、次のように設定し、上手く機能しました。

Aで使った式
=SUM(G5:G33)

Bで使った式
=SUM(G4:G8)+'[C Users taka Desktop パソコンで作成する簿記 帳簿 修繕積立金(1).docx の ワークシート]Sheet1'!$G$34

このまま終わっても良かったのですが、Aの計算結果は、Aの表示上では実際に必要としない部分なので、それをBに組み込んでしまおうと思い、次のように式を修正しました。

=SUM(G4:G8)+'[C Users taka Desktop パソコンで作成する簿記 帳簿 修繕積立金(1).docx の ワークシート]Sheet1'!SUM(G5:G33)

ところがこれで、エラーが出てしまいました。
何が良くなかったのでしょうか?

Wordに、Excelのワークシートを挿入しました。
それを、AとBの2組作りました。
そして、Aで出た計算結果をaとし、Bで出た計算結果をbとします。
最後に、a+bの計算結果をBに表示させるようにしました。

最初、a+bを求める式を、次のように設定し、上手く機能しました。

Aで使った式
=SUM(G5:G33)

Bで使った式
=SUM(G4:G8)+'[C Users taka Desktop パソコンで作成する簿記 帳簿 修繕積立金(1).docx の ワークシート]Sheet1'!$G$34

このまま終わっても良かったのですが、...続きを読む

Aベストアンサー

修正したものはSUM関数の使い方が間違っているために、エラーになるのです。
 =SUM(範囲)
なのですから、別ブックであっても同じことです。
 =SUM(G5:G33)
のG5:G33の部分を別ブックにするだけですね。
 =SUM(G4:G8)+SUM('[C Users taka Desktop パソコンで作成する簿記 帳簿 修繕積立金(1).docx の ワークシート]Sheet1'!G5:G33)

他のブックのセル範囲への外部参照 (リンク) を作成する
https://support.office.com/ja-jp/article/%E4%BB%96%E3%81%AE%E3%83%96%E3%83%83%E3%82%AF%E3%81%AE%E3%82%BB%E3%83%AB%E7%AF%84%E5%9B%B2%E3%81%B8%E3%81%AE%E5%A4%96%E9%83%A8%E5%8F%82%E7%85%A7-%E3%83%AA%E3%83%B3%E3%82%AF-%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B-c98d1803-dd75-4668-ac6a-d7cca2a9b95f

修正したものはSUM関数の使い方が間違っているために、エラーになるのです。
 =SUM(範囲)
なのですから、別ブックであっても同じことです。
 =SUM(G5:G33)
のG5:G33の部分を別ブックにするだけですね。
 =SUM(G4:G8)+SUM('[C Users taka Desktop パソコンで作成する簿記 帳簿 修繕積立金(1).docx の ワークシート]Sheet1'!G5:G33)

他のブックのセル範囲への外部参照 (リンク) を作成する
https://support.office.com/ja-jp/article/%E4%BB%96%E3%81%AE%E3%83%96%E3%83%83%E3%82%AF%E3%81%AE%E3%82%BB%E3%83%A...続きを読む

Qエクセルでのデータベス利用で

エクセルをデータベースのように使っています。
例えば住所録などのデータがたくさんあるもので私は、
=vlookup(a,**:**,2,FALSE)
という関数を使っています。
表の中にあるデータの中から、例えば読み仮名を入力するとそのデータが表示されるというものです。
ところが、この出てきたデータを文字列として使いたい場合、どの様に出力ないしは表示させればよいでしょうか?
(例)
<名前>   <データ1>  <データ2>
やまださん   黒       CUP

このようなデータが有った時、このVLOOKUP関数により検索として「やまださん」というワードで導かれたデータ【黒】が表示されたとします。
 この【黒】という漢字のデータのままコピペしたいんですが、ここのセルには「=vlookup(a,**:**,2,FALSE)」の関数の数式が入っていてデータをそのままコピペすることが出来ません(表示は「黒」ですが)。
説明が下手で申し訳ございませんが、この「黒」という漢字のままをコピペで使いたいのです。
具体的にはこのデータが外国語になっています。なので正直読めませんし、キーボードから打つことも難しいデータです。なのでせっかくの辞書のようなデータベースなのでそのまま出てきた外国語表記をコピペして使いたいのですが何か良い方法はありませんか?

宜しくお願い致します。

エクセルをデータベースのように使っています。
例えば住所録などのデータがたくさんあるもので私は、
=vlookup(a,**:**,2,FALSE)
という関数を使っています。
表の中にあるデータの中から、例えば読み仮名を入力するとそのデータが表示されるというものです。
ところが、この出てきたデータを文字列として使いたい場合、どの様に出力ないしは表示させればよいでしょうか?
(例)
<名前>   <データ1>  <データ2>
やまださん   黒       CUP

このようなデータが有った時、この...続きを読む

Aベストアンサー

(´・ω・`)
図を1つしか貼れないのは改善してほしいなあ

↓「リボン」をユーザー設定して「値」を追加する。

Qaccessのレポートで同じ名前の物を集計したい

よろしくお願いします。

メニュー名    │料理名    │材料   │材料数
モーニングセットA│ベーコンエッグ│卵    │5
モーニングセットA│ベーコンエッグ│バター  │8
モーニングセットA│ベーコンエッグ│ベーコン │4
モーニングセットA│トースト   │パン   │2
モーニングセットA│トースト   │バター  │1

上記のようなクエリがあります。(結果をわかりやすくするため実際の材料数とは異なります)
セットはいくつかのバリエーションでA、B、C…とあり、それぞれどれだけ材料が必要かを
レポートに表記したいと思っています。
ここで、モーニングセットにはバターが9必要という結果を出したいのですが、レポートウィザードで
メニュー名→料理名→材料
とグループ化し、集計のオプションで材料の「合計」にチェックを入れても、9という数字は導き出せませんでした。
レポートデザインで直接関数を作ればいいのかと思いますが、
「メニュー名」グループ内の同名の「材料」の「材料数」を集計する
という式の作り方がわかりません。
よい方法がありましたら、よろしくお願いします。

よろしくお願いします。

メニュー名    │料理名    │材料   │材料数
モーニングセットA│ベーコンエッグ│卵    │5
モーニングセットA│ベーコンエッグ│バター  │8
モーニングセットA│ベーコンエッグ│ベーコン │4
モーニングセットA│トースト   │パン   │2
モーニングセットA│トースト   │バター  │1

上記のようなクエリがあります。(結果をわかりやすくするため実際の材料数とは異なります)
セットはいくつかのバリエーションでA、B、C…とあり、それぞれどれだけ材料...続きを読む

Aベストアンサー

料理名が入っていると、料理ごとの材料になってしまいますので、料理名のコラムを削除すれば、メニュー名の材料の合計が出せます。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報