上記ご教示ください。
まずは添付写真をご覧ください。

「対象の部署CDとパスワードを入れてボタンを押下し、それが裏のマスタの値と一致した場合にはフォーム3へ進む(不一致の場合はエラーが出る)というマクロを組みたいです。

後任がメンテし易いようにVBAではなく、マクロビルダでマクロを組もうと思っていますが、どのようにやればよいかをご教示ください。よろしくお願いします。

「Access If構文をボタンに設定する」の質問画像

このQ&Aに関連する最新のQ&A

A 回答 (1件)

マクロはネットで検索してもあまり出てこないので


メンテし易いようにと考えるならVBAの方がいいと思います。

結局マクロでもVBAでも構文は同じになります。
https://support.office.com/ja-jp/article/If-Then …

If DCount(フィールド名,テーブル名,条件) > 0 Then
フォーム3を開く
Else
メッセージの表示
End If
    • good
    • 1
この回答へのお礼

ありがとうございました。勉強になりました

お礼日時:2017/04/21 00:23

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

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

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

Qaccess 2000のマクロビルダで困っています

access2000のマクロビルダでアドバイスお願いします。


とあるフォームで 「a」というテキストボックスがあります。

条件検索用のボックス「A」を設けて、「検索」というコマンドボタンを作成しました。

このボタンを マウスボタンクリックした時に、マクロビルダで、条件を設定し 抽出するというものです。

これは希望通りに抽出できたのですが、

次に、同じフォームで「b」というテキストボックスを設けて、条件検索用ボックスで「B」を作成しましたが、

これを、「検索」という一つのコマンドボタンで「a」と「b」2つの検索条件を満たす、リストをマクロビルダで作成したいのですが、

やり方がどう頑張っても分かりません。

できれば、マクロビルダで、もし無理なら、VBAでアドバイスを頂ければ大変ありがたいです。

どうかよろしくお願いします。

Aベストアンサー

マクロビルダの画面に「And」というボタンがありますね。

[a] like "*" & Forms![Sample]![A] & "*"
[b] like "*" & Forms![Sample]![B] & "*"

条件を同時に満たす場合は
この2つの条件を And でつなぎます。
(例:30歳以上の女性 限定)

どちらか一方を満たせば良いなら 「Or」ですね。
(例:6歳未満 または 60歳以上 は無料)

Q「マクロを組む」の意味は?

「マクロを組む」ってよく言いますが、具体的にどんな事ですか?
Excelで関数を用いて自動計算させる、ということも「マクロを組む」の内に入るのですか?
初歩的なことでスイマセンが教えて下さい。

Aベストアンサー

マクロは、複数の手順が必要な処理を自動化することです。
セルに関数を入れて連携させて答えを出すのとは多少異なります。
また、自分用の関数を作ることも可能です。

マクロを使うと、大抵の処理を行えます。
表を別のシートにコピーする。
表を印刷する。
表からグラフを作る。
などという処理も1クリックで行えます。

Q2つのファイルで大分類の項目が部分一致し小分類の項目が完全一致の数を出したい

1つ目のエクセルファイルに

列・・・大分類の項目(例:テレビ修理)
行・・・小分類の項目(例:ねじ)

2つ目のエクセルファイルに
列・・・小分類や単価等の項目名
行・・・大分類の項目(例:テレビ修理(基本))や小分類の項目(例:ねじ)、単価(¥50)と横に並んでいます。

それで、

「テレビ修理」・・・1つ目の大分類と2つ目の大分類の項目と一部一致している。
「小分類の項目」・・・1つ目の小分類と2つ目の小分類の名前は完全一致
していたら「単価」(¥50)とセルに出したいのですが、関数の組み合わせ方がわかりません。

手入力しかないのでしょうか?知恵を貸してください。お願いします。

Aベストアンサー

「1つめのエクセルファイルの空欄を埋めたい」
ということでしょうかね?

1つめのファイルの表はこういう雰囲気なのでしょうか?

     A      B       C        D
10       テレビ修理 ビデオ修理 ラジオ修理  …
11 ネジA
12 ナットA
13   …


2つめのファイルの表はこういう雰囲気なのでしょうか?

    A      B       C        D
1        ネジA    ナットA   …
2 テレビ修理 50      30        
3 ビデオ修理 50      30       
4 ラジオ修理 50       30
5   …

行と列が入れ替わってるだけならば
関数でも全く難しくないですね
何せ検索する場所を変えるだけですから

2つめのファイルの名を仮に「ファイル2」とします
双方のファイルが開いている状態で
1つめのファイルのB11に
=OFFSET([ファイル2.xls]Sheet1!$A$1,LOOKUP(1,{1},MATCH(B$10,[ファイル2.xls]Sheet1!$A:$A,0))-1,LOOKUP(1,{1},MATCH($A11,[ファイル2.xls]Sheet1!$1:$1,0))-1,1,1)

と入れてみてください
問題ないはずです

その他の説明については
やっていることがほぼ同じですので
http://oshiete.coneco.net/kotaeru.php3?q=2570100
http://oshiete.coneco.net/kotaeru.php3?q=2569996
をご参照ください

なお双方ともファイルが開いていない状態で更新をかけたり
式を確定されるとエラーになりますのでご注意ください

「1つめのエクセルファイルの空欄を埋めたい」
ということでしょうかね?

1つめのファイルの表はこういう雰囲気なのでしょうか?

     A      B       C        D
