- ベストアンサー
VBA ユーザーフォームのテキストから列を判別
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
ボタン名は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
その他の回答 (2)
- kybo
- ベストアンサー率53% (349/647)
>For後、if 条件(1)(S="")が終了したため、Elseの条件(2)の時には ”I ”は”2 ”になっている ということで合っていますでしょうか。 その通りです。Elseの条件のときはIは2以上になってます。
お礼
度々ありがとうございます!! より理解を深めることができました。 本当にありがとうございます!!!
- watabe007
- ベストアンサー率62% (476/760)
>文字列&”∞” の関数を入力したいです。 お試し下さい。 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
お礼
ご回答ありがとうございます!! コードの表記も全て記載頂き、本当にありがとうございました。 やっている事を理解するのに時間がかかり、御礼が遅くなりました。 私の知識では完全に理解することができていないのですが、、、 ReDim で v(&対象のセル)をいくつも呼び出せること、そして Join を使ってそれを並べる関数にする。 どちらのステートメントも初めて知りました!!! v(i) と記載する方法や、Variant というのも初めてみました。。。 こんな風にかっこよく書けるようになりたいです。 本当にありがとうございました!!
補足
ご回答ありがとうございます!! コードを全て書いて頂き、ありがとうございます!!!! 関数を入れる時には、エクセル上で作成した関数を、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 ”になっている ということで合っていますでしょうか。 何卒宜しくお願い致します。