• ベストアンサー

フォームに入力した回数だけ文字表示できない・・・

VBAでフォームを使ったものでやりたいことがあるのですがうまく出来なく悩んでいます。 フォームで入力した値をそれぞれカンマで区切って入力した回数だけ文字を表示したいのですがどうすればよいでしょうか? おそらくSplit関数を使えばよいかと思いますが・・・ 例えばフォームに「A, B, C, D」と入力します。 そのフォームに入っている回数だけ繰り返しA1から下に 「私はAです」 「私はBです」 「私はCです」 ・・・・・といった具合に繰り返して文字を出したいのですが出来ますでしょうか?

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

  • ベストアンサー
回答No.4

'フォームに設置したTextBox1に入力したデータをsheet1へ書き出します。 Private Sub 分割()  Dim i As Integer  Dim w1, w2 As String  Dim sh_name As String 'シート名格納用  Dim x As Integer 'セルの座標(列)用  Dim y As Integer 'セルの座標(行)用  Dim buf As Variant '分割データ格納用  sh_name = "sheet1" 'データを書き出すシート名設定  x = 1 'セルの座標(列)設定  y = 1 'セルの座標(行)設定  w1 = TextBox1.Text  buf = Split(w1, ",")  If UBound(buf) < 0 Then   MsgBox "データがありません。"  Else   For i = 0 To UBound(buf)    If Trim(buf(i)) <> "" Then 'ブランクの場合は無視     w2 = "私は" & buf(i) & "です"     Sheets(sh_name).Cells(y, x).Value = w2     y = y + 1    End If   Next i  End If End Sub

komarimono
質問者

お礼

ありがとうございます!皆さんのおかげで出来ました

その他の回答 (3)

回答No.3

>Ubound(a)-1回 違います。 #1のソースでも意識したけど ReDim a(2) とかいう配列で使える要素は a(0),a(1),a(2) の3つ UBoundで返るのは要素数の3じゃなくて最大添字の2なので, 0からUBound(a)までのUBound(a) + 1回が正解。 念のため。

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

下記あいまい。補足のこと。 >フォームに入っている回数だけ とは?A,B,C,Dならそれぞれ1回使って、計4度ということか。 Splitして、A,B、C、Dは配列に入るが、 "私は" & a(i) & "です" を0からUbound(a)-1回繰り回せば済むことでは 。 >を出したいのですが どういう風に出すことを考えているのか。何かコントロール上か?

回答No.1

Option Explicit Private Sub CommandButton1_Click() Dim Strings() As String Dim str As String Dim i As Long '「フォームに入力」の表現が曖昧だったため,フォームにテキストボックスを貼り付けた。 Strings = Split(TextBox1.Text, ",") For i = 0 To UBound(Strings) ' Stringsの書式をもっと明確に定義するまではTrim関数を通したりの処理をすべきではない ' 厳密に定義せず使うのは「有害」とまで考えている。 ' したがって質問文の入力内容を使うと表示に半角空白まで含まれる ' 私はhoge,fugaです。というような表記が出来ないとか。 ' 個人的には '「"A","B","C","D"という風に二重引用符で括る形式とし、 ' 項目の文字列として"を入れたい場合\"と書く。 ' 引用符で括ることが出来るのはUS-ASCIIで定義された制御文字を除く全ての文字である」 'というようなのが好き Cells(i + 1, 1).Value = "私は" & Strings(i) & "です。" Next End Sub

