EXCELで、シート見出しの上で右クリックすると、挿入や削除のショートカットメニューが出てきますよね。
そこで、挿入を選択すると標準で、『ワークシート』『グラフ』『EXCEL4.0マクロ』『MS EXCEL5.0ダイアログ』というのが出てきます。
『ワークシート』はワークシートですよね。『グラフ』も、グラフシートと言うことで、すぐにグラフを作成する画面に移行します。
しかし、『EXCEL4.0マクロ』『MS EXCEL5.0ダイアログ』に関してはいまいち使用用途が分かりません。
エクセル上で、マクロを作成したり、そのマクロを登録するコントロールを作成するもの、って言うカンジで受け取ればいいのでしょうか?
でも、結局マクロとかは記録作業を行わなければ意味ないですよね?

ご存知の方がいらっしゃったら、ぜひ教えてください。

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

A 回答 (1件)

EXCEL97から、マクロ機能にVisual Basic for Application(VBA)が統合され、VBAマクロ自体が、Visual Basic 5.0 と同じエンジンで動く、高級なアプリケーションとして付加されました。

そんな中で、ダイアログボックスも、ダイアログシートで作っていたものが、VBAプロジェクトで作ることができるようになったため、ダイアログボックスを作る方法が2通りあり、どちらで作ったらいいものか迷ってしまいます。私の見解としては、旧バージョンとの互換性を保つために残された機能であり、今後廃止される公算が大きいのではないかと考えています。ただ、EXCEL4.0マクロは、今でも呼び出して使った方が便利な処理があるようです。ダイアログシートについては、ポインタの形状が変わることや、プロパティウインドウで設定できることなど、機能的に多少異なりますが、コーディング自体には、なんら特殊な部分はありません。
> エクセル上で、マクロを作成したり、そのマクロを登録するコントロールを作成するもの、って言うカンジで受け取ればいいのでしょうか?
「VBAの機能を自動記録以外使わない」という意味であれば、おおむねeub55さんの考えで良いのではないでしょうか。
> 結局マクロとかは記録作業を行わなければ意味ないですよね?
イベントプロシージャを意識することなくマクロを組むことができますが、ある程度VBAを扱うことができる人であれば、サブルーチンにとばす処理をするでしょうから、ご指摘のように意味ないかもしれませんね。
ちなみに、私はダイアログシートを使っていません。
    • good
    • 0
この回答へのお礼

解答ありがとうございました!
なんとなく、ではありますが自分の中で整理がついた感じです。
これからVBAの勉強を始めてみようかなと思っているところなので
きっと始めてみたらもっとTTakさんの言うことがよく分かるようになるのかな
なんて思いました。

お礼日時:2001/04/23 01:13

このQ&Aに関連する人気のQ&A

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

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

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

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

QExcel VBA Dialogsheet

現在Excel2002を使用しています。
かなり以前に作ったと思われるブックににVBAが入っていて、ソース
を見たところ、
DialogSheets("通常入力").Show
というコードがありました。
「通常入力」というダイアログを編集したいのですが方法が分かりません。
旧いExcelで読み込まなくてはできないのでしょうか。
もしExcel2002で編集する方法があるのであればお教え頂ければ助かります。

Aベストアンサー

こんにちは。

DialogSheets("通常入力") を表示すればよいのではありませんか?
非表示になっているのであれば、

 書式-シート-再表示
として、Dialog シートをクリックするか、

または、マクロで、

 DialogSheets("通常入力").Visible = True

とすれば出てきます。

Qエクセル VBA ユーザーフォームを閉じる

ユーザーフォームを開く時は
UserForm1.Showですが
閉じる時は?
UserForm1.Close
だとコンパイルエラーになります。
End
にするしかないですか?

Aベストアンサー

Unload Me とか Unload UserForm1 でユーザーフォームを閉じることができます。

QSub ***( ) と Private Sub ***( ) の違い

初歩的な質問で申し訳ありませんが・・・

自分でコードを書いていても、イベントが発生したりした時の処理で、コードのウィンドウで上のドロップダウンリストで選択できる時の処理などは自動的に[Private Sub Command1_Click( )]などと出てくるのでそのまま使っています。自分で別途プロシージャーを作成する時は[Sub ****( )]としています。
ですがその違いを理解しないまま、自分で作成する時は[Private Sub]ではなくて[Sub]を使っています。

