エクセルのユーザーフォームについて教えてください。
ユーザーフォームにてメニュー画面を作成しました。
ユーザーはメニューからの操作だけでエクセルシートを作成できるようなマクロをつくりました。
ユーザーフォームのコマンドボタンでEXCELを終了させることはできますか?
VBAの記述方法も教えてください。

A 回答 (1件)

「保存しないで終了」、「保存して終了」を書きました。


確認のメッセージ等を出せば使い分けられます。

'保存しないで終了
Private Sub CommandButton1_Click()
ThisWorkbook.Saved = True
Application.Quit
End Sub

'保存して終了
Private Sub CommandButton2_Click()
ThisWorkbook.Save
Application.Quit
End Sub
    • good
    • 0
この回答へのお礼

望み通りの動きになりました。
ご丁寧にありがとうございました。

お礼日時:2001/06/29 16:11

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

このQ&Aを見た人が検索しているワード

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

Qエクセル プルダウンの作り方

お世話になります。
エクセルでプルダウンの作り方を教えていただけませんでしょうか?
住所を▼のボタンでクリックしたら【北海道,青森,秋田,岩手・・・】などの選択ができるようにしたいのです。
宜しくお願いします。

Aベストアンサー

メニューから「データ」、「入力規則」、「設定」で「入力値の種類」を「リスト」を選択します。
そうすると「元の値」という表示がでますので、そこで前もって作っておいたリストの範囲を指定します。
多くないのでしたら、そのままそこにカンマで区切って入力しても出来ます。

Qエクセルのユーザーフォームのマクロ内でコマンドボタンを作成する

エクセルのユーザーフォームで、読み込んだときにコマンドボタンを作成する方法を教えてほしいです。

通常は、先にユーザーフォーム内でボタンを作成して、キャプション等を設定すると思うのですが、ボタンの数が決まっていないので、フォームを読み込むたびにボタンの数を変えたいと思っています。

似たようなことでは、先にボタンを作っておいて可視、不可視にしようかとも思ったのですが、あまりそれはやりたくないです。
よろしくお願いします。

環境は、XPでエクセルは2003です。

Aベストアンサー

追加したボタンをクリックしたときに動くモジュールはどうするつもりですか? 予め追加するボタンの分だけ
 Private Sub CommandButton*_Click()
 End Sub
を書いておいても、うまくいくかどうか? …です。もう試されましたか?

追加したボタンをクリックしたときに処理を動かすためには、他の回答者さまも述べているように、クラスモジュールを使う必要があるように思います。あまり得手ではないのですが試しにサンプルを書いてみました。

まずユーザーフォーム右下にコマンドボタン1つを配置します。ユーザフォームはボタンを追加するので、少し大きめに作っておくとよいです。このコマンドボタンは「ボタン追加」の意味があります

そして以下をユーザーフォームモジュールシートとユーザフォームシートにそれぞれ貼り付けます。後は
 Userform1.Show
でユーザフォームを呼び出して、ボタンをクリックしてみてください
(Office2003で確認済みです)

ユーザーフォームモジュール
Dim myCb() As Class1
Private Sub CommandButton1_Click()
Dim ctrl As Control
Dim cnt As Integer
 For Each ctrl In UserForm1.Controls
  If TypeName(ctrl) = "CommandButton" Then
   cnt = cnt + 1
  End If
 Next
 With Me.Controls.Add("Forms.CommandButton.1")
  .Top = cnt * 40
  .Left = 20
  .Width = 80
  .Caption = .Name
 End With

Call UserForm_Initialize
End Sub

Private Sub UserForm_Initialize()
Dim cnt, i As Integer
For Each ctrl In UserForm1.Controls
If TypeName(ctrl) = "CommandButton" Then
cnt = cnt + 1
End If
Next
ReDim myCb(1 To cnt)
For i = 1 To cnt
Set myCb(i) = New Class1
Set myCb(i).opt = Me.Controls("CommandButton" & CStr(i))
Next i
End Sub

クラスモジュール(モジュール名:Class1)に貼り付け
Public WithEvents myCb As MSForms.CommandButton
Public Property Set opt(setcb As MSForms.CommandButton)
 Set myCb = setcb
End Property

Public Property Get opt() As MSForms.CommandButton

End Property

Sub myCb_Click()
 MsgBox myCb.Name & " がクリックされました"
End Sub

これを見て「わからん」なら可視、不可視で実現する方をお薦めしますが…

