• ベストアンサー
  • 困ってます

複数コントロールテキストの同一セルへの入力

はじめまして。 エクセルVBAについて質問させて頂きます。 ユーザーフォームにラベル・テキストボックスそれぞれ1~6があって ラベルのキャプションとテキストボックスのテキストをセル同一セルに 入力したくて With UserForm1 Range("A1") = .Label1.Caption & .TextBox1.Text & .Label2.Caption & .TextBox2.Text _ & .Label3.Caption & .TextBox3.Text & .Label4.Caption & .TextBox4.Text _ & .Label5.Caption & .TextBox5.Text & .Label6.Caption & .TextBox6.Text End With と、このように記述したのでが、これをもっと簡潔に書く方法はございませんでしょうか? ご教授よろしくお願いします。

  • OGN
  • お礼率100% (17/17)

共感・応援の気持ちを伝えよう!

  • 回答数3
  • 閲覧数372
  • ありがとう数3

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

  • ベストアンサー
  • 回答No.2
  • mt2008
  • ベストアンサー率52% (885/1701)

簡潔かと言われると微妙ですが、↓なら見た目スッキリはします。 With UserForm1   For i = 1 To 6     Range("A1") = Range("A1") & .Controls("Label" & i).Caption     Range("A1") = Range("A1") & .Controls("TextBox" & i).Text   Next i End With

共感・感謝の気持ちを伝えよう!

質問者からのお礼

ご回答ありがとうございます! お礼を入力したつもりが出来ていなかったみたいで 申し訳ありません。 .Label1.Caption & .TextBox1.Text ~とダラダラしてたものが かなりすっきりしました! 本当にありがとうございました。

関連するQ&A

  • VBAでコントロール配列を持つことは可能ですか?

    Excel2002、OSはXPです。 VBではコントロールに配列を持つことが出来ましたが、 VBAでコントロール配列を持つことは可能でしょうか? やりたいことはユーザーフォームにラベルを100個ぐらい貼り付けて、 テキストボックス入力した値がCell(i,1)と等しければ、 i番目のラベルのCaptionに文字を入力したい。という感じです。 もしVBのようにコントロール配列を持てれば、 If TextBox1.text=Cells(i,1) Then Label(i).Caption="~~" という風に出来るのですが、どうも配列の設定がVBのようにできません。 プロパティにINDEXが無いですし、オブジェクト名を同じにしたら エラーとなってしまいますし。。 もし出来ないのであれば、何か回避策のようなものはないでしょうか? 力技で100個IFを書けば出来ることは出来るのですが・・ If TextBox1.text=Cells(i,1) Then If i = 1 Then Label1.Caption="~~" ElseIf i=2 then Label2.Caption="~~" ・・・・

  • textboxとlabelのコピー

    EXCEL2003のVBAで簡単なformを作成していますが、初心者なのでお知恵をお貸しください。 マルチページのpage1にtextbox1と2、label1と2を設置しています。 で、ここに(page1)にコマンドボタンを設置してこれを押すとPAGE2のtextbox3と4、label3と4にコピーされますが、もしtextbox3と4、label3と4に既に入力されているなら、textbox5と6、label5と6へ入力しなさいというコードはどうしたらいいのでしょうか?

  • Visual Basic 6.0でのLabelについて質問です。

    Visual Basic 6.0でのLabelについて質問です。 今、Labelが100個あるとして、 どのラベルが押されても同じ処理をさせたい場合、どのようにプログラムを組めばよいかわかりません・・・ そこで、 Private Sub Label2_Click() Label1.Caption = "停止" End Sub Private Sub Label3_Click() Label1.Caption = "停止" End Sub Private Sub Label4_Click() Label1.Caption = "停止" End Sub    ・    ・    ・ Private Sub Label101_Click() Label1.Caption = "停止" End Sub のように100個繰り返しても良いのですが、だらだら長くなってしまうので、スマートに 処理できる方法を探しています。 もしご存知の方がいらっしゃいましたら教えていただけないでしょうか? よろしくお願いします。

その他の回答 (2)

  • 回答No.3

テキストボックスでは既定のプロパティがTextで、 ラベルではCaptionのようですので Sub Macro()   Dim objControl As Object      For Each objControl In UserForm1.Controls     Range("A1").Value = Range("A1").Value & objControl   Next End Sub 上記でも動作するようです。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

ご回答ありがとうございます。 返信が遅くなってすいません。 ご提案いただいたものを試してみました。 うまくセルに入力することができましたが、思っていたものは ラベル1→テキストボックス1→ラベル2→テキストボックス2… といった感じで、これで試してみると ラベル1~6→テキストボックス1~6 といった感じになってしまいました。

  • 回答No.1

コントロール配列にすればループを使って文字列を作り上げることはできますが、 簡潔になるかといわれると、6個だと微妙なところですね。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

