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

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

ただいまの
回答率

90.51%

  • Excel

    1921questions

    Excelは、マイクロソフト社が開発しているデータ集計や分析を行う表計算ソフトの一つです。文書作成や表計算、資料作成などの多彩な機能を備えており、統合パッケージであるMicrosoft Officeに含まれています。

  • マクロ

    284questions

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

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

受付中

回答 3

投稿 編集

  • 評価
  • クリップ 2
  • VIEW 663

salene05

score 5

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

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

マクロは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 の拡張子を持つマクロとアドインが入っているファイルの中にあります。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

0

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

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

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

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

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

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

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/03/14 22:21 編集

    回答ありがとうございます。
    >クラスモジュールを作成すると、VBA上で型の様に扱うことが出来ます。
    >(不完全な)コンストラクタ宣言が出来るのでインスタンス化するときに動作する処理も定義できます。
    なるほどです。なんとなくこの辺りにヒントがある気がします。

    >デバッグ時のステップ実行でのローカルウインドウでの参照
    やはりウインドウでの参照が基本になるようですね。
    もう少し頑張ってみます。ありがとうございました。

    キャンセル

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

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

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

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

同じタグがついた質問を見る

  • Excel

    1921questions

    Excelは、マイクロソフト社が開発しているデータ集計や分析を行う表計算ソフトの一つです。文書作成や表計算、資料作成などの多彩な機能を備えており、統合パッケージであるMicrosoft Officeに含まれています。

  • マクロ

    284questions

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