追加したボタンをクリックしたときに動くモジュールはどうするつもりですか? 予め追加するボタンの分だけ
 Private Sub CommandButton*_Click()
 End Sub
を書いておいても、うまくいくかどうか? …です。もう試されましたか?

追加したボタンをクリックしたときに処理を動かすためには、他の回答者さまも述べているように、クラスモジュールを使う必要があるように思います。あまり得手ではないのですが試しにサンプルを書いてみました。

まずユーザーフォーム右下にコマンドボタン1つを配置しま...続きを読む

Qエクセルでプルダウンメニューの作り方

  エクセルの画面で、よく三角形を逆さまにした形をクリックするといくつかメニューが出てき、どれかを選べるようになっていますが、その作り方を教えてください。
 会社で人事を担当していますが、三角形(プルダウンボタン)をクリックすると社員氏名一覧が表示され、そこから選択できるようにしたいのです。
 しばらく自力でいろいろやってみましたが、さっぱり見当がつかず、どうやればいいのか分かりませんでした。よろしくお願いします。

Aベストアンサー

こんばんは!
当方使用のExcel2003での一例です!

↓の画像のようにSheet2に名簿表を作成しておきます。
画像ではSheet2のA2セル以降を範囲指定 → 名前ボックスに仮に「名簿」と入力しOK
これで範囲指定したセルが「名簿」と名前定義されましたので、

Sheet1のリスト表示させたいセルを範囲指定 → メニュー → データ → 入力規則
→ リスト → 「元の値」の欄に
=名簿
としてOK

これでSheet1のセルをアクティブにすると右側に下向き▼が表示されますので、そこをクリック!
これで希望に近い形にならないでしょうか?
Excel2007の場合は↓のURLが参考になるかもしれません。

http://www.eurus.dti.ne.jp/~yoneyama/Excel2007/excel2007-ny_kis2.html

尚、同一Sheetに「名簿表」を作成する場合は名前定義する必要はなくて
「元の値」の右側の四角をクリックし、リスト表示したいセルをそのまま範囲指定すればOKです。

以上、お役に立てば良いのですが・・・m(_ _)m

こんばんは!
当方使用のExcel2003での一例です!

↓の画像のようにSheet2に名簿表を作成しておきます。
画像ではSheet2のA2セル以降を範囲指定 → 名前ボックスに仮に「名簿」と入力しOK
これで範囲指定したセルが「名簿」と名前定義されましたので、

Sheet1のリスト表示させたいセルを範囲指定 → メニュー → データ → 入力規則
→ リスト → 「元の値」の欄に
=名簿
としてOK

これでSheet1のセルをアクティブにすると右側に下向き▼が表示されますので、そこをクリック!
これで希望に近い形にならない...続きを読む

QEXCEL VBAのユーザーフォームのコマンドボタンでBSキーと同様の役割を持たせる方法について

すいません、EXCEL VBAで教えていただきたいことがあります。
EXCEL VBAでユーザーフォームを作る。
フォーム内にはTextBox1とCommandButton1を設置。
TextBox1に書き込んだ文字をドラッグ
→CommandButton1を押す
→ドラッグした文字を消去
という機能をコマンドボタンに持たせたいのですが
可能でしょうか。

下記のコードを作ってみたのですが、やはりこれだと一文字づつしか消せません。
よろしくお願いします。

Private Sub CommandButton1_Click()
Dim i As Integer
With Me.TextBox1
i = .SelStart
If i > 0 Then
.Text = Left(.Text, i - 1) & Mid(.Text, i + 1)
.SelStart = i - 1
End If
End With
TextBox1.SetFocus
End Sub

すいません、EXCEL VBAで教えていただきたいことがあります。
EXCEL VBAでユーザーフォームを作る。
フォーム内にはTextBox1とCommandButton1を設置。
TextBox1に書き込んだ文字をドラッグ
→CommandButton1を押す
→ドラッグした文字を消去
という機能をコマンドボタンに持たせたいのですが
可能でしょうか。

下記のコードを作ってみたのですが、やはりこれだと一文字づつしか消せません。
よろしくお願いします。

Private Sub CommandButton1_Click()
Dim i As Integer
With Me.TextBox1...続きを読む

Aベストアンサー

こんばんは。

> BSキーと同様の役割を持たせる方法

そのままんま、SendKeys でキー送信してみては? キー送信時の
フォーカスは事前に設定しておきます。

Private Sub CommandButton1_Click()
  TextBox1.SetFocus
  SendKeys "{BS}"
End Sub

Qエクセル(Excel) 納品書の作り方【画像修正版