ご回答ありがとうございます。 返信が遅くなってすいません。 確かに6個だと微妙でしたが、使用個数は増えるかもしれないので コントロール配列を使って頑張ってみます。

関連するQ&A

  • VBA 整数加算の方法

    初歩的なことだとは思いますがエクセルVBAで ラベル1にテキストボックス1~40までの 総数(整数)を加算する時はLabel1=Val(Textbox1)+val(Textbox2)+・・・ +Val(Textbox40)とゆうふうに並べるのではなく簡単に する方法を教えていただきたいのですが?

  • VB初心者です

    計算結果が"7"の時に限り、「当たり!」と表示される、ちょっと意味不明な計算機を作っています。 現在、下記のように書いてますが、何故かうまくいきません。(当たりが表示されない 何故でしょうか?お助けください。。m(_ _)m Private Sub Command1_Click() Label1.Caption = Str(Val(Text1.Text) + Val(Text2.Text)) Label3.Caption = "+" Label4.Visible = False '画像を隠す。 'いずれかの数字が「7」のとき、メッセージを表示する。 If Label1.Caption = "7" Then Label4.Visible = True End If End Sub Private Sub Command2_Click() End End Sub Private Sub Command3_Click() Label1.Caption = Str(Val(Text1.Text) * Val(Text2.Text)) Label3.Caption = "*" End Sub Private Sub Command4_Click() Label1.Caption = Str(Val(Text1.Text) - Val(Text2.Text)) Label3.Caption = "-" End Sub Private Sub Command5_Click() Label1.Caption = Str(Val(Text1.Text) / Val(Text2.Text)) Label3.Caption = "/" End Sub

  • VBA 年月日から日曜日に当たる日の文字を赤くする

    よろしくお願いします。 TextBox2に年号(西暦) ComboBox1に月 TextBox7に日 を、入力します。 入力方法は、Label1からLabel31を押下して日付けを入れます。 したときに各Labelの内、日曜日に該当するLabelならCaptionの文字を赤くする。 Private Sub Label1_Click() TextBox7.Value = 1 ’もし1日が日曜日ならLabel1のCaptionの文字を赤くする End Sub Private Sub Label2_Click() TextBox7.Value = 2 End Sub Private Sub Label3_Click() TextBox7.Value = 3 End Sub ~ Private Sub Label29_Click() TextBox7.Value = 29 End Sub Private Sub Label30_Click() TextBox7.Value = 30 End Sub Private Sub Label31_Click() TextBox7.Value = 31 End Sub 追 ComboBoxで日付けをダウンリスト表示したかったのですが、1列表示で 長くなってしまいます。 ※2列に表示する方法を知らないもので、Labelで2列表示にしました。 もし、ダウンリストを2列表示できるのであれば、ぜひともご教示をお願いします。 無識なものですみません。 何卒宜しくお願い致します。

  • ユーザーフォームの入力先が複数さらに集計手に負えません教えて下さい

    Worksheets("全体売上").Activate If TextBox1 = 1 Then myDCount = Range("あ").Rows.Count Range("あ").Cells(myDCount, 2).EntireRow.Insert With Range("あ") .Cells(myDCount, 2).Value = TextBox2 .Cells(myDCount, 3).Value = TextBox3 .Cells(myDCount, 5).Value = TextBox4 .Cells(myDCount, 6).Value = TextBox5 .Cells(myDCount, 9).Value = TextBox6 .Cells(myDCount, 13).Value = TextBox9 .Cells(myDCount, 7).Value = TextBox10 .Cells(myDCount, 8).Value = TextBox11 .Cells(myDCount, 21).Value = TextBox12 End With Me.Hide ElseIf TextBox1 = 2 Then myDCount = Range("い").Rows.Count Range("い").Cells(myDCount, 2).EntireRow.Insert With Range("い") .Cells(myDCount, 2).Value = TextBox2 .Cells(myDCount, 3).Value = TextBox3 .Cells(myDCount, 5).Value = TextBox4 .Cells(myDCount, 6).Value = TextBox5 .Cells(myDCount, 9).Value = TextBox6 .Cells(myDCount, 13).Value = TextBox9 .Cells(myDCount, 7).Value = TextBox10 .Cells(myDCount, 8).Value = TextBox11 .Cells(myDCount, 21).Value = TextBox12 End With Me.Hide と続いてます。フォームから各範囲には入力が出来るようになったのですが、文字列となってしまい計算が出来ません。 数値として入力をしたいのが、TextBox2、TextBox3、TextBox4、TextBox9、TextBox12です。 TextBoxからセルに転記させる時に数値に変換する方法はありますでしょうか? End If Unload Me End Sub 又、セル範囲が”あ”~”し”とあります。例、範囲 あはB1~V2です。(1行目は項目)それぞれ条件に合った時にTextBoxから行を足してセルに入力されるのですが 行が変動するのでsumでは計算出来ません。ユーザーフォームのTextBox12からセルに入った数値の合計を求めるプログラムがありましたら、どなたかお知恵を下さい。 ちなみにセル範囲あの時、TextBox12はV2に入ります。範囲い~しの時も教えて頂きたいです。同じシートで入力される範囲が12か所あるので私では分りません。よろしくお願いします。

  • Labelコントロールで"&"が"_"に変換される

    こんにちは。 いつもお世話になっております。 早速ですが質問させて下さい。 内容はタイトル通りなのですが、 Labelコントロールのキャプションに"&"をセットすると "_"に置き換わってしまいます。 --------------------------------------------- Private Sub Command1_Click() Label1.Caption = "test & test" Debug.Print "test & test" Debug.Print Label1.Caption   End Sub --------------------------------------------- 上記でフォームのラベルには"test _test"と表示されてしまいます。 Debug.Printを使用した結果は"test & test"と表示されるのですが。 原因をご存知の方がみえましたらご教示下さい。 <環境> Windows 2000 , VB6.0

  • コントロール配列と同じような扱い方

    TextBox1、TextBox2、TextBox3・・・・TextBox10 と10個のテキストボックスにVB6で使っていたコントロール配列と同じような処理の仕方をコードで教えていただけませんか。 for i=0 to 9 TextBox(i).Text=i next i 上記のコードをVB.NETで書くとすれば、どのように書けばいいかということさえわかれば、なんとか頑張れる気がします。

  • テキストボックス値をシートセルに連続して入力

    リストボックスあ行氏名より選択しテキストボックス1&#65374;6の値を実行2クリックでsheet1"E1"から順番に入力されるがか行選択のテキストボックス値1&#65374;4を順番に"E7"から入力させたいができるでしょうか。ちなみに下記の方法しかわかりません。また、実行2を押すと同時にテキストボックスを空白にしたいのですが。どなたかコードが解る方よろしくお願いします。 Private Sub 実行2_Click() With Worksheets("入力") .Range("E1") = TextBox1.Value .Range("E2") = TextBox2.Value .Range("E3") = TextBox3.Value .Range("E4") = TextBox4.Value .Range("E5") = TextBox5.Value .Range("E6") = TextBox6.Value .Range("E7") = TextBox7.Value .Range("E8") = TextBox8.Value .Range("E9") = TextBox9.Value .Range("E10") = TextBox10.Value End With End Sub

  • excel 2003 マクロですっきりさせたい

    お世話になります。 ユーザーフォーム上の テキストボックス 商品名_1の値が空白になったら ラベルも空白にするというマクロを組みました。 ラベルがたくさんあり、何かすっきりとできる方法があれば 教えてください!>< よろしくお願いします。 Private Sub 商品名_1_Change() If 商品名_1.Value = "" Then Label1_1.Caption = "" Label1_2.Caption = "" Label1_3.Caption = "" Label1_4.Caption = "" Label1_5.Caption = "" Label1_6.Caption = "" Label1_7.Caption = "" End If End Sub

  • ExcelVBAでメーラー本文へデータを送る場合

    エクセルで日報入力をフォームで入力し、フォーム上にあるデータをシートへ移行させるのと同時にデータ内容を管理者へメール送信しようとしているのですが、項目は3つその項目ごとに内容があります。 メーラーの本文中にデータを送った際に 項目1 1の内容 項目2 2の内容 項目3 3の内容 という感じで改行させたいのですが、改行せずだらだらと連続した状態になってしまいます。 項目名はLabel1&#65374;3 内容はTextBox1&#65374;3まであります。 別のLabelへ試しに Label4.caption=Label1.caption &Chr(13)& TextBox1.Text &Chr(13)& ... としてみると、Label4では改行できております。 この&Chr(13)& はマクロ上での改行処理なのでメーラーには対応しないのはわかるのですが、これに代わる記述があれば教えていただきたいのです。 また、他の方法で改行情報も持っていけることができるのであれば、ご教授よろしくお願いいたします。

  • VBでタイピングゲーム作成

    Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged If TextBox1.Text = Label1.Text Then Label1.Text = "haradamunetoki" Label2.Text = "原田宗時" TextBox1.Text = "" Else Label3.Text = "違います" Private TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged End If If TextBox1.Text = Label1.Text Then Label1.Text = "katakurakojuro" Label2.Text = "片倉小十郎" TextBox1.Text = "" Else Label3.Text = "違います" End If ――最初ラベル1にはdatemasamune、ラベル2には伊達政宗と表示してあって、主に判断の基準となるのはラベル1ですが、 最初のEnd If文までの間で繰り返しのような感じになってしまっていて 次の片倉小十郎に行くことができません。 先生に話しを聞いたところ、文法をよく理解していないとのこと…。 次のif文にいくにはどうしたらいいのでしょうか?