Sub ***( ) と Private Sub ***( ) の違いは何なんでしょうか?
どなたか説明頂けませんか?
よろしくお願いします。

Aベストアンサー

「Sub」の部分にカーソルを置いて[F1]を押せばヘルプが起動します。
「指定項目」のところに「Public」と「Private」の説明がありますよ。
省略して「Sub hogehoge()」とした場合は「Public」とみなされます。

Publicは「すべてのモジュールから呼び出せるプロシージャ」ということになります。
Privateとすると「同じモジュールの中からしか呼び出せないプロシージャ」となります。

もしExcelをお持ちでしたらExcelのVBEで標準モジュールを追加し、「Sub Test1()」と「Private Sub Test2()」を作成してみてください。
そしてExcelの[ツール]-[マクロ]-[マクロ(Alt+F8)]でマクロ実行のダイアログを表示させてみるとわかります。
ここには実行できるプロシージャの一覧が表示されますが、Test1は表示されているけれどTest2は表示されません。
Test1はPublicで、Test2はPrivateだからです。

QVBA オブジェクトが空かどうか判定する

皆様のお知恵を拝借させてください。

エクセルVBAでオブジェクトを入れる変数を定義し、その変数にオブジェクト
が入っているかどうか検査したいのですがどうしたらいいでしょうか。

例えば---
Dim a As Workbook
If a <> nothing then ←この部分が分からない。このままだとエラー。
処理
End if
---------
環境
エクセル2003
WinXPsp1

Aベストアンサー

もし、aが空だったら
If a Is Nothing Then 

もし、aが空じゃなかったら
If Not a Is Nothing Then

Qユーザーフォームを表示中にシートの操作をさせるには

ユーザーフォームを表示中にシートの操作をさせる事はできるのでしょうか。
セルへの入力、画面のスクロールなどは、ユーザーフォームからマクロを実行させたり、.hideでユーザーフォームを一時的に隠すなどすればいいのでしょうが、そういう手段をとらないでユーザーフォームを表示中にシートの操作をさせる事はできるのでしょうか。

Aベストアンサー

ユーザフォームの
ShowModalプロパティを
falseにすればよいかと。

QエクセルVBAでテキストボックスの値の取得と変更について

エクセルのVBAを使ってシート上のテキストボックスのテキストを取得・変更するマクロを作成したいと思っていますがうまく行きませんので、お知恵を拝借したいとおもいます。

環境:WindowsXPでオフィス2002
状況:
エクセルブックa.xlsのシートに「コントロールツールボックス」のテキストボックスを配置(オブジェクト名はTEXTBOX_C)
エクセルブックb.xlsにコードを書き、a.xlsのTEXTBOX_CのプロパティのValueかTextを取りだしたい

試した事:
コントロールを配置したシートに次のマクロ
TEXTBOX_C.Text = "これはコントロールのテキストボックス"
を書くとテキストボックスに文字を入れ込めますが、別のエクセルブックからだと上手く行きません。

また、オートシェイプのテキストボックスの場合は簡単に出きるのですが、コントロールツールボックスではどうしても上手く行きませんので、対象法などご存知の方いらっしゃいましたら教えてください

Aベストアンサー

エクセルを新規に開きました。
そのSheet1に(コントロールツールボックスの)TextBoxを貼りつけました。
そのBook1から、ファイル-開くで別ブックを開きました。
別ブックのMojule1側に下記を書いて
Sub test02()
MsgBox Workbooks("book1").Worksheets("sheet1").textbox1.Text
End Sub
を実行すると、Book1のTextBoxに入れた文字列が表示
されました。
がそんな質問ではないのですか。

Qユーザーフォームに入力したデータを保持する方法

VBA初心者です。いろいろ調べて徐々に進められていますが、、
こちらもなかなか見つからなかったので質問させていただきます。

現在、ユーザーフォームにテキストボックスをいくつか配置し、
さまざまな計算などをさせて、最終的にエクセルシートに反映させる。
といったことが出来るようにプログラムをしています。

ユーザーフォームのテキストボックスに一度入力したものを、
エクセルシートを閉じるまで残すことはできるでしょうか?

