Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


12442 / 13645 ツリー ←次へ | 前へ→

【10436】値を渡す定数式 ふぉる 04/1/26(月) 17:22 質問
【10437】Re:値を渡す定数式 Seraph 04/1/26(月) 17:50 回答
【10438】Re:値を渡す定数式 INA 04/1/26(月) 17:51 回答
【10456】Re:値を渡す定数式 ふぉる 04/1/27(火) 15:52 質問
【10458】Re:値を渡す定数式 Asaki 04/1/27(火) 16:06 回答
【10462】Re:値を渡す定数式 Asaki 04/1/27(火) 22:54 回答
【10459】Re:値を渡す定数式 kein 04/1/27(火) 19:25 回答
【10460】Re:値を渡す定数式 kein 04/1/27(火) 19:27 発言
【10487】Re:値を渡す定数式 ふぉる 04/1/28(水) 20:47 お礼

【10436】値を渡す定数式
質問  ふぉる  - 04/1/26(月) 17:22 -

引用なし
パスワード
   初めてここに質問いたします。
VB初心者なのでお教えいただきたいのですが
値を渡す形式の定数記述はVBには存在するのでしょうか?
C言語で言うところの
 #define 〜〜〜(x)
です。

たとえば、
 x & "行目" & y & "列目の値が異常です。"
みたいな定義をしたい場合などですが、これはVBだと関数で
記述するしかないのでしょうか。

関数にしてしまうと、このような定義をいくつも記述した場合
後で整理しやすいとは思えませんので・・・

【10437】Re:値を渡す定数式
回答  Seraph  - 04/1/26(月) 17:50 -

引用なし
パスワード
   ▼ふぉる さん:こんばんは

>値を渡す形式の定数記述はVBには存在するのでしょうか?
>C言語で言うところの
> #define 〜〜〜(x)
>です。

定数の宣言は、この様に記述します。

[Public | Private] Const constname [As type] = expression

Public Const AAA As String = "XXX"
Public Const AAA As Long = 100

などです。

あと、条件付きコンパイラ定数と言う
#Const
#If〜#Else〜#End If 
  
って言うのも有ります。
詳しくはヘルプを参照されますようにお願いします。
#その方が正確 (^^;

【10438】Re:値を渡す定数式
回答  INA  - 04/1/26(月) 17:51 -

引用なし
パスワード
   Dictionary オブジェクト でしょうか?

【10456】Re:値を渡す定数式
質問  ふぉる  - 04/1/27(火) 15:52 -

引用なし
パスワード
   Seraphさん、INAさんご回答ありがとうございます。
お二方のお教えくださった物について調べてみたのですが、
私の考えている処理を実現できる機能ではなさそうです。
私の質問の仕方も良くなかったかと思いますので、具体例を挙げて
再度質問させていただきます。

たとえば、ある値に256を足し算するだけの処理を記述するとします。
VBでFunctionを用いて記述するのだったらこのように記述しますが

    Private Function PlusAlpha(x As Integer) As Integer

      PlusAlpha = x + 256

    End Function

C言語で書くならこのようなものは関数にするまでも無く
下記のような一行の記述で済みます。
(Cでは引数付置換マクロというようです)

    #define PLUS_ALPHA(x)    (x + 256)

これと似たようなもの(たとえば256を引く、256をかける、256で割るなど)
を何十通りも記載する場合には、関数で記述していくと、見た目上で
とても場所をとってしまいます。
C言語ではソースの冒頭部に、それらをまとめて記載しておくだけなのですが、
VBで、これと似たような記述方法があるのかという質問なのですが
いかがでしょうか?

【10458】Re:値を渡す定数式
回答  Asaki  - 04/1/27(火) 16:06 -

引用なし
パスワード
   こんにちは。

>VBで、これと似たような記述方法があるのかという質問なのですが
>いかがでしょうか?

多分、ないでしょう。

>#define PLUS_ALPHA(x)    (x + 256)
も、ある意味、関数と言って言えなくもないですし。

クラスモジュールを上手く使うと、何か良い手があるかもしれませんが、思いつきません。

【10459】Re:値を渡す定数式
回答  kein  - 04/1/27(火) 19:25 -

引用なし
パスワード
   C言語についてはよく知りませんが、複数の戻り値を一つの関数に持たせるなら、
例えば

Private Function PlusAlpha(x As Integer, y As Integer) As Double
  Dim V1 As Long, V2 As Long, V3 As Long, V4 As Long
  Dim Ary As Variant
 
  If y > 3 Or y < 0 Then Exit Function
  V1 = x + 256: V2 = x - 256: V3 = x * 256: V4 = x / 256
  Ary = Array(V1, V2, V3, V4)
  PlusAlpha = Ary(y)
End Function

などとしたら、どうでしょーか ?

【10460】Re:値を渡す定数式
発言  kein  - 04/1/27(火) 19:27 -

引用なし
パスワード
   >Dim V1 As Long, V2 As Long, V3 As Long, V4 As Long
と宣言したら、関数の戻り値も Long型にしかなりませんね (^^;

【10462】Re:値を渡す定数式
回答  Asaki  - 04/1/27(火) 22:54 -

引用なし
パスワード
   微妙ですが、Evaluateを使うと、計算式を文字列で定義しておいて、その値を評価できます。

'------
'グローバル定数として数式を宣言
Const PLUS_ALPHA    As String = "x + 256"
'------
'xを50として数式を計算
MsgBox Evaluate(Replace(PLUS_ALPHA, "x", 50))

【10487】Re:値を渡す定数式
お礼  ふぉる  - 04/1/28(水) 20:47 -

引用なし
パスワード
   Assaki さんにお教えいただいた Evaluate というの使ってみました。
確かに引数つき置換マクロに近いことが出来そうですが、
私が今回やろうとしていることに使おうとすると、
かえってソースが複雑化しそうな気がするので、
やっぱり地道にFunctionで記述していくことにします。

Seraphさん INAさん keinさんのご意見も
こんなことが出来るのかと、とても勉強になりました。

お付き合いいただき、ありがとうございました。

12442 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free