10       テレビ修理 ビデオ修理 ラジオ修理  …
11 ネジA
12 ナットA
13   …


2つめのファイルの表はこういう雰囲気なのでしょうか?

    A      B       C        D
1        ネジA    ナットA   …
2 テ...続きを読む

Qエクセルで簡単なマクロを組んだのですが…。

連続印刷を行う簡単なマクロを組んだのですが、指定行を変更しても1行目からまた印刷されてしまうのですがどうしてでしょうか?ちなみにこんなマクロです。
'リストを1行1枚の伝票形式で印刷するマクロ
Sub 個票発行()
Worksheets("個票").Activate
Dim 個票カウンタ As Integer
For 個票カウンタ = 1 To _
Application.WorksheetFunction.CountA(Worksheets("一覧表").Range("A1:A88"))
Range("B1") = 個票カウンタ
印刷
Next 個票カウンタ

End Sub

よろしくお願いいたします。マクロ初心者です。

Aベストアンサー

#5です。

えーと、話が噛みあってませんが、

For 個票カウンタ = 1 To _
 Application.WorksheetFunction.CountA(Worksheets("一覧表").Range("A1:A88"))
 Range("B1") = 個票カウンタ
 印刷
Next 個票カウンタ

上記の、Range("A1:A88") を Range("A30:A88") したのに「1行目からまた印刷されてしまう」って事を言っているのならば当然なんですが、、、

Application.WorksheetFunction.CountA(Worksheets("一覧表").Range("A1:A88")) は A1:A88 に入っているデータの個数を数えているだけです。仮にA1:A88にデータが全部入っているなら「88」になります。

For i = xx To yy 文 は xx から yy までの数字を変数 i に一つずつ代入する構文です。上記の例では変数「個票カウンタ」に1~88を一つずつ代入し、それを Range("B1") に代入していますので、

For 個票カウンタ = 1 To 88
  Range("B1") = 個票カウンタ
  印刷
Next 個票カウンタ

この文は Range("B1") に 1~88までを順番に代入してSub「印刷」を呼んでいる訳です。

Range("A1:A88") を Range("A30:A88") にしたとしても A1:A88に入っているデータの個数「88」がA30:A88入っているデータの個数「59」になるだけなので、1~59までを Range("B1") に代入してSub「印刷」を呼ぶ事になるだけです。つまり For 個票カウンタ = 1 To xx としている以上、必ず 1 から始まります。

このままの文で、30行目から印刷したいなら Range("A1:A88")のままで For 個票カウント = 1 を = 30 にすれば30行目から印刷するハズです。

ちなみに下記は印刷したい範囲を実行中に指定するサンプルです。
実行するとダイアログが出ますので、マウスで一覧表シートの A30:A32 等を選択してからOKすると 30~32を個票シートのB1に代入して印刷します。
想像だけで書いているので、上手く動くかは解かりません。
試すならテスト用ブックで。

Sub Test()
Dim r As Range, i As Long
Dim stRow As Long, edRow As Long
On Error GoTo ER:
 Worksheets("一覧表").Activate
 Set r = Application.InputBox _
     ("マウスで印刷したい範囲のA列を選択して下さい。", _
      "印刷行指定", Type:=8)
 stRow = r.Row : edRow = stRow + r.Rows.Count - 1
 With Worksheets("個票")
  .Activate
  .PageSetup.PrintArea = "$A$9:$J$27"
   For i = stRow To edRow
    .Range("B1") = i
    .PrintOut
   Next i
 End With
ER:
End Sub

#5です。

えーと、話が噛みあってませんが、

For 個票カウンタ = 1 To _
 Application.WorksheetFunction.CountA(Worksheets("一覧表").Range("A1:A88"))
 Range("B1") = 個票カウンタ
 印刷
Next 個票カウンタ

上記の、Range("A1:A88") を Range("A30:A88") したのに「1行目からまた印刷されてしまう」って事を言っているのならば当然なんですが、、、

Application.WorksheetFunction.CountA(Worksheets("一覧表").Range("A1:A88")) は A1:A88 に入っているデータの個数を数えているだけです...続きを読む

Qコマンドボタンを押すと、ユーザーフォームが表示されるマクロを組んでおり

コマンドボタンを押すと、ユーザーフォームが表示されるマクロを組んでおります。

このとき、ユーザーフォームの表示位置をあるセル(例えばE12)の隣にしたいのですが、

下記のマクロでは、画面をスクロールした場合に対応できません。

恐れ入りますが、ご教示いただけるとたすかります。。

Private Sub UserForm_Initialize()
Me.StartUpPosition = 0
Me.Top = Application.Top + 180
Me.Left = Application.Left + 100

Me.Height = 80
Me.Width = 100
End Sub

投稿日時 - 2010-03-11 10:09:05

Aベストアンサー

>セル(例えばE12)の隣にしたいのですが
Private Sub UserForm_Initialize()
  With Me
    .StartUpPosition = 0
    .Left = ActiveWindow.PointsToScreenPixelsX((Range("E12").Left) * 96 / 72) * (ActiveWindow.Zoom / 100) * 72 / 96
    .Top = ActiveWindow.PointsToScreenPixelsY(Range("E12").Top * 96 / 72) * (ActiveWindow.Zoom / 100) * 72 / 96
    .Height = 80
    .Width = 100
  End With
End Sub


人気Q&Aランキング

おすすめ情報