• ベストアンサー

表記方法

ACCESSVBAでの質問です。 入力項目を10箇所用意して、名前を「Search1」~「Search10」と付けています。 このボックスのNULLチェックをループを使い行いたいのですが、以下の書き方だとsearchには文字で"search1"と入ってしまい、ボックスの値を取ることが出来ません。 search1~10の値を取得するにはどのように書けばいいのでしょうか。 よろしくお願い致します。 Do While counter <= 10 Dim search As String search = "search" & counter If Check_Numeric(search) = False Then error = "NULL" End If counter = counter + 1 Loop

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

  • ベストアンサー
  • maro200
  • ベストアンサー率45% (15/33)
回答No.2

こんにちは。 3行目をこう変えるだけでよいのではないでしょうか。 (Meは、Formです。ここをForm名に置き換えてもよいです。) ↓↓↓↓↓ search = Me("search" & counter)

amateur3
質問者

お礼

きっと簡単な方法があるはずだと思いながらも、全然わからなくて困っていました。 本当に助かりました。ありがとうございます。

その他の回答 (1)

  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.1

こんにちは。maruru01です。 コレクションを使用すると出来ます。 とりあえず、全てテキストボックスとして、 (宣言部) Private TextCollection As New Collection (フォームのLoadイベントなどで) With TextCollection   .Add Item:=Me!Search1   .Add Item:=Me!Search2   (中略)   .Add Item:=Me!Search10 End With (Nullチェックするプロシージャで) Dim TempText As TextBox For Each TempText In TextCollection   TempText.SetFocus   If Check_Numeric(TempText.Text) = False Then     error = "NULL"   End If Next TempText (順番に値を配列変数に代入する場合は) Dim Str() As String Dim i As Long ReDim Str(TextCollection.Count - 1) For i = 1 To TextCollection.Count   TextCollection(i).SetFocus   Str(i - 1) = TextCollection(i).Text Next i 詳細はヘルプで"Collection"を参照して下さい。 では。

amateur3
質問者

お礼

いつも有難うございます。 毎回わかりやすく書いて頂きとても感謝しています。 今回はmaro200さんの簡単なやり方で対応しようと思います(笑) また何かあればよろしくお願いします。

