• ベストアンサー

エクセルVBA オブジェクト名の変わりになる変数

質問しつれいします。 エクセルVBAでマクロを作っているのですが、 分からないところがあるのでご指導の程お願いしたいです。 テキストボックスを複数つくり、それに順に値を 当てはめていくのですが、それを一つのループでしたいと 考えています。 例えば、text1というオブジェクト名のテキストボックスに text1.value = ○○ という風に、text20まで数字の部分だけ変えてループ関数で値を当てはめていきたいのですが、どうすればいいか分かりません。 変数に"text"という文字列と数字部分を結合したものをあてはめて 数字部分だけループ時に加算していき、 変数.value = ○○ という形で実現したいと思い色々試してみましたが、エラーが出てうまくできません。 わかる方がいらっしゃいましたら是非お教え願えませんでしょうか。 お願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • pkh4989
  • ベストアンサー率62% (162/260)
回答No.2

おはようございます。 こんな感じでしょうか。 Dim wI     As Integer For wI = 1 To 20   Controls("Text" & wI).Text = ○○ Next

Errick
質問者

お礼

回答ありがとうございます^^ VBA初心者なので簡潔な記述はすごく助かります>< ありがとうございました!

その他の回答 (3)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

こんにちは。 テキストボックス って何でしょうか? Excelでは、テキストボックス と言われても、3つもあるので、それを特定できないと思います。 なお、このように数字によるループは、確実に、自分で設計した場合に限ります。そうでなければ、#3 さんのような、For Each ~ In スタイルにしたほうが安全です。 Sub TestOleObjects() 'コントロールツール Dim i As Integer With ActiveSheet For i = 1 To 20  .OLEObjects("TextBox" & i).Object.Value = i Next i End With End Sub Sub TestSpes() 'オートシェイプ Dim i As Integer With ActiveSheet For i = 1 To 20  .Shapes("Text Box " & i).DrawingObject.Text = i Next i End With End Sub 'ユーザーフォームモジュール Private Sub CommandButton1_Click() 'ユーザーフォーム Dim i As Integer For i = 1 To 20  Me.Controls("TextBox" & i).Text = i Next End Sub

Errick
質問者

お礼

回答ありがとうございます^^ わかりにくい記述で申し訳ございません>< それぞれのパターンで丁寧に記述していただき助かります。 今後の参考にさせて頂きます! ありがとうございました^^

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

Sub test04() i = 1 Dim ct As Object For Each ct In ActiveSheet.OLEObjects 'Shapes MsgBox ct.Name ct.Object.Value = Cells(i, "A") ct.Object.BackColor = RGB(255, 255, 0) i = i + 1 Next End Sub そのシートのA列にテキストがセットされているとした場合の例。 テスト済み。2002.

Errick
質問者

お礼

回答ありがとうございます^^ VBA初心者なのでちょっとわからない記述がありますが 今後の参考にさせて頂きます^^ ありがとうございました!

  • nekotaru
  • ベストアンサー率50% (22/44)
回答No.1

このHPが参考になると思います。 http://www2.moug.net/bbs/exvba/20070628000025.htm

Errick
質問者

お礼

お早い回答ありがとうございます^^ こんなサイトがあったのですね。 参考にさせて頂きます。ありがとうございました^^

