質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

Q&A

3回答

2014閲覧

EXCELの”データ型を定義する”コードについて

salene05

総合スコア13

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

0グッド

2クリップ

投稿2016/03/14 11:59

編集2016/03/14 13:19

あるセルの値を書き換えるマクロがあります。

このマクロは、外部のアプリケーションと連携しています。

マクロはEXCELシート内のセルの値を取得し、外部のアプリケーションに送信して計算させ、計算結果をアプリケーションより受信し、セルの値を書き換えます。

EXCELからそのアプリケーションにどのようなクエリを送信しているか知りたいと思い、マクロのコードを読んだところ、

Dim Srans As CountTans

という見慣れぬデータ型で定義された変数がありました。

コードを追っていくと、

Public Sub CountTans()
:
:
End Sub

という記述がありました。

・マクロを実行する前に、Dim Srans As CountTansの一行前にStopを記入すると、セルの値は書き換わりません。

・マクロを実行する前に、Dim Srans As CountTansの一行後にStopを記入すると、セルの値は書き換わります。

・マクロを実行する前に、Public Sub CountTans()という記述の一行後にStopを記入しても、セルの値は書き換わります。

ついては2点お聞きしたいことがあります。

【1】

コードを読む限り、このCountTansがアプリケーションへの送受信を担っているのがわかります。

ですが寡聞ながらデータ型を定義するコードなど聞いたことがありません。

このCountTansは何なのでしょうか。中にStopを記入しても、動作がその場所で止まらない理由を教えてください。

【2】

現在私はコードの前後にStopを書きマクロを走らせて、どの部分がデータの送受信を担っているかをちまちまと判別しています。

EXCELが外部アプリケーションと送受信を行ったとき、そのクエリを表示するコンソールのような機能がないかを教えてください。

EXCELの使用バージョンはEXCEL2010、VBA7.0です。

どなたか詳しい方、ご教示下さい。よろしくお願いします。

========

追記です。このマクロは *.xlam の拡張子を持つマクロとアドインが入っているファイルの中にあります。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

実際動かせるものが手元にはないので推測になりますが、
・型としてのCountTans
・メソッドとしてのCountTans()
は別物だと思います。

型としてのCountTansは、(おそらくNewした時点で)コンストラクタによる初期化処理が行われ、その中でセルの値を更新しているものと推測します。

一方、メソッドとしてのCountTans()は型としてのCountTansと同名ですが、使用箇所ではCall CountTans()のような記述で呼び出されていると思います。
この場合、(当然ですが)CountTans()以降に記載されたコードが実行されます。

投稿2016/04/01 08:59

jawa

総合スコア3013

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

Dim Srans As CountTans
じゃなくて
Dim Srans As New CountTans
ではないでしょうか。

Newしないとインスタンス化されないので、そもそも処理が動くことはないと思います。
また、どのExcel AppのどのWorkbookの等の情報を渡しているわけではないことから、
Classモジュールが定義されているのだと思います。
(これがないと外部から値を取得する事は不可能なはず・・)
CountTansと言う名前のClassが存在しませんか?
もしClassで定義されているのであれば、そのコードをいじれば送受信データは簡単に確認することができるはずです。

因みにデータ型は大きく分けて(たぶん)4種類あります。
・プリミティブ型
Integer、Long、String等のVBAの基本的な型
・構造体
Type [変数名]~End Typeで定義されたもの
・クラス
Classモジュールで定義されたもの
・参照設定
プロジェクト>参照設定で設定された外部モジュール

クラスと参照設定に関してはコンストラクタに処理を記述していれば、以下の記述で処理を実行することができます。
※コンストラクタはVBAではクラス内にClass_Initializeで定義されたメソッドが該当します。
Dim obj As New XXXX

投稿2016/03/14 14:35

編集2016/03/14 14:45
lilithchan

総合スコア249

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

実際にCountTansを利用したことが無いので以下はすべて想像です。

【1】
ですが寡聞ながらデータ型を定義するコードなど聞いたことがありません。
このCountTansは何なのでしょうか。中にStopを記入しても、動作がその場所で止まらない理由を教えてください。

その外部アプリケーション側で用意されているAPIなどではないでしょうか?
VBなどでDLLを作成するとそのライブライを参照して独自型を利用することが出来ます。

因みに、クラスモジュールを作成すると、VBA上で型の様に扱うことが出来ます。
(不完全な)コンストラクタ宣言が出来るのでインスタンス化するときに動作する処理も定義できます。

【2】
EXCELが外部アプリケーションと送受信を行ったとき、そのクエリを表示するコンソールのような機能がないかを教えてください。

API側でコンソール表示などを用意していないと無理ではないでしょうか?
自分は下記程度しか知りません。

  • VBEでのイミディエイトウィンドウ出力やメッセージボックス出力
  • Errオブジェクトの参照
  • デバッグ時のステップ実行でのローカルウインドウでの参照
  • テキストファイル出力やワークシートへの出力

以上、
ご参考になりますでしょうか?

投稿2016/03/14 13:00

Aeona

総合スコア396

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

salene05

2016/03/14 13:21 編集

回答ありがとうございます。 >クラスモジュールを作成すると、VBA上で型の様に扱うことが出来ます。 >(不完全な)コンストラクタ宣言が出来るのでインスタンス化するときに動作する処理も定義できます。 なるほどです。なんとなくこの辺りにヒントがある気がします。 >デバッグ時のステップ実行でのローカルウインドウでの参照 やはりウインドウでの参照が基本になるようですね。 もう少し頑張ってみます。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問