昨日http://oshiete.goo.ne.jp/qa/7348426.htmlで質問させていただき、詳しくご回答いただき少し進んだのですが、状況が変わったので改めて質問させていただきます。

■エクセル(Excel)で納品書の作成をしています。
シート1に納品書、シート2に商品マスタ(一覧)を作っていて、シート2の一覧を反映させて
納品書に番号を打ち込むだけで、商品名・単価までが出るシステムを作りたいのですが、
昨日のご回答の中の「VLOOKUP」?を入れて、自分なりにマス目の数字を変えてやってみたのですが
反映されずN/?のようなエラーになってしまいます。

※画像が見にくかったのでシート<CENTER></CENTER>だけにしました。

1、上記のように、シート2との関連付けの係数を、写真の場合の数字で教えてください。

2、合計と、合計から20%を引いた数値を割り出す関数も、写真の数字で御願いします。

宜しくご教授お願い致します。

Aベストアンサー

こんばんは!
前回投稿した者です。

当方もかなり古い(人間も古い!なぁ~んちゃって!)Excel2003を使用しています。
↓の画像のようにSheet2にデータを作成しておきます。

#N/A というエラーは、「検索値」がない!ということですので
お示しの画像のB列にSheet2のA列にないデータを入力するとそういったエラーが表示されます。

画像のセル配置ですと
C4セルに
=IF($B4="","",VLOOKUP($B4,Sheet2!$A:$C,COLUMN(B1),0))
(「$」マークの位置に気を付けてください)
という数式を入れD4セルまでオートフィルでコピー!
そのまま最後の24行目までコピーしておきます。

F4セルには
=IF(COUNTBLANK(B4:E4),"",D4*E4)
という数式を入れ、F24までオートフィルでコピー!

これでB列に商品番号を入力すればSheet2のデータが反映され、
E列に数量を入力でF列に金額が表示されると思います。

最後に合計金額のF26セルは
=IF(COUNT(F4:F24),SUM(F4:F24),"")
手数料のF27セルは
=IF(F26="","",F26*0.2)

これで何とか形にならないでしょうか?

※ 振込金額の欄は不明ですので手を付けていません。

参考になりますかね?m(_ _)m

こんばんは!
前回投稿した者です。

当方もかなり古い(人間も古い!なぁ~んちゃって!)Excel2003を使用しています。
↓の画像のようにSheet2にデータを作成しておきます。

#N/A というエラーは、「検索値」がない!ということですので
お示しの画像のB列にSheet2のA列にないデータを入力するとそういったエラーが表示されます。

画像のセル配置ですと
C4セルに
=IF($B4="","",VLOOKUP($B4,Sheet2!$A:$C,COLUMN(B1),0))
(「$」マークの位置に気を付けてください)
という数式を入れD4セルまでオートフィルで...続きを読む

Qユーザーフォームのコマンドボタンをマクロで操作したい

Excel97でユーザーフォームを出しながらセルに入力できるようにしたいので、
http://www.ap.wakwak.com/~miko/Excel_Note/11-01_userform.htm#11-01-13
このサイトに書かれているように、ユーザーフォームにコマンドボタンを作成して、
ボタンのコードを
 Private Sub CommandButton1_Click()
  Application.GetOpenFilename
 End Sub
とし、「ファイルを開く」ダイアログを表示させてキャンセルするようにしたのですが、
この「コマンドボタンをクリックしてファイルを開くダイアログをキャンセルする」操作は
自動化できるのでしょうか?
パソコンに慣れていない人用に作っているものですので、できるだけ使う人の操作を
少なくしたいのです。

ブックを開いた時にユーザーフォームを出すところまではできたのですが、
ユーザーフォームのコマンドボタンを自動的にクリックしてダイアログを
キャンセルする方法がわかりません。
ご存知の方、どうぞよろしくご教授お願いいたします。

使用しているのは、
OS:Windows98SE
ソフト:Excel97
です。

Excel97でユーザーフォームを出しながらセルに入力できるようにしたいので、
http://www.ap.wakwak.com/~miko/Excel_Note/11-01_userform.htm#11-01-13
このサイトに書かれているように、ユーザーフォームにコマンドボタンを作成して、
ボタンのコードを
 Private Sub CommandButton1_Click()
  Application.GetOpenFilename
 End Sub
とし、「ファイルを開く」ダイアログを表示させてキャンセルするようにしたのですが、
この「コマンドボタンをクリックしてファイルを開くダイアログをキャンセルす...続きを読む

