• ベストアンサー

フィールド名に番号を付けてループする処理

いつもお世話になっております。 ソフトは、VB.Netです。 従来ですとIndex番号にカウントした値をいけば問題なかったと思われるのですが、 VB.NetにはIndexが無いため下のようにしましたが、 クリアできません(クリアどころかエラーで落ちます。) With FormName For i = 1 To 35 .Controls.Item("Tx_Day_" + i).Text = "" Next End With どなたかごご存知の方よろしくお願いいたします。

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

  • ベストアンサー
  • Necoron
  • ベストアンサー率16% (1/6)
回答No.1

解決にはならないかもしれませんが・・・ >.Controls.Item("Tx_Day_" + i).Text = "" では型が違うというエラーがでると思います。 文字列としてつなげたいなら、& を使う .Controls.Item("Tx_Day_" & i).Text = "" ついでに Next は Next i としておいたほうがいいかな。 For~Next文がいくつか入っている場合どのForに対するNextなのか わからなくなってしまうので。

noname#63429
質問者

お礼

お返事ありがとうございます。 今回はこの方法を見つけたので、この方法でやりました。 Tx_Day(1) = Tx_Day_1 Tx_Day(2) = Tx_Day_2 for i=1 to 2 Tx_Day(i).text = "" next Nextの横につける[i]にはそういう意味があったのですね知りませんでした。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • VBAのループ処理について

    お世話になっております。 VBAのループについて教えていただきたいです。 更新ボタンを押した際に自動で計算されるプログラムを組んでおります。 計算のモジュールは「Module_g.InputCalc」で引数は(ActiveCell.Row, "支出"または"粗利益")で呼ぶことができます。 現在のコードだと粗利益の部分も支出の計算で入ってしまうため、粗利益に入ったら粗利益の計算がされるようにしたいです。 その時の判定の取り方を教えていただきたいです。 また、支出・粗利益の中の項目は追加していくことがあります。 コード Sub DateUpdate() With Sheets("HOME") Dim i As Integer For i = 7 To .Cells(Rows.Count, 1).End(xlUp).Row Call Module_g.InputCalc(i, "支出") Next End With End Sub

  • For Each  すべてループされない?アクセス

    For Each ctl In Forms(FormName).Controls Debug.Print ctl.Name If ctl.ControlType = acTextBox Then If ctl.Name Like "削除*" Then DeleteControl FormName, ctl.Name End If End If Next ctl こういうループの仕方は、完全型ではないのでしょうか? フォーム上に「削除」で始まるテキストボックスをすべて削除したいのですが 例えば4個あれば、2個のコントロールしか削除されません。 コントロールを削除することにより、インデックスが狂うのでしょうか?

  • オブジェクト名に変数は?

    List1 List2といったオブジェクト名についている「1」とか「2」と言った数字を変数に出来ないのでしょうか? List1.Clear List2.Clear と一つずつ記述するのでなく、たとえば for I=0 to 2 ListI.Clear next i みたいにならないのでしょうか?VB6使ってます ご教授お願いします。

  • VBAコードでシート名を取得したい。

    下記のコードは、指定したExcelブックにある情報をVBAコードを設置したブックに 情報を取得するコードになります。 質問なんですが・・・指定したExcelブックは、予めSheet名までをVBAコードで指定し、 そのSheetの内容を取得していますが、この部分を指定したSheet名ではなく、 Sheet名を取得し、取得したSheet名から自分で選択したSheetを選んび、 そのSheetの内容を取得する様に変えたいと考えています。 取得する側のSheet名が一定の名前になっていない為、 今までSheet名を変えて情報を取得する様にしていたのを 変えずに情報を取得したいと思ったからなんですが・・・ どの様に変えればできるのか初心者のためよろしくお願いします。 できましたら・・・UserForm2を使ってComboboxに取得するSheet名を 一覧化し、そのComboboxからSheet名を選べる様にしたいと思います。 ----------------------------------------------------------------------------------- Public Day As String '全プロシージャーで有効な変数 Sub CommandButton1() If MsgBox(Space(6) & "メールデータを取込みます。よろしいですか?", vbYesNo, "継続確認") = 7 Then Exit Sub Dim LstWb As Workbook Dim LstWs As Worksheet Dim OutWs As Worksheet Dim LstDt As Variant Dim EndRow As Long Dim Day0 As String Dim Day1 As String Dim i As Long Dim j As Integer Dim k As Long Set LstWb = Workbooks.Open(ThisWorkbook.Path & "\テストファイル.xlsm") Set OutWs = ThisWorkbook.Sheets("Sheet1") Set LstWs = LstWb.Sheets("Sheet1") EndRow = LstWs.Cells(Rows.Count, 1).End(xlUp).Row With LstWs LstDt = .Range(.Cells(1, 1), .Cells(EndRow, 5)) End With LstWb.Close Set LstWb = Nothing Set LstWs = Nothing Load UserForm2 With UserForm2 Day0 = LstDt(2, 4) .ComboBox1.AddItem Day0 For i = 2 To EndRow With .ComboBox1 Day0 = .List(.ListCount - 1) Day1 = LstDt(i, 4) If Day0 <> Day1 Then .AddItem Day1 End If End With Next i .ComboBox1.Value = .ComboBox1.List(0) End With UserForm2.Show For i = 1 To 5 OutWs.Cells(1, i).Value = LstDt(1, i) Next i k = 2 For i = 2 To EndRow Day0 = LstDt(i, 4) If Day = Day0 Then For j = 1 To 5 OutWs.Cells(k, j).Value = LstDt(i, j) Next j k = k + 1 End If Next i Set OutWs = Nothing LstDt = Empty UserForm1.Show (vbModeless)End Sub

  • Excel:VBAでコンボボックスを活用する方法

    はじめまして。Excel2000でアンケートシートを作りたいと思っています。 その回答をコンボボックスから選ぶようにしたいのですが、「違う質問だけど同じ選択肢」というのがたくさんあるので簡潔にしたいのです。 このサイト等ネットで調べるとコントロールに変数を持たせる方法として Control(ComboBox & i)とか Me(ComboBox & i) というのを目にしましたが、どちらもこの状態には該当しないのかうまくいきませんでした。 コンボボックスごとにソースを作るしかないのでしょうか? 理想としてはforループでコンボボックスの回数だけ回して、if文でComboBox1と3と4と7には○○○、2と5と6には△△△を表示するようにできたらいいなぁと思っています。 (あくまで理想のソースです。) For i = 1 To 30 If i = 1 Or 3 Or 4 Or 7 Then With ComboBox & i(←ここが知りたいです☆) .Clear .AddItem "非常に重要" .AddItem "重要" .AddItem "少し重要" .AddItem "重要ではない" End With ElseIf i = 2 Or 5 Or 6 Then With ComboBox & i(←ここが知りたいです☆) .Clear .AddItem "はい" .AddItem "いいえ" End With End If Next i いかがでしょうか?☆部分をどうにかすることで解決するのでしょうか?他に方法があったらぜひご教示ください。 そもそもコンボボックスの作り方にも自信がありません。 以前に少しだけVBを経験してますが、ほぼ初心者です。 よろしくお願い致します。

  • リスト間のアイテム移動について

    現在独学でhttp://www4.plala.or.jp/tamo/vb/vb99.htmlの問題の10番を解いてるのですが、どうしてもうまくいきません。 左のリストボックスから右のリストボックスへの1つ1つのアイテム移動はできたのですが、アイテムを複数同時に選択すると違うアイテムが移動したりすべてのアイテムが移動してしまいます。 今のコードは Private Sub Command1_Click() For i = List1.ListCount To 1 Step -1 If List1.Selected(i - 1) = True Then List2.AddItem List1.Text List1.RemoveItem List1.ListIndex End If Next End Sub Private Sub Form_Load() With List1 .AddItem "FreeBSD" .AddItem "Linux" .AddItem "Macintosh" .AddItem "MS-DOS" .AddItem "Slaris" .AddItem "Windows 95" .AddItem "Windows CE" .AddItem "Windows NT" End With End Sub このように指定しています。 解決法がありましたら教えてください。

  • Forループの制御について

    VB 2005,Framework2.0を使用しています。 For文を使ったループについてお尋ねしたいことがあります。 For i As Integer = 0 To 10     ’処理 Next i とあったとします。 そうするとループ変数iが0から10になるまで連続してループを行うのですが、これをある条件の時に現在のループ変数から一つ飛ばして次のループからまた処理を行いたい場合どのようにすれば良いのでしょうか? 例えば0~10回中に、現在5回目で特定の条件が一致したときその次の6回目のループは飛ばして7回目のループから再開したいです。 ちなみにこの様に書いても0から10回必ずループされてしまいました。 Dim TEST(10) As Integer TEST(5) = 1 For i As Integer = 0 To 10 If TEST(i) = 1 Then i = i + 1 End If Next i

  • コンボボックスのマウスホイールを無効にしたい

    DataGridView内にコンボボックスを設定しております。 マウスのホイールボタンは、DataGridViewの縦スクロールに 使いたいのですが、DataGridView内のコンボボックスに カーソルがある場合、コンボボックス内のデータが変わってしまいます。 ユーザー側と打ち合わせた結果、コンボボックスにカーソルが ある時に、マウスのホイールボタンを無効に出来ないかと 言われております。 色々調べてみましたが、私では分からず、教えて下さい。 (サンプルソース) Dim column1 As New DataGridViewComboBoxColumn() With DataGridView1 .Columns.Clear() .Columns.Add("Col01", "列1") With column1 .Items.AddRange(New String() {"Item01", "Item02", "Item03"}) .Name = "Col02" .HeaderText = "列2" End With .Columns.Add(column1) For i As Integer = 0 To 100 .Rows.Add() Next i End With

  • excel散布図のX軸とY軸を入れ替えるVBA

    散布図の軸を入れ替える方法を考えています。(excel2003です。) 散布図は数百枚あり、系列ごとに元データが散在しているので、 元データは触らずに、グラフの軸だけを入れ替えて表示したいのです。 例えば横軸が身長、縦軸が体重の散布図を縦軸を体重、横軸を身長にするイメージです。 xvaluesとvaluesを入れ替えるのだと思い、以下を組んでみたのですが、うまくいきません。 どのように修正すればよいか教えてください。 Sub 軸入替() Dim cht As Chart Dim i As Long, N As Long   Dim sxvalues As Object,svalues As Object With ActiveSheet.ChartObjects For N = 1 To .Count Set cht = .Item(N).Chart With cht.SeriesCollection For i = 1 To .Count          sxvalues = .Item(i).XValues ←ここでエラーが出ます。          svalues = .Item(i).Values          .Item(i).Values = sxvalues          .Item(i).XValues = svalues Next End With Next End With End Sub 以上です。

  • Scripting.Dictionaryについて

    オートフィルタで抽出した値をリストボックスに代入する為の コードがあります。 前任者が書いたコードですが、何とか動作を確認しながら 変更しようとしたのですが、わかりませんでした。 やりたいこと Application.Intersect(SS, SS.Offset(1)).Copyからxに格納した 値をmyList(i, 1) = xでリストボックスに入れたい。 問題点     For i = 0 To UBound(v) - 1 .Item(v(i)) = .Item(v(i)) + 1 'アイテムのカウント Next 上記の後に     For Each v In .Keys i = i + 1 myList(i, 0) = v '8行目の値 myList(i, 1) = x '9行目の値を入れたい myList(i, 2) = .Item(v) '8行目のカウント数 Next が実行される際にvの値が重複を除いて、順番にリストに 入る動作が理解できません。 どなたかアドバイスお願いします。 Private Sub ComboBox1_Change() Dim 開始日 As Date Dim 終了日 As Date Dim i, ii As Long, v, x As Variant Dim Sh1 As Worksheet Set Sh1 = Sheets("日報") Set RR = Sh1.Range("A4").CurrentRegion Set CC = RR.Columns(8) Set SS = RR.Columns(9) 開始日 = DateValue(ComboBox1.Value) 終了日 = DateSerial(Year(開始日), Month(開始日) + 1, Day(開始日)) - 1 RR.Worksheet.AutoFilterMode = False ' B列 開始日から月末までの期間を抽出 RR.AutoFilter Field:=1, _ Criteria1:=">=" & 開始日, Operator:=xlAnd, _ Criteria2:="<=" & 終了日 Application.Intersect(CC, CC.Offset(1)).Copy '8行目をコピー With New DataObject .GetFromClipboard v = Split(.GetText, vbCrLf) 'vに代入 Application.Intersect(SS, SS.Offset(1)).Copy '9行目をコピー .GetFromClipboard x = Split(.GetText, vbCrLf) 'xに代入 End With With CreateObject("Scripting.Dictionary") For i = 0 To UBound(v) - 1 .Item(v(i)) = .Item(v(i)) + 1 'アイテムのカウント Next ReDim myList(1 To .Count, 2) i = 0 For Each v In .Keys i = i + 1 myList(i, 0) = v '8行目の値 myList(i, 1) = x '9行目の値を入れたい myList(i, 2) = .Item(v) '8行目のカウント数 Next ListBox1.ColumnCount = 3 ListBox1.List = myList() End With RR.Worksheet.AutoFilterMode = False RR.Worksheet.Application.CutCopyMode = False End Sub

専門家に質問してみよう