- 締切済み
VBAの配列の質問です
こんにちは、VBAについての質問です。 配列について3点ほど質問致します。 ・ フォームに貼り付けた、ラベル、テキストボックス、コンボボックスの名前を配列にして、その数自体も変数にして (上記のコントロールの数は当然分かっているのですが敢えて変数名でとりたいのです)、配列のデーターとして入れて やることは可能なのでしょうか。 特に疑問なのは、テキストボックス、コンボボックスには「文字型」、「数字型」が有ります。その場合の配列の型 はどのように宣言してやる のでしょうか。 ・ 仮に上記が可能ならば、特に疑問なのは「数字型」は「数字型」として、セルには記入されるのでしょうか。 それとも、数字の場合には、セルへの入力時とか、セルからの出力時とかに、キャスト等で型変換等の処理が必要になる のでしょうか。 ・ またそれとは別の配列として、テキストボックス、コンボボックスのデーターだけを配列データーとして入れてやるのは 可能なのでしょうか。
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- kenpon24
- ベストアンサー率64% (66/102)
KenKen_SPさんへの返信で書かれているコードを拝見するに、 なにか宣言の部分で根本的に間違っているような気がしてならないのですが、 Label_Name_の宣言はどこでどのように行っているのですか? それと目的についてですが、ラベルの名前とデータをセルに張り付けたいということはこういうことですか? A B 1 ラベル名 ラベルの表示文字列 2 テキストボックス名 テキストボックスの文字列 3 コンボボックス名 コンボボックスの1番目の文字列 4 コンボボックス名 コンボボックスの2番目の文字列 5 コンボボックス名 コンボボックスの3番目の文字列 それとも、With Worksheets(Label_Name_)のコードから察するに オブジェクト名をワークシート名にして、データをそのシートに張り付けたいということですか?
- QQQ_rrr
- ベストアンサー率0% (0/0)
KenKen_SPさん、回答有難うございます。 >テキストボックス、コンボボックスには「文字型」、「数字型」が有ります。 >コントロール自体にそのような型はありません。あるのは、そこに入力された >データを文字列として扱うのか、数値として扱うのかです。 ■私の疑問は、仮にテキストボックスとかに入っている数字のデーターを一旦配列に保存してやり 配列から読み出しExcelのSheetのCellに入れる時に、数字を数字と認識するのか、文字データー として認識するのかということです。 >■2点目 セルへの記入時に変数の型を気にする必要はほとんどありません。直接の影響 を受けるのは、「セルの表示形式」です。セルの表示形式が「標準」のときは、 Excel が適切と思われる表示形式を自動適用します。 With Range("A1") .NumberFormat = "General" ' // 表示形式 標準 .Value = Val(TextBox1.Value) End With With Range("B1") .NumberFormat = "General" ' // 表示形式 文字列 .Value = Val(TextBox1.Value) End With With Range("C1") .NumberFormat = "0" ' // 小数点なし数値 .Value = Val(TextBox1.Value) End With つまり、変数のキャスト等ではなく、出力先のセルの「表示形式」がポイント になります。 ■下のように書いたら、Label_Name_は、String型では宣言出来ません、オブジェクト型がなんちゃらとのエラーでした。 ところで >セルの表示形式が「標準」のときは、の意味が良く分かりません。 これはセルに値を入れてやるときに何らかの指定が必要ということですか。 ============================================ Private Sub Inputdata(ByVal Sname As String) Dim Rowpos As Integer Dim Colpos As Integer With Worksheets(Label_Name_) .Cells(Rowpos, Colpos + 1) = 番号T1.Text .Cells(Rowpos, Colpos + 2) = 番号T2.Text End With End Sub
- QQQ_rrr
- ベストアンサー率0% (0/0)
kenpon24さん、回答有難うございます。 フォームのラベル、テキストボックス、コンボボックスに入力されたString型、整数型等の変数を Excelのシートに代入してやる場合に、そのオブジェクト(例えばラベル)と入力されたデーター を配列に保存してやり、連続的にラベルとそのデーターを処理したいという考えです。 皆さんは、このようにフォームに入力されたデーターを、Excelのシートに代入してやる場合に どのようにしてやっているのでしょうか。 実は今、ラベルの名前をサブルーチンでExcelに貼り付け、データーも同じように処理をしようとしているのですが、 どうもラベルの名前はString型ではエラーになります、色々と調べるとどうもオブジェクト型で とってやらないと駄目なようですが、オブジェクト型そのものとか、宣言の仕方とか、処理を仕方が全く分かりません。 ラベルの名前だけを配列にとってシートに配列から代入、次にデーターのみを配列に入れてからシートに配列から代入 という処理を考えていますが、ラベルをString型で宣言してもエラーばかりで、途方にくれています。 一体皆さんはどうしているのですか。 IDとパスの入力でけられたので別のIDで入っています。
- KenKen_SP
- ベストアンサー率62% (785/1258)
こんにちは。 余談ですが、1つのスレッドに複数の質問を書かれると回答が長く、面倒になり ますので、1つに絞った方が回答を得やすいと思いますよ。 ■1点目 基本的な回答は #1 ご回答と同じです。加えて VB6 のようなコントロール 配列を意味するのであれば、VBA では使えません。製品版 VB と VBA の 差別化のためです。 > テキストボックス、コンボボックスには「文字型」、「数字型」が有ります。 コントロール自体にそのような型はありません。あるのは、そこに入力された データを文字列として扱うのか、数値として扱うのかです。文字列で扱う場合、 Dim s As String s = TextBox1.Text または、 Dim s As String s = TextBox1.Value のいずれか。Text, Value プロパティー共に String 型の値が返ります。 数値として扱いたいのなら、 Dim n As Double n = Val(TextBox1.Value) などのように Val, あるいは CDbl 等の型変換関数を使って数値変換してやり ます。要するに、プログラマの側でどう扱うのかを決めるということです。 もっとも VBA では数値型変数に代入する時点で型のキャストが自動で行われる ため、型変換関数を使う必要は必ずしもありません。ただし、型を意識して プログラムを書くことは非常に大切ですよ。ちゃんと書きましょう。 ■2点目 セルへの記入時に変数の型を気にする必要はほとんどありません。直接の影響 を受けるのは、「セルの表示形式」です。セルの表示形式が「標準」のときは、 Excel が適切と思われる表示形式を自動適用します。 With Range("A1") .NumberFormat = "General" ' // 表示形式 標準 .Value = Val(TextBox1.Value) End With With Range("B1") .NumberFormat = "General" ' // 表示形式 文字列 .Value = Val(TextBox1.Value) End With With Range("C1") .NumberFormat = "0" ' // 小数点なし数値 .Value = Val(TextBox1.Value) End With つまり、変数のキャスト等ではなく、出力先のセルの「表示形式」がポイント になります。 ■3点目 意味がよくわかりません。配列のデータを ComboBox コントロール等に表示 させたい、つまり複数列、複数行をもつデータを表示したいのであれば、 List プロパティーをヘルプで調べてみてください。
- kenpon24
- ベストアンサー率64% (66/102)
申し訳ありません。何回読んでもよく意味が理解できません。。 >フォームに貼り付けた、ラベル、テキストボックス、コンボボックスの名前を配列にして With UserForm1 For i = 0 To .Controls.Count - 1 Debug.Print .Controls(i).Name Next End With で得られる名前のことですか? であれば >その数自体も変数にして はUserForm1.Controls.Countで得られる値になるかと。 >特に疑問 の記述からすると、上記とは違う回答を求めているようにも思えるのですが、 もう少し具体的にどこの名前を配列にしたいのかを明記していただけないでしょうか。 テキストボックス・コンボボックスは Textプロパティで得られる値がString型、Valueプロパティで得られる値が数値ならDouble型が返ると思います。 最後の質問も何をしたいのかよく読み取れませんでした。。