Aベストアンサー

>それはバグを使って解消できるのだそうです。

「モードレス」のフォームを使いたいのでしょうか。

しかしこういう裏ワザ的やり方はあまり感心しませんね。
「たまたま動いている」とでもいえばいいのでしょうか。
Excel97では「モーダル」になるのが仕様です。
その仕様の範囲内で制作するのがまっとうなやり方だと思いますよ。

モードレスフォームを使わなければ処理できないという、
「のっぴきならない事情」でもあるのなら仕方ないですが、
たぶん、こんな手法を使わなくても解決できる他の方法があるはずです。

たとえばセルの値を変更したいのなら、フォームにテキストボックスをつくればすむ話です。
たいていのことはVBAから操作できます。


ここはVBAの達人の方々が揃っていますから、
どういう機能を実現したいのかを、具体的に書いていただければ、
こんな裏ワザ的手法より、はるかにいい方法が見つかるかもしれませんよ。


さて、質問の直接の回答ですが、
「GetOpenFilename」で開いたダイアログをコードから閉じる方法は、ないと思います。

>それはバグを使って解消できるのだそうです。

「モードレス」のフォームを使いたいのでしょうか。

しかしこういう裏ワザ的やり方はあまり感心しませんね。
「たまたま動いている」とでもいえばいいのでしょうか。
Excel97では「モーダル」になるのが仕様です。
その仕様の範囲内で制作するのがまっとうなやり方だと思いますよ。

モードレスフォームを使わなければ処理できないという、
「のっぴきならない事情」でもあるのなら仕方ないですが、
たぶん、こんな手法を使わなくても解決できる他の...続きを読む

Qエクセル(Excel) 納品書の作り方【改めて】

昨日http://oshiete.goo.ne.jp/qa/7348426.htmlで質問させていただき、詳しくご回答いただき少し進んだのですが、状況が変わったので改めて質問させていただきます。

■エクセル(Excel)で納品書の作成をしています。
シート1に納品書、シート2に商品マスタ(一覧)を作っていて、シート2の一覧を反映させて
納品書に番号を打ち込むだけで、商品名・単価までが出るシステムを作りたいのですが、
昨日のご回答の中の「VLOOKUP」?を入れて、自分なりにマス目の数字を変えてやってみたのですが
反映されずN/?のようなエラーになってしまいます。

※画像が貼り付けてあります。商品名は1番以外伏せさせていただいています。
くっつけてありますが、左側がシート1・右側がシート2です。

1、上記のように、シート2との関連付けの係数を、写真の場合の数字で教えてください。

2、合計と、合計から20%を引いた数値を割り出す関数も、写真の数字で御願いします。

宜しくご教授お願い致します。

Aベストアンサー

画像がいまいちよく見えないのですが、納品書の項目は左から、No、商品番号、商品名、単価、数量、金額でいいのでしょうか(名前は多少違っていても意味があっていればもんだいないです)

でしたら、
C1セルに=IF(ISBLANK(B2),"",VLOOKUP(B2,Sheet2!$A$2:$C$200,2,FALSE))
D1セルに=IF(ISBLANK(B2),"",VLOOKUP(B2,Sheet2!$A$2:$C$200,3,FALSE))
E1セルは空白で
F1セルに=IF(D2="","",D2*E2)
といれて、C1からF1までをコピーしてその下の行にタテに貼り付ければ出来ますよ。
おそらくエラーが出たのは、コピーしたときにVLOOKUP関数の最初のセルの指定がずれてしまっているのでは無いかと思いますよ。     

Qエクセル:ユーザーフォームにコマンドボタンの設置

エクセルVBAで、ユーザーフォームを利用していますが、そのユーザーフォーム内にエクセルに最初から備わっているツールバーのコマンドボタンを貼り付けることは出来るのでしょうか?

というのも、図形をマウスで範囲選択して、選択された図形をDELETEで全部削除するマクロを組もうと思っているのです。
が、図形描画のツールバーに範囲選択をすると、その範囲内にある図形を全部選択できるコマンドボタンがあったので、その機能をそのままユーザーフォームに設置できればOKと思ったのですが・・・。
それと同様のことが出来るマクロを組めれば問題なのかもしれませんが、私にはちょっと無理そうです。
よろしくお願いします。

Aベストアンサー

こんばんは。

こんな風にしたらどうですか?

