• ベストアンサー

VBA ユーザーフォームのテキストから列を判別

VBAの質問です。エクセルは2007を使用しています。 ≪やりたい事≫ ユーザーフォームに入力したアルファベットから列を判別して、 アクティブセルに 文字列&”∞” の関数を入力したいです。 詳細は画像をご確認頂ければと思います。 何卒宜しくお願い致します!!

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

  • ベストアンサー
  • kybo
  • ベストアンサー率53% (349/647)
回答No.1

ボタン名はCommandButton1、テキストボックス名はTextBox1とします。 Private Sub CommandButton1_Click() Dim I As Integer, T As String, S As String T = TextBox1.Value For I = 1 To Len(T) If S = "" Then S = "=" & Range(Mid(T, I, 1) & ActiveCell.Row).Address(False, False) Else S = S & "&""∞""&" & Range(Mid(T, I, 1) & ActiveCell.Row).Address(False, False) End If Next I ActiveCell.Value = S End Sub

jjnnkk
質問者

補足

ご回答ありがとうございます!! コードを全て書いて頂き、ありがとうございます!!!! 関数を入れる時には、エクセル上で作成した関数を、FormulaR1C1= で 記載する方法しか知らなかったので、テキストボックスの中を  Len(T) と記載できること、Rangeの中にMid などの関数 (VBA上では関数と言わないのかもしれませんが。。)を組み込む事が できるの事など、さまざまな個所が大変勉強になりました! もちろんベストアンサーで、御礼を申し上げたいのですが、 コードの中で教えて頂きたい個所があり補足を記載させて頂きます。 もしお時間ございましたらコメント頂きたいです。図々しく申し訳ありません。 ≪質問≫ テキストボックスに2文字入力した場合の For ~後 S = "=" & Range(Mid(T, I, 1) & ActiveCell.Row).Address(False, False) ■ここで S がテキストボックスの中身1文字目を判別した数式になる Else S = S & "&""∞""&" & Range(Mid(T, I, 1) & ActiveCell.Row).Address(False, False) ■ここで S がテキストボックスの中身1文字目と2文字目を判別した数式になるのかと思うのですが、ここでの I は ”1 ”ではなく”2 ”になっているのでしょうか。 For後、if 条件(1)(S="")が終了したため、Elseの条件(2)の時には ”I ”は”2 ”になっている ということで合っていますでしょうか。 何卒宜しくお願い致します。

その他の回答 (2)

  • kybo
  • ベストアンサー率53% (349/647)
回答No.3

>For後、if 条件(1)(S="")が終了したため、Elseの条件(2)の時には ”I ”は”2 ”になっている ということで合っていますでしょうか。 その通りです。Elseの条件のときはIは2以上になってます。

jjnnkk
質問者

お礼

度々ありがとうございます!! より理解を深めることができました。 本当にありがとうございます!!!

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.2

>文字列&”∞” の関数を入力したいです。 お試し下さい。 Private Sub CommandButton1_Click()   Dim T As String, v As Variant, i As Long   T = TextBox1.Text   ReDim v(1 To Len(T))   For i = 1 To Len(T)     v(i) = Cells(ActiveCell.Row, Mid(T, i, 1)).Address(0, 0)   Next   ActiveCell.Formula = "=" & Join(v, "&""∞""&") End Sub

jjnnkk
質問者

お礼

ご回答ありがとうございます!! コードの表記も全て記載頂き、本当にありがとうございました。 やっている事を理解するのに時間がかかり、御礼が遅くなりました。 私の知識では完全に理解することができていないのですが、、、 ReDim で v(&対象のセル)をいくつも呼び出せること、そして Join  を使ってそれを並べる関数にする。 どちらのステートメントも初めて知りました!!! v(i)  と記載する方法や、Variant というのも初めてみました。。。 こんな風にかっこよく書けるようになりたいです。 本当にありがとうございました!!

関連するQ&A