関連するQ&A

  • VBA:カウンターの i の値が開放されなくて困っています。

    以下のコードを実行する度に、カウンター i の値がリセット(開放)されずに積算されて困っています。なぜか教えて下さい。宜しくお願い致します。 以下のコードは、簡単に言えばcsvファイルをカウンター i で数えています。したがって、少なくともCSVファイルを一つ作成して実行して下さい。 Option Explicit Dim FiName As String, FoName As String Dim EachFiName As String Dim i As Integer Sub Test() MsgBox i '二回目にこのコードを実行するとiが積算されます。 FiName = Application.GetOpenFilename If FiName = "False" Then Exit Sub Else If Right(FiName, 3) <> "csv" Then MsgBox "Chose a CSV file." Exit Sub End If End If FoName = Left(FiName, InStrRev(FiName, "\", -1, vbTextCompare)) EachFiName = Dir(FoName & "*.csv") Do While EachFiName <> "" i = i + 1 EachFiName = Dir() Loop End Sub

  • 配列のつなげ方

    配列をつなげて文字列にしたいと思っています。 Dim abc() As String Dim i As String Dim namae As String i=0 ここでDBに接続してループでまわしながらデータを取得してきます。 Do while y > z abc(i) = X i = i+1 loop Xはループがまわる毎に違う値がセットされます。例えば1回目のループでリンゴ、2回目のループでミカンといった具合にです。 つまり、abc(0)=リンゴ、abc(1)=ミカン、abc(2)=メロン といった具合にです。 最終的には namae="リンゴ、ミカン、メロン、・・・・"といった具合にnamaeに代入したいと思っています。namae = abc(0) & "," & abc(1) & ","....と やれば実現できるのはわかります。 Xにはデータがいくつはいっているかわかりません。どうやった式をたてれば、実現できるでしょうか?

  • フォルダ内の全てのファイル開く時間短縮の方法

    Excelのマクロを使ってフォルダ内の全てのファイルを開く以下のコードを利用しているのですが(教えてgoo!で教えて頂いたコードです)、ファイル数が10個くらいあるため全部開くのに1分くらいかかってしまいます。 もっと時間を短縮することはできませんでしょうか? Sub OpenAllBook()   Dim FileName As String   Dim OpenedBook As Workbook   Dim IsBookOpen As Boolean   ChDir ("フォルダ名")   FileName = Dir("*.xls")   Do While FileName <> ""    If FileName <> ThisWorkbook.Name Then     IsBookOpen = False     For Each OpenedBook In Workbooks      If OpenedBook.Name = FileName Then       IsBookOpen = True       Exit For      End If     Next     If IsBookOpen = False Then      Workbooks.Open (FileName)     End If    End If    FileName = Dir()   Loop End Sub

  • ループの終わらせ方

    あるboolean配列でtrueなら■falseなら□を表示させ、時間とともにある規則で動かしていくプログラムを組みました。配列の宣言などを省略してますがこんな感じです。 do{ boolean[] box2 = (boolean[]) box.clone(); for ( i = 0; i < box2.length; i++) { if (box2[i]) { // コピーの玉があったら // 右方向に向かって空き箱を探す。 for (int j = 1; j < box.length; j++) { int p = (i + j) % box.length; if (! box[p]) { // 空き箱を見つけたので玉を入れる(trueにする)  box[p] = true; // 元の場所は玉を消す(falseにする) box[i] = false; // box2[i]はもう二度と調べないのでそのまま放置 break;   } }   } } box2 = null; for(h=0; h < box.length; h++){   if(box[h] == false) System.out.print("□"); if(box[h] == true) System.out.print("■"); } r++; }while(box == box && r<20); ちなみに表示結果は □■■□□■□□■□□■ ■□□■■□■□□■□□ □■□□□■□■■□■□ ・ ・ こんな感じになります。ここで質問なんですが、 過去と同じ配置の配列が出てきた時点でwhile文の ループを終わらせるにはどうすればよいでしょうか? 現時点ではループが20回になった時点で止めるようにしてます。

  • 文字列の比較

    いつも参考にさせて頂いています。 基本的なことなのですが、宜しくお願いします。 たとえば文字列"str"の空チェックをするとします。 -------------------以下参考ソース String str = "test"; 1. public static String isBlank(String str) { if(str == null || str.equals("")) { return true; } return false; } 2. public static String isBlank(String str) { if(str == null || str.length = 0) { return true; } return false; } ■1と2の違いって何かありますでしょうか? ■空チェックなら1と2のどちらを使うべきでしょうか? 以上宜しくお願いします。

    • ベストアンサー
    • Java
  • perl:ループのカウンタ変数の値を保持したい。

    While文のループのなかにfor文でループをまわしているスクリプトなのですが、 forの中でカウンタ変数をつくり、ループ回数を計測しております。 またforの中である条件を満たした際に、lastでforを抜け、引き続きWhileのループを継続するという処理をしております。 $i=0; While(○○){ 処理1    for(××){ 処理2 $i++;      if($i >=100){  処理3       last; } } } ここで、一度for文のif文で一度forループを抜け、Whileでループをし、またforループに突入した際に、前回forループでカウントした$iの値を保持したまま、そのつづきから$iのカウンタを動作させたいのですが、$iの値はforループを抜けるとリセットしてしまいます。 このような場合、どうすれば$iの値を保持できますでしょうか。 お詳しい方、宜しくお願い致します。 ※ネストがうまく表現できず、みずらくてスミマセン。

    • ベストアンサー
    • Perl
  • AS3でアニメーションを回数指定でループする方法

    Adobe animate CCを使用しています。 ActionScript3.0で、アニメーション全体を 「3回ループさせて、3回目が終わったらアニメーションをストップ」 させる必要があるのですが、 ActionScript初心者なので、this.stopなどごく簡単なものしか分かりません。 ネットで色々調べている中で出てきた下記コードは ActionScript2.0あたりで書かれたものなのか、 当然のことながら、Adobe animate CCのアクションに貼り付けても うまく動作しませんでした。  //最初の1度だけ、ループカウンタを初期化  if( loop_cnt == undefined )  {   loop_cnt = 1;  }  //ループカウンタを更新  loop_cnt++;  //3回ループした場合は停止  if( loop_cnt > 3 )  {   loop_cnt = 1;   stop();  }  //それ以外はループを継続  else  {   gotoAndPlay( 1 );  } 上記コードをどのように書き直せば Adobe animate CCでうまく動くでしょうか。 ご存知の方がおられましたら、ご教授いただけないでしょうか。 宜しくお願い致します。

  • Do whileでExitせず、ループの最初に戻る方法

    よろしくお願いします。 環境 Excel 2003 Do whileのループ内で、Exitのような記述方法で、ループの最初に戻る方法はありますでしょうか? イメージは以下のような形です。 Sub hoge() r = 0 rr = 5 Do While r < 6 'ここに戻る If r = 3 Then 'ここでDo while の最初に戻る End If Loop End Sub よろしくお願いいたします。

  • チェックボックスのチェック。応用編

    こんにちわ。 チェックボックスがチェックされているかのチェックを行いたいのですが、チェックボックスをデータベースにある内容をループで表示させ、チェックされたデータをPOSTで送信するために少々submitの使い方が違います。 削除ボタンを押すと確認画面がでてOKを押した場合にチェックボックスにチェックされていなければ警告画面を出したいのですが、どうもうまくいきません。 よい方法をご教授ねがえないでしょうか。 ==FORM======================================= <form method ="POST" name="form1" onSubmit="return check()" action ="****" > <% Iterator it =sagyoubi.iterator(); // 検索された行数分ループ while(it.hasNext()){ String item= (String)it.next(); %> <INPUT TYPE="CHECKBOX" NAME="sagyoubii" VALUE="<%= item %>"><a href="****" target="Main"> <% } // end while %> <INPUT TYPE="button" VALUE="削除" style="font-size:18" onclick="if(confirm('これらのデータを削除してもよろしいですか?')) { submit(); }"> </form> ==SCRIPT================================= <SCRIPT TYPE="text/javascript"> <!-- function check(){ var flag = 1; if(document.form1.sagyoubii.checked){ flag = 0; } if(flag){ window.alert('チェックされていません'); return false; // 送信を中止 } else{ return true; // 送信を実行 } } //--> </SCRIPT>

  • Accessでのテキストボックスのv記載方法

    Accessでのvbaを使用したコードの書き方について教えて欲しいです。 vbaを使用したますたメンテナンス(データ管理)のコードをAccessで組んでいるのですがで組んでいるのですがどうも上手くいかないところが多いです。 1. コードという名前のテキストボックス(プロパティ→すべて→名前でつけた名前を使用しています)の入力チェックが上手くいきません。ここでは自作関数を呼び出してif文で空白かどうかチェックしてるのですが コード(テキストボックス)=Nullとなってしまい、""のチェックに引っかかってくれません。どうしたら空白=""になってくれるのでしょうか。 デバッグをしてみたらテキストボックスは常にNull(Variant型)なってるのではなくたまに""(String型)になったりするので何が原因で型が変わってるのかも謎です テキストボックスだから""で空文字判定できると思うのですが… 書いたのは以下のコードです。 わかる方よろしくお願いします。 Public Function EmptyCheck(Koumoku As String) As Boolean '引数で渡された項目が入力されているかチェック If Koumoku = ""Then Koumoku.SetFocus Exit Function EmptyCheck = Ture Else EmptyCheck = False End If End Function Private Sub コード_KeyDown(KeyCode As Integer, Shift As Integer) 'Enterキー押したときに処理を開始する If KeyCode = 13 Then If EmptyCheck(コード) = True Then MsgBox "TextBox &を入力してください。" End If

専門家に質問してみよう