変数名のマージについて


キャンチョメ  2003-10-08 00:17:00  No: 79689

はじめまして。
このHPをよく参考にさせていただいておりますVB初心者のものです。

ちょっとわからないのですが、言葉での説明が難しいので、例で説明
させていただきます。

まず、
PUBLIC V1TEST as integer
PUBLIC V2TEST as integer
         ・
         ・
という変数を定義します。
そして、この変数に数字を入れたいのですが、
その前に外部ファイルからこの変数の頭2文字(V1・V2)を取ってきて
その取ってきたものに、TESTを結合して挿入したいのですが、エラー
で落ちてしまいます。
<例>
MID(バージョン(i),1,2) & TEST = 0←V1TESTという変数にゼロを挿入
(バージョン(i),1,2)にはV1・V2が入っている

こういう事ってひょっとして無理なのでしょうか?
もし知っている方がいらっしゃいましたら教えてください。
PS:長々書いて申し訳ありませんでした。


魔界の仮面弁士  2003-10-08 00:22:02  No: 79690

要件にもよりますが、フォームやクラスにて定義した
Public変数であれば、『CallByName関数』を利用できるかと。


キャンチョメ  2003-10-08 00:34:00  No: 79691

早速回答ありがとうございます。

ですが、初心者で若輩者の私には、この関数をどう扱っていいかわかりません。
どうやって使用すればできるか教えてください。
よろしくお願いします。


イトウ  2003-10-08 19:40:27  No: 79692

>この変数に数字を入れたいのですが、
数字は、数値ですか?文字列ですか?

>その前に外部ファイルからこの変数の頭2文字(V1・V2)を取ってきて
その取ってきたものに、TESTを結合して挿入したいのですが、エラー
で落ちてしまいます。

変数名を、文字として扱うことはできません。
挿入するとは、何を挿入するのですか?

>MID(バージョン(i),1,2) & TEST = 0
この式は無効です。
左辺は文字列で、右辺は数値だからです。

全体的に何をしたいのかがかかれていません。
エラーの詳細と目的をそえて再度書いてみてください。


k.k  2003-10-08 20:36:19  No: 79693

Public Hensu As Long

Private Sub Form_Load()
    CallByName Form1, "Hensu", VbLet, 2
    Debug.Print Hensu
    CallByName Form1, "Hensu", VbLet, 10
    Debug.Print Hensu
End Sub

このように使用します。


キャンチョメ  2003-10-09 02:48:18  No: 79694

イトウ様、kk様返信ありがとうございます。
返信が送れて申し訳ありませんでした。

イトウ様へ
あいまいな質問で申し訳ありませんでした。
やりたいことは、変数名の頭3文字だけ違う変数がいくつかあって
(例:AG1テスト、AG2テスト、SH3テストみたいな感じです)、
その変数の頭3文字(AG1・AG2・SH2等)を外部ファイルから
読み込み、その読み込んだ頭3文字と残りの変数名をマージして
そのマージしたものを変数として扱いたいと思っているのですが、
それは不可能なのでしょうか?
(例:外部ファイル(i)←読み込んだファイルの1レコードが格納されている
    外部ファイル(i)には"AG1TESTTEST"と入っているとする
    MID(外部ファイル(i),1,3) とテストをマージしてAG1テストという変数に数値を入れたい)

という感じですが、言葉足らずで理解しにくいかと思いますが、どうぞ
お解りになりましたらアドバイスお願いします。


k.k  2003-10-09 02:53:38  No: 79695

だからぁ
CallByName Form1, mid(外部ファイル(i),1,3) & "TEST", VbLet, 2
とすりゃええでしょ


イトウ  2003-10-09 21:34:04  No: 79696

>(例:外部ファイル(i)←読み込んだファイルの1レコードが格納されている
>    外部ファイル(i)には"AG1TESTTEST"と入っているとする
>MID(外部ファイル(i),1,3) とテストをマージしてAG1テストという変数に数値を入れたい)
このような"プログラム内の文字列を変数名の一部にすること"は無理です。

似た、もしくは代価的な動作をさせたい場合は、
辞書配列やSelectCase文やほかの条件分散で
"先頭何文字に対応する変数を、選択的に利用する"プログラム
を書かなければなりません。

CallByNameの案も出ていますが、こちらは未定義もしくは実行時定義のオブジェクトのメソッドやプロパティを参照する方法です。

'例:
'v(1)をABCテスト
'v(2)をDEFテスト
'v(3)をGHIテスト
'と定義します。

dim v(1 to 3) as variant
dim Index as integer
Select case 外部ファイル(i)
  Case "ABC":Index=1
  Case "DEF":Index=2
  Case "GHI":Index=3
End Select
v(Index)=10

このような感じでプログラムすることになると思います。

余談ですが、実行時には"変数名"はすべて符号(数値)になっています。
ですから実行時に変数名を操作することは不能なわけです。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加