オブジェクトの選択ボタンのIDは、182 ですから、FindControl で探して、設定し、
凹んだ状態を、○で表示。そのまま、オートシェイプ類を選択し、コントロールキーを押しながら、コマンドボタンを押すと、オートシェイプ類を削除。

UserForm が小さいほうがやりやすいようですね。なお、UserForm の プロパティの ShowModal は、False ですから、忘れないようにしてください。


Private Sub CommandButton1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
  With Application.CommandBars.FindControl(, 182)
   If Shift = 0 Then
     If .State = msoButtonUp Then
      .Execute
      Me.CommandButton1.Caption = "○" '選択可
     Else
      .Execute
      Me.CommandButton1.Caption = "●" '選択不可
     End If
   ElseIf Shift = 2 Then 'コントロールを押しながら
     If TypeName(Selection) = "DrawingObjects" Then
      Selection.Delete
     End If
   End If
  End With
End Sub

こんばんは。

こんな風にしたらどうですか?

オブジェクトの選択ボタンのIDは、182 ですから、FindControl で探して、設定し、
凹んだ状態を、○で表示。そのまま、オートシェイプ類を選択し、コントロールキーを押しながら、コマンドボタンを押すと、オートシェイプ類を削除。

UserForm が小さいほうがやりやすいようですね。なお、UserForm の プロパティの ShowModal は、False ですから、忘れないようにしてください。


Private Sub CommandButton1_MouseDown(ByVal Button As Integer, ByVal S...続きを読む

Qエクセル2007でプルダウンで選んだものに反応

Excel2007でプルダウンで選んだものに反応して隣のセルが自動入力される方法(エクセル2007)
A1をプルダウンで「猫」「犬」から選べるようにし、「猫」を選んだ場合B1に自動に「111」が、「犬」を選んだ場合B1に自動に「222」と入力されるようにしたいです。
ご教授の程、宜しくお願いします。

Aベストアンサー

VLOOKUP関数での方法です。
(1)別シートに入力文字列と対応コード表を作成。(仮にSheet2のA:B列範囲で順不同)
(2)B1に=IF(COUNTIF(Sheet2!A:A,A1),VLOOKUP(A1,Sheet2!A:B,2FALSE),"")を設定
   入力文字列が存在しない場合は空白としています。

QエクセルVBA フォーム内のコマンドボタンを有効にする

お世話になります。
少々わかりにくいのですが、言葉で説明します。
エクセルVBAで、フォームを作成します。
UserForm1にFrameが2つあり、OptionButtonがそれぞれ2つずつフレームに入っています。(つまり、4つ中2つ選択する必要がある)
フォームが読み込まれた時点ではCommandButton.Enebled=Falseにしておいて、フレーム内のオプションボタンがそれぞれ1つずつ選択された場合に初めてCommandButton.Enebled=trueになるようにしたいと思いますが、どのように記述したら実現されるのでしょうか。
わかりにくい説明でしたが、宜しくお願いします。

Aベストアンサー

例えば、ユーザフォームがアクティブになった時に0.1秒間隔でチェックする関数を起動。
無限ループにしておき、ボタンが押されたら抜け出ます。
まあ、永遠にチェックする訳じゃないのでメモリの問題は無視できると思います。

Option Explicit

Private Sub UserForm_Activate()
  SetCmdEnabled
End Sub

Public Sub SetCmdEnabled()
  Dim Ctl As Control
  
  Do
    Pause 0.1
    For Each Ctl In Me.Controls
      If InStr(1, Ctl.Name, "option", vbTextCompare) > 0 Then
        If Ctl.Value = True Then
          Me.CommandButton1.Enabled = Ctl.Value
          Exit Do
        End If
      End If
    Next Ctl
  Loop Until (0)
End Sub

<標準モジュール>

Option Explicit

Public Sub Pause(ByVal PauseTime As Single)
  Dim Finish As Single
  
  Finish = Timer + PauseTime
  Do
    DoEvents
  Loop Until Timer > Finish
End Sub

例えば、ユーザフォームがアクティブになった時に0.1秒間隔でチェックする関数を起動。
無限ループにしておき、ボタンが押されたら抜け出ます。
まあ、永遠にチェックする訳じゃないのでメモリの問題は無視できると思います。

Option Explicit

Private Sub UserForm_Activate()
  SetCmdEnabled
End Sub

Public Sub SetCmdEnabled()
  Dim Ctl As Control
  
  Do
    Pause 0.1
    For Each Ctl In Me.Controls
      If InStr(1, Ctl.Name, "option", vbTextCompare)...続きを読む


人気Q&Aランキング

おすすめ情報