一度、×ボタンで閉じてしまうと、次に呼び出したときには初期の状態になってしまいます。

ユーザーフォームに入力し、エクセルシートで確認、
その後 再度ユーザーフォーム呼び出して修正する
といった作業をするために、一度入力したものが消えないようにしたいです。

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

Aベストアンサー

閉じるボタンで閉じるとき、Hideで閉じればいいだけの様な気がします。

UserFormのモジュールに記述します。

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If CloseMode <> 1 Then
 Cancel = True
 Me.Hide
End If
End Sub

Qエクセル:マクロ「Application.CutCopyMode = False」って?

エクセルのマクロを記録していると

「Application.CutCopyMode = False」

というものがよく出てきますが、これは何でしょう?
どういう意味のものかわかりません。
削除しても差し支えないのもでしょうか?

Aベストアンサー

「Application.CutCopyMode = False」の前で
セルのコピー、または切り取りを行っていると思います。
これは、その操作(セルのコピー、または切り取り)を無効にしているだけです。
------------
Range("A1").Select
Selection.Copy ← これを無効にしている
Range("A2").Select
ActiveSheet.Paste
Application.CutCopyMode = False
------------
上記の場合であれば、「Application.CutCopyMode = False」を削除しても問題ありませんが、
以下の場合、貼り付け処理でエラーになります。
------------
Range("A1").Select
Selection.Copy
Range("A2").Select
Application.CutCopyMode = False
ActiveSheet.Paste ← ココでエラー
------------
ご自分で、セルをコピーしてみると分かると思いますが、コピーした範囲が点線で点滅されます。
「Application.CutCopyMode = False」をすると、
その点滅がなくなります。

「Application.CutCopyMode = False」の前で
セルのコピー、または切り取りを行っていると思います。
これは、その操作(セルのコピー、または切り取り)を無効にしているだけです。
------------
Range("A1").Select
Selection.Copy ← これを無効にしている
Range("A2").Select
ActiveSheet.Paste
Application.CutCopyMode = False
------------
上記の場合であれば、「Application.CutCopyMode = False」を削除しても問題ありませんが、
以下の場合、貼り付け処理でエラーになります。
------------
...続きを読む

QEXCELファイルのカレントフォルダを取得するには?

EXCELファイルのカレントフォルダを取得するには?

C:\経理\予算.xls

D:\2005年度\予算.xls

EXCEL97ファイルがあります。

VBAで
  カレントフォルダ名
(C:\経理\,D:\2005年度\)
を取得する事は可能でしょうか?

CURDIRでは上手い方法が見つかりませんでした。

Aベストアンサー

こんばんは。
Excel97 でも、同じですね。以下で試してみてください。

Sub test()
'このブックのパス
a = ThisWorkbook.Path
'アクティブブックのパス
b = ActiveWorkbook.Path
'Excelで設定されたデフォルトパス
c = Application.DefaultFilePath
'カレントディレクトリ
d = CurDir
MsgBox "このブックのパス   : " & a & Chr(13) & _
   "アクティブブックのパス: " & b & Chr(13) & _
   "デフォルトパス    : " & c & Chr(13) & _
   "カレントディレクトリ : " & d & Chr(13)
End Sub

QVBAでループ内で使う変数名を可変にできないか。

次のような処理で・・・、
 Cnt_1 = Cnt_1 + 1
 Cnt_2 = Cnt_2 + 1
   :
実際には一つの変数(Cnt_1など)ごとに処理がもっとあるのですが、
変数はCnt_1からCnt_5まであり、すべて同じ処理をするので、変数名を
可変にして同じループで書けないかと思うのですが、可能でしょうか?

たとえば、
For I=1 to 5
 Cnt_I = Cnt_I + 1
Next I
と書くと、「Cnt_I」という変数の処理になってしまいますね・・。

なにかいい方法はないでしょうか?

Aベストアンサー

こんばんは。

配列変数を使えばいいでしょう。
変数を5個用意して、すべて1~5まで足すという処理の場合です。
Dim Cnt(4) As Integer
Dim i As Integer
Dim j As Integer
For i = 0 To 4
For j = 1 To 5
Cnt(i) = Cnt(i) + j
Next j
Next i
どうでしょうか。


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

人気Q&Aランキング