関連するQ&A

  • Excel VBA ある値が入力されたときだけユーザーフォームを出したいです

    ExcelのVBAを教えてください。 D15は、リストで入力する値を選択できるようになっています。 D15で選択された値によって、B15に反映されるようになっています。 たとえば、 D15の値をリストで105を選んだら、B15に「AAA」と入り、 D15の値をリストで109を選んだら、B15に「ccc」と入ります。 これらは、B15にIF関数が入っていて制御されています。 ところが、D15の値をリストで108と選んだ時だけ、B15に「BBB」と入る場合と「DDD」と入る場合の2パターンあり、これは人間の判断でどちらにするか考えるので、IF関数を使えません。 なので、 D15のリストボックスで108を選んだときだけ、 ユーザーフォームを出し(UserForm1.Show)、ユーザーフォームにBBBとDDDのコマンドボタンがあって、Tabでコマンドを選択し、Enterで確定し(マウスは使いたくない)、確定したコマンドの値をB15に反映させるようにしようと思いました。 ・・・が、ユーザーフォームを出すタイミングのVBAの組み方がわかりません。 D15の値をリストから選択する・・・というのは、他の方が作った仕組みなので変えることはできません。

  • 文字を入力すると違うシートに順番に表記する方法

    ①シート1のセルC5に文字を手動で毎回入力すると、シート2のセルB5から下の列に順番に文字を自動で転送するVBAなどはどの様にすれば宜しいでしょうか? ②シート1のセルC6に文字を手動で毎回入力すると、シート2のセルC5から下の列に順番に文字を自動で転送するVBAはどの様にすれば宜しいでしょうか? ③同じ様な法則でシート1のセルC7に文字を手動で毎回入力すると、シート2のセルD5から下の列に順番に文字を自動で転送、シート1のセルC8に文字を手動で毎回入力すると、シート2のセルD5から下の列に順番に文字を自動で転送とする場合はどの様にすれば宜しいでしょうか? ④シート1のセルC5、C6、C7、C8に文字を手動で入力すると同じシート1の左隣のセルB5、B6、B7、B8に入力した回数を自動で表記する方法はありますか?

  • セルに入力されている文字をくっつけたい。

    エクセル2010です。 よろしくおねがいします。 セルE15~E23に入力されている文字を ひとつにくっつけて 表示したいんですが・・・ 全部文字が入力されているときも あるのですが 入力がないときまあります。 その場合は D1には 何も表示しないようにしたいのです。 例えば E15にA       E16にB      E17にC  E18~E23は入力なしとして D1に ※文字です。→A・B・C と 一つのセルに表示させるには どういう関数になりますでしょうか? よろしくお願いします。

  • ExcelVBAでセルに入力されている種類と文字列を表示したいのですが

    ExcelVBAでセルに入力されている種類と文字列を表示したいのですが… Excelで、例えば下のように文字が入力されているとき、 A1:あああ B1:あああ C1:いいい D1:あああ E1:ううう F1:いいい このときにセルに入力されている種類(数)とその文字(この場合だと、3種類:『あああ』、『いいい』、『ううう』)をメッセージボックスで表示させたいのですが、VBAで作るのは可能でしょうか?

  • フォームに入力後、別のフォームに値を表示

    すみません。教えて頂けないでしょうか?(初心者です) <input type="text" name="a" id="aaa" size=20>  ↓ <input type="text" name="b" id="bbb" size=20>  ↓ <input type="text" name="c" id="ccc" size=20>  ↓ このような感じで作成し、aとbのフォームに値が何か 入力されたら自動的に、例えばaとbの値を足してcのフォームに その結果を表示する様にしたいのですが、記述の仕方が なかなか見つけられません。

    • 締切済み
    • PHP
  • Eecelで指定されたセル番地に入力される方法を教えてください

      A  B  C  D  E 1    A1  1 2    A2  2 3    A3  3 4    A4  4 上記のようなシートがあったとします。 B列にセル番地が入力されており、C列には数値が入力されています。 A1にC1の値=1 A2にC2の値=2 という具合に、 B列に入力されているセル番地に隣のC列の値が入力されるようにしたいのですが、どうもうまくいきません。 いい方法があったら教えてください。よろしくお願いします。 ※できれば関数で何とかしたいと思っています。 OS:Windows XP Excel2003です。

  • 入力値をListボックスに表示させたい。

    (仕様1) ユーザーフォーム1でテキストボックス1~5に 入力した値をListボックスに表示させたい。 例えば textbox1=A,textbox2=B,textbox3=C・・・ と入力されたら、 A B C D E のように順に横方向一列に表示させるようにしたいです。 (仕様2) これをコマンドボタン1を押す度にリストボックス1に新しく追加されていく 様にしたいのですが、できますでしょうか。 例えば、 A B C D E A C D B E (テキストボックスに入力後ボタン1を押す) A C B D E (テキストボックスに入力後ボタン1を押す)

  • VBA フォームに入力したものを検索しエクセルへ

    わたしはVBA初歩で現在勉強しているものです。 VBAでユーザフォームに検索窓を設置しました。 下記のことをできるようにしたいです。 (1)フォームの検索窓に文字を入力 (2)フォームのボタンを押す (3)googleで(1)の文字を検索(サイトはshowしなくてよい) (4)検索結果のすべてを   A列 番号   B列 タイトル   C列 URL というように順次流していく。 ↑このようなものを作りたいのですが、どのようなコード記述をすればよいでしょうか? 教えてください。 よろしくお願いいたします。

  • エクセルで数字を入力すると別のセルに変換して置換えするには

    すいません 誰かお助けを! A1セルに1、2、3、4のどれか1文字を入力するとB2セルにA、B、C、D(1はA、2はB、3はC、4はD)に変換した値を表示させたいのですが関数とかサイトをみたのですが 複雑な方法ばかりで入力方法が良く解りません 初心者でも簡単な入力方法を誰か御導きをお願いします 

  • エクセルVBAのヒントをください

    エクセルのある列に、文字列が入っているとします。 たとえば、Aであったり、Cであったり、A,C,Fとカンマ区切りで複数の文字列(個数は不定) が入っていたりします。 このとき、一行に一つの文字列しか含まないように、カンマで区切られた文字列を展開し、 複数行に分けて格納したいと思っています。 たとえば、一番上の行のセルにA、二番目の行に「C,D,A」、三番目の行にB、四番目の行に 「E,A」と入っていたら、各行に一文字列のみ入るように、上からA、C、D、A、B、E、Aという行を 作りたいと思います。各セルに含まれる文字列の個数は不定で、規則性はありません。 基本的に、 (1)各セルに含まれているカンマの数を調べる (2)カンマの数だけ次の処理を繰り返す  ・行挿入   ・最初のカンマの位置を調べる   ・先頭からカンマまでを切り取る   ・上記の値をセルに入力  ・行挿入   ・2番目のカンマの位置を調べる   ・1番目のカンマの位置+1から2番目のカンマの位置まで切り取る   ・上記の値をセルに入力 上記をカンマの数だけ繰り返す。 といった具合にしていくのだと思いますが、このような処理をするのに はどの程度のVBAのスキルが必要ですか? 上記のヒントや、参考になるサイト、書籍があればご教授ください。

専門家に質問してみよう