関連するQ&A

  • VBAでのオブジェクト名の付け方で困っています。

    私が知りたいのはユーザフォームを一度作成した後にオブジェクトを追加したときのオブジェクト名の処理の仕方です。 今、EXCEL VBAでアンケート入力フォームを作成しています。テキストボックスやチェックボックスが全部で70ほどあります。以下のようにControlsコレクションを用いてユーザフォームに入力した文字列などをワークシートに追加しています。 ……<略> For i = 1 To 10 Cells(Row, i).Value = Me.Controls("CheckBox" & i ).Value Next i ……<略> しかし、入力フォームの画面構成を変更して、新たにテキストボックスやチェックボックスを追加すると、例えば、ユーザフォーム上で隣り合ったTextBox1とTextBox2の間にTextBox35が入ってきて以下のようにコードを書き換えねばなりません。 ……<略> Cells(Row, 1).Value = Me.CheckBox1.Value Cells(Row, 2).Value = Me.CheckBox35.Value For i = 2 To 10 Cells(Row, i+1).Value = Me.Controls("CheckBox" & i ).Value Next i ……<略> プロパティからオブジェクト名のひとつひとつを編集してユーザフォームのテキストボックスの表示順にするのも手間ですし……まだ、設計の試行錯誤の段階なのでまだまだテキストボックスやチェックボックスを追加・削除をすると思いますし…… 何か効率のよいオブジェクト名の付け方はないでしょうか? みなさんはどのようにされていますか?

  • エクセル・VBA CheckBoxのオブジェクト名に変数を使うことは可能でしょうか?

    CheckBoxが CheckBox1,CheckBox2,…6 まであり、 If CheckBox1.Value = True Then… とするときに、数字「1」の部分を変数にしたいのですが、どのようにすれば可能でしょうか。 よろしくお願いします。

  • EXCEL VBA で範囲名を変数として扱えますか?

    チョット的が外れているかも知れませんが、教えてください。VBAはマクロの記録をちょこっと訂正しながら使える程度です。 ワークシートのA1に商品1、B1に商品2、C1に商品3という範囲名(名前)を定義しました。 次にユーザーフォームにテキストボックス1とテキストボックス2を配置してテキストボックス1に「1」を入れるとテキストボックス2には商品名1の内容が「2」を入力すると商品名2の内容が表示されるようにしたいのです。多分、IF文などで処理する方が合理的だとは思うのですが、 SyouHin = "商品" & me.textbox1.Value me.textbox2.Value = SyouHin みたいに、範囲名を変数にして扱うことはできるのでしょうか?その時にはSyouHinの変数のタイプは文字列(string)とするのでしょうか? 少し、背伸びをして勉強を始めたのですがうまくいきません。 もしかして、全然ピントのはずれている質問かも知れません。また、文章が下手で伝わらないかも知れませんが、よろしくお願いします。

  • エクセル VBA CheckBox名に変数を使用

    エクセル VBA CheckBoxのオブジェクト名に変数を使用して 値を取得したいのですが・・・ If ActiveSheet.OLEObjects(TempName).Object.Value = True Then          (処理) Else          (処理) End If 「実行時エラー '1004': OLEObject クラスのオブジェクトのプロパティを取得できません。」 というエラーがでてしまいます。 何が原因なのかわかる方是非ご教授ねがいます。

  • エクセルVBA:変数の疑問?

    vba初心者です。 ちょっと疑問に思ったので質問します。 変数1 = XXXXX 変数2 = XXXXX 変数3 = XXXXX 変数4 = XXXXX 変数5 = XXXXX For i = 1 To 5 XXXX.YXXXX("変数" & i).xxxxx Next i 以上の様に"変数名 + 数字"の様な型を定義した場合 この、数字部分を生かしてループ処理などは可能なのでしょうか?

  • エクセルVBAのオブジェクトのハンドリングについて

    一応以下のVBAを作って稼動していますが、もっとスマートな方法はないでしょうか。ご存知の方よろしくお願いもうしあげます。 シートやフォームのボタン・ラベルのキャプション、テキストボックスのテキスト、チェックボタンの値をiniファイルに保存し、次回それを使用するVBAを作りました。 iniファイルの中身は以下ようになっています。 [シート名] CommandButton1.Caption=xxxx Label3.Caption=yyyy TextBox6.Text=zzzz ・ ・ [フォーム名] CommandButton8.Caption=xxxx Label5.Caption=yyyy ・ ・ iniファイル作成時はkeyには"CommandButton1.Caption"、その値にはSheets("シート名").CommandButton1.Captionなどの様に個々のオブジェクトを指定しています。 iniファイル読取時はSelect Case文でkey"CommandButton1.Caption"だったら.CommandButton1.Captionに値をセットするようにしています。 セットする個々のオブジェクト全てに書出し、読取りを行っていますのでとても冗長なVBAの記述になっています。 個々のオブジェクトを指定せずに書き出す方法、及びiniファイルに書かれているオブジェクト名で該当オブジェクトに値を設定する方法が知りたいのです。

  • VBA Do…Loopについて

    お世話になっております。 ただいま、アクセスVBAにてDo…Loopの練習をしております。 テキストボックス1に数字を入れ、コマンドボタンを押すと入力した数字が1ずつ引かれる形でテキストボックス2に入るようにしたいです。 (テキストボックス1に「8」→テキストボックス2に「87654321」のように) Dim I As Variant I = Me.text1.Value Me.text2.Value = Me.text1.Value Do Until I = 1 I = I - 1 Me.text2.Value = Me.txt2.Value & I Loop で動作そのものはするのですが、doloop前の「Me.text2.Value = Me.text1.Value」を正さないといけないようです。(課題です) これがないと入力された数字そのものが入らなくなってしまうのですが… よろしくおねがいします。

  • EXCELのVBAについて

    エクセルのVBAでユーザーフォームに作ったテキストボックスに入力した値を、コマンドボタンによる「実行」とともに別に作った標準モジュールの変数として代入するにはどうすれば良いでしょうか? 具体的な流れは、 マクロ実行  ↓ ユーザーフォーム出現  ↓ テキストボックスに数字を代入→「実行」  ↓ 変数を代入された標準モジュールによる処理完了 というものです。 ご教授お待ちしております。

  • xcodeでオブジェクト名に変数値を使えますか?

    Xcodeでiphoneアプリ勉強中の初心者です。 変数の値をオブジェクトの名前として利用する事は可能でしょうか? (過去の質問履歴を探しましたが、他の言語については掲載されていましたが、xcodeやobject-cに関しては類似する質問を見つける事が出来ませんでした。) 例えば、3つのラベルが配置されていて、ソース中(.mファイル)に以下の記述があったとします。 labeldayo1.text = @"1"; labeldayo2.text = @"2"; labeldayo3.text = @"3"; こののラベル部分を for (loop=1;loop<=3;loop=loop+1) { labeldayo(loop).text = [NSString stringWithFormat:@"%d",loop]; } みたいな感じで、変数の値をオブジェクトの名前として利用する事は可能でしょうか?? もし可能な場合、どのような記述方法があるのか、ご教授いただけたら幸いです。

  • エクセルVBA コントロールに変数を入れたい

    エクセルvbaです。 UserForm1.テキスト1.Valueを UserForms("UserForm1").Controls("テキスト1").Value のような形式でコードを書くことは可能でしょうか? UserForms("UserForm1").Controls("テキスト1").Value だとエラーになってしまいます。 accessでは Forms("Form1").Controls(“テキスト1”).Value と言う形式が可能ですが、エクセルでは不可能なのでしょうか? エクセルでは Forms("Form1").Controls(“テキスト1”).Value UserForm ("Form1").Controls(“テキスト1”).Value でもエラーになってしまいます。 UserForm1.Controls("テキスト1").Valueは コードが通りましたが、フォームの部分に変数を入れる事ができません。 ご教授よろしくお願いします。

専門家に質問してみよう