エクセルVBAでカウンタ2つを入れ子にしない繰り返し処理の方法

このQ&Aのポイント
  • エクセルVBAの繰り返し処理でカウンタを2つ使い、入れ子にしたくない場合について質問します。現在、入れ子のあるコードを使用していますが、最終的にA列には同じ値が入ってしまいます。そのため、iが1から始まらない場合でもカウンタが2つあるのに入れ子にしない方法を知りたいです。
  • 上記の質問について、iが1から始まらない場合でもカウンタ2つを使いながら入れ子にしないエクセルVBAの繰り返し処理の方法を教えてください。
  • エクセル2013を使用しており、カウンタを2つ使いながら入れ子にしないVBAの繰り返し処理について質問します。最終的にA列に同じ値が入ってしまう問題を解決する方法を教えてください。
回答を見る
  • ベストアンサー

エクセルVBA カウンタ2つを入れ子にしたくない時

皆さんこんにちは。 エクセル2013を使用しております。 エクセルVBAの繰り返し処理について質問させていただきます。 下記のコードですと入れ子があるので A1にi、A3にi・・・・を一通り記載したあと またA1にi+2、A3にi+2・・・を繰り返し 最終的にA列には全て同じ値が入ってしまいます。 (Step 2にしたのはA1:A2のように2行毎の結合セルだからです) -----------------------------------------------------------------    Dim i As Long Dim j As long Dim n As long Dim k As long     i =Userform.textbox1.value     j =Userform.textbox2.value    For k =i To j Step 2 For n = 1 to j Step 2 Range("A" & n) = k    Range(”B”&n)=k+1        Next    Next ---------------------------------------------------------- もしiが1、jが10だとしたら A1に1、B1に2、A3に3、B3に4、・・・A9に9、B9に10 が入るようにするにはどうしたら良いでしょうか。 iが必ず1から始まるのであればまだ分かるのですが そうとも限らないので カウンタはやはり2つ必要だと思うのですが カウンタが2つあるのに入れ子にしないコードの書き方って あるのでしょうか。 いくら本やネットを見ても分かりません。 ご教授いただけると幸いです。

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

  • ベストアンサー
  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.3

>カウンタはやはり2つ必要だと思うのですが  いいえ、B列のセルに入力する値をk+1で増やしているのですから、For~Nextは1つだけでOKです。 Sub QNo8986765_エクセルVBA_カウンタ2つを入れ子にしたくない時() Dim i As Long Dim j As Long Dim k As Long i=UserForm.textbox1.Value j=UserForm.TextBox2.Value For k = i To j Step 2 With Range("A1").Offset(k - i) .Value = k .Offset(0, 1).Value = k + 1 End With Next k End Sub

harumama0430
質問者

お礼

iは必ずしも1で始まるわけではないので Forで指定しなければ・・・ その都度セルのアドレス?も2個ずつ変わるから Forで指定しなければ・・・ と考えていました。 確かにセルはA1から毎回開始するので こちらはオフセットにしたら良かったのですね。 カウンタ2つは絶対必要だと思っていたので 延々と悩んでいました。 大変助かりました、ありがとうございます。

その他の回答 (4)

回答No.5

こんにちは。 まず、単一セルをオブジェクトを捉える場合は、 RangeよりもCellsを使うのが基本的な書法ですし、 今回の課題への答としても有効です。   Cells(i,j).  と、 タイプしてもヒントが出てこないのはトッツキ難いかもですが、 結果的に構文が楽になる場合が多いですし、 他にもいいことあるってこれから気づくこともあるかと思います。 さて、 質問の趣旨を追わずに、「やりたいこと」だけをみて、効率を考えず、 解り易い方法を概念として提示するなら、 ' ----------------------------------------------------------   For n = i To j Step 2     Cells(n, 1) = n   Next n   For n = i + 1 To j Step 2     Cells(n - 1, 2) = n   Next n ' ---------------------------------------------------------- このような記述も、アリ、ですね。 今後、どのような方法を採るにしても、 上記の方法を概念として理解しておくことは重要なステップです。 では、本題 > カウンタ2つを入れ子にしたくない ということだと、セルに代入する数値を基準にループして、 セルの番地の方を演算する形になります。 慣れない内は、 オブジェクトへの参照に失敗することが多いことを気にするせいか、 参照する側を固定する発想に縛られる傾向があるようですが、 以下のように右辺をシンプルにする書き方もあって、 案外スッキリ書くことができます。 ' ---------------------------------------------------------- ' ' 1)「商」と「剰余」で番地を求める方法   For n = i To j     Cells(((n - 1) \ 2) * 2 + 1, (n - 1) Mod 2 + 1) = n   Next n ' ---------------------------------------------------------- VBAのヘルプで「算術演算子」で検索して、 「\ 演算子」「Mod 演算子」 を確認しておいてください。 ' ---------------------------------------------------------- ' ' 2)「偶数/奇数」 ' ' (2進数の1の位が1かどうか)で番地を求める方法   For n = i To j     Cells(n - 1 + (n And 1), 2 - (n And 1)) = n   Next n ' ---------------------------------------------------------- VBAのヘルプで「論理演算子」で検索して、 「And 演算子」 を確認しておいてください。 下段の「ビット単位の比較」を読んでから、 Web上で【二進数】や【ビット演算】について調べてみて下さい。 ' ---------------------------------------------------------- 「偶数/奇数」の判別には、 n Mod 2 が 0 か 1 か、で判別するのが一般的で、 例示1)で示しているのも「偶数/奇数」判別です。 「商」と「剰余」の扱いは、最初は概念的に馴染まずに難しく感じるかも 知れませんが、初級の内にしっかり身に付けておいた方がいいです。 1)が難しいようでしたら2)は後回しにしていいです。 とりあえず以上です。

harumama0430
質問者

お礼

realbeatinさんこんにちは。 1)2)の意味はなんとなく理解出来ましたが 実際使えるか・・というと自信がありません。 もうちょっと勉強してみます。 右辺をスッキリ書くなんて自分では思いつかないです。 いつもありがとうございます。 やはり基礎がないところに知識を詰め込むのに ちょっと無理を感じてきていて やりたい事と出来る事の差がどんどん開いてる感覚です。 エクセルワークシート関数の頭から離れられていないのが 自分でも分かります。 いただいたご回答を次に活かせるくらいの基礎を身に着けるべく 講習会に行ってみようかと本気で悩み中です。 あれだけお世話になっているのにもかかわらず 大した成長も出来なくて本当に申し訳ない・・・ もうちょっと高レベルな質問が出来るくらいには なりたいのですが。。。

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.4

 以下の様な方法もあります。 Sub QNo8986765_エクセルVBA_カウンタ2つを入れ子にしたくない時_2() Dim i As Long Dim j As Long Dim k As Long i=UserForm.textbox1.Value j=UserForm.TextBox2.Value For k = i To j Range("A1").Offset(WorksheetFunction.Floor_Precise(k - i, 2), _ Abs(WorksheetFunction.IsOdd(k - i))).Value = k Next k End Sub

harumama0430
質問者

お礼

WorksheetFunction.Floor_Preciseメソッド、 初めて知りました。 いろんなやり方があるんですね。 ありがとうございます。

  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.2

こういう事がしたいのでしょうか? Sub aaa()   Dim i As Long   Dim j As Long   Dim n As Long   Dim k As Long   i = Userform.textbox1.value   j = Userform.textbox2.value   n = 1   For k = i To j Step 2     Range("A" & n) = k     If (k + 1) <= j Then Range("B" & n) = k + 1     n = n + 2   Next End Sub

harumama0430
質問者

お礼

n=1を n=n+2にするやり方は大変勉強になりました。 ネット等にもA=A+1と書いてあるのを見たことがありますが 実際こうやって使うものだとは知りませんでした。 とても分かりやすいコードで初心者の私にも理解出来ました。 ありがとうございます。

回答No.1

逐次計算してるわけでもないし、最終的にセルに入る値は1つなら、 > カウンタはやはり2つ必要だと思うのですが これが間違いです。 > もしiが1、jが10だとしたら 外側ループのkの開始値と、内側ループの開始値が同じ1なので分かりにくいです。 i=3, j=5だとすると、 1) 外側ループは、k=3, 5  k=3のとき、   2) 内側ループは、n=1, 3, 5    n=1のとき、     A1=3    <-この処理はムダになる     B1=4    <-    n=3のとき、     A3=3    <-     B3=4    <-    n=5のとき、     A5=3    <-     B5=4    <-  k=5のとき、   2) 内側ループは、n=1, 3, 5    n=1のとき、     A1=5     B1=6    n=3のとき、     A3=5     B3=6    n=5のとき、     A5=5     B5=6 が入ります。 最後のループで全部のセルの値は上書きされます。 なので、kの値はループさせる必要が無く、(j-1)が偶数ならj, (j-i)か奇数ならj-1を設定すればOKでは。

harumama0430
質問者

お礼

カウンタ2つが必要・・が間違い、 Kをループさせる必要がなかったんですね。 入れ子を知らずにコードを書いてみて 「なぜこんな結果になるんだ?!」と ながらく調べた結果入れ子の存在を知ったど素人です。 初歩的な質問にご丁寧に説明付でご回答いただき 感謝しております。

関連するQ&A

  • Excel VBAでIF~Thenの入れ子がうまくできません。

    いつもお世話になってます。 IF~Then~EndIfにIFを入れていますがうまくいきません。よろしくお願いします。 Private Sub CommandButton10_Click() Dim i As Long Dim 最終行 As String Dim サーチ行 As Long Dim 行 As Long Dim 列 As Long If TextBox33.Value = "" Then MsgBox "使用量を入力してください。" Else If TextBox11 <> "" Then TextBox26 = TextBox33 * TextBox11 / 100 '成分1 End If If TextBox12 <> "" Then TextBox25 = TextBox33 * TextBox12 / 100 '成分2 End If Workbooks.Open Filename:=ThisWorkbook.Path & "\データ物質試薬管理.xls" Sheets("shinki").Activate 最終行 = (Range("B2").End(xlDown).Row) '商品名の行検索 サーチ行 = 0 For i = 2 To 最終行 If ComboBox3.Value = Range("B" & i) Then Workbooks("データ物質試薬管理.xls").Close savechanges:=False '保存しない Workbooks.Open Filename:=ThisWorkbook.Path & "\データ物質試薬管理.xls" Sheets("kongou").Select Range("A65536").End(xlUp).Offset(1).Select 行 = ActiveCell.Row 列 = ActiveCell.Column Cells(行, 列) = UserForm11.TextBox16.Value 'CAS Cells(行, 列 + 1) = UserForm11.TextBox21.Value '使用日 Cells(行, 列 + 2) = UserForm11.TextBox29.Value '使用者 Cells(行, 列 + 4) = UserForm11.TextBox26.Value '成分1使用量 Cells(行 + 2, 列) = UserForm11.TextBox18.Value 'CAS Cells(行 + 2, 列 + 1) = UserForm11.TextBox21.Value '使用日 Cells(行 + 2, 列 + 2) = UserForm11.TextBox29.Value '使用者 Cells(行 + 2, 列 + 4) = UserForm11.TextBox24.Value '成分3使用量 Cells(行 + 2, 列 + 5) = UserForm11.TextBox32.Value '種類 Cells(行 + 2, 列 + 6) = UserForm11.TextBox34.Value '単位 Cells(行 + 2, 列 + 7) = UserForm11.ComboBox3.Value '商品名 Workbooks("データ物質試薬管理.xls").Close savechanges:=True 'showhinに在庫管理する Workbooks.Open Filename:=ThisWorkbook.Path & "\データ物質試薬管理.xls" Sheets("showhin").Select Range("A65536").End(xlUp).Offset(1).Select 行 = ActiveCell.Row 列 = ActiveCell.Column Cells(行, 列) = UserForm11.TextBox2.Value '品名コード Cells(行, 列 + 1) = UserForm11.ComboBox3.Value '商品名 'Cells(行, 列 + 2) = UserForm9.TextBox3.Value '1本の量 'Cells(行, 列 + 3) = UserForm9.TextBox4.Value '本数 Cells(行, 列 + 4) = UserForm11.TextBox34.Value '単位 Cells(行, 列 + 5) = UserForm11.TextBox32.Value '種別 Cells(行, 列 + 6) = UserForm11.TextBox21.Value '使用日 Cells(行, 列 + 7) = UserForm11.TextBox29.Value '使用者名 Cells(行, 列 + 9) = UserForm11.TextBox33.Value '使用量 Workbooks("データ物質試薬管理.xls").Close savechanges:=True MsgBox "登録しました。" End If サーチ行 = i Exit For 'End If Next If サーチ行 = 0 Then MsgBox ComboBox3.Value & "商品は登録されておりません。" & Chr(10) & "「新規商品登録」ボタンから入力してください。" End If End If If TextBox21.Value = "" Then '使用量 MsgBox "使用日を入力してください。" End If ComboBox3.SetFocus End Sub

  • エクセルVBA 結合セルに指定した数まで連番を振る

    皆さんこんにちは。 エクセル2013を使用しています。 Sheet1のA列が2行ずつ結合しています。 A3(固定)から下方向にUserform1のTextbox1に入力した 数値まで連番を振りたいと思い下記のコードを 作成しました。 例えばTextbox1に”10”と入力してコマンドボタンを押すと セルA3・A5・A7・A9・A11・・・の順に1~10が入力されるように したかったのですが実際動かしてみると 1・2・4・6・8・10が入力されてしまいます。 結合セルだからなのでしょうか? でもセルA5に2は入るし・・・と イマイチ理由が分かりません。 A3・A5・A7・A9・A11・・・の順に 連番を振るにはどうしたら良いでしょうか? ------------------------------------------------------- Sheets("Sheet1").Range("A3").Select Dim i As Long Dim j As Long i = TextBox1.Value For j = 1 To i ActiveCell.Offset(j - 1, 0) = j Next

  • Excel VBA ユーザフォームの検索について

    添付の画像のようなユーザフォームを作っています。 TextBox1に検索ワードを入力して、CommandButton1をクリックすると、下のComboBox1に一覧が出るようにしたいと思い、ほかのサイトから下記のコードを見つけて、作ってみました。参照先のsheet2を表示しているときは大丈夫なのですが、別のシートを選んでいるとエラーになります。 sheetは3つあり、それぞれ違うリストが入力されています。今回はsheet2のリストを参照したいのですが、最初はsheet1が表示されている状態で実行したいです。 エラーの内容は 実行時エラー9 インデックスが有効範囲にありません。 コチラがコードです。 Private Sub UserForm_Initialize() Dim i As Long, imax As Long Dim tbl() As Variant imax = ThisWorkbook.Worksheets("sheet2").Cells(Rows.Count, "A").End(xlUp).Row ReDim tbl(imax) For i = 1 To imax tbl(i) = Range("A" & i).Value Next i With ComboBox1 .List() = tbl() End With End Sub Private Sub CommandButton1_Click() Dim i As Long, imax As Long Dim tbl() As Variant Dim cnt As Long, j As Long j = -1 With ThisWorkbook.Worksheets("sheet2") imax = .Cells(Rows.Count, "A").End(xlUp).Row cnt = Application.CountIf(Range("A1:A" & imax), "*" & TextBox1.Text & "*") ReDim tbl(cnt) For i = 1 To imax If InStr(.Range("A" & i), TextBox1.Text) > 0 Then j = j + 1 tbl(j) = Range("A" & i).Value ←この部分がエラーになる End If Next i End With With ComboBox1 .List() = tbl() End With End Sub どこを直せば良いか、教えてください。 よろしくお願いします。

  • エクセルVBA-カウンター i と j の使い方

    2つの条件を同時に満たすと図形を別のワークシートにコピーし、600行程度あるワークシートなので For - Next を使ってその作業を繰り返す、というエクセルのマクロを以下のように書き込みました。ところがマクロを実行すると、一番最初の行だけ正確に実行され、次に条件を満たす行があっても図形がコピーされません。(ということはカウンター i, j の使い方が間違っているのです)どなたか私の素人コードを見て修正方法を教えてください。お願いします。 Sub finalize() Dim MyStr As String Dim i As Long Dim j As Long  For j = 2 To 1482 Step 40 For i = 3 To 188 Step 5 MyStr = Range("O" & i) If MyStr <> "" Then                    '条件1 If Range("L" & i).Value = "毎日" Then      '条件2   Sheets("図形_現読").Select ActiveSheet.Shapes.Range(Array("毎日")).Select Selection.Copy Sheets("印刷画面").Select Range("AG" & j).Select ActiveSheet.Paste Else If Range("L" & i).Value = "朝刊" Then Sheets("図形_現読").Select ActiveSheet.Shapes.Range(Array("朝刊")).Select Selection.Copy Sheets("印刷画面").Select Range("AG" & j).Select ActiveSheet.Paste End If End If End If Next i Next j End Sub

  • エクセルVBA抽出がうまく出来ません

    エクセル2013VBA初心者です。 入力シートからDBシートへ、DBシートから印刷シートへのデータ転記と印刷、入力内容のクリアまでは出来るようになりました。 DBシートの検索を行い、記録内容を入力シートに転記する抽出を行いたいのですが、下記構文を書いたところで問題が発生しました。 If Sh2.Range("A & i").Value = j And Sh2.Range("B & i").Value = k Then  でとまります。メッセージは ‘Range’メソッドは失敗しました:‘Workshieet’オブジェクトというものです。 やろうとしていることは、入力シートに設けた“E12”と”G12”の二つの検索項目をキーにDBシートの行を特定し、この行の内容を入力シートに反映しようということです。 入力シートの検索項目“E12”、 ”G12”はそれぞれDBシートのA列、B列に格納されている項目で、年度と連番です。サンプルとして入力シート"C5"に抽出しようとしているDBシートD列は申請者名です。 恐れ入りますがよろしくご教示頂きたく、お願い申し上げます。 Sub DBシートから力情報を抽出する () Dim Sh1 As Worksheet Dim Sh2 As Worksheet Dim i As Long Dim j As Long Dim k As Long Set Sh1 = Worksheets("入力") Set Sh2 = Worksheets("DB") j = Sh1.Range("E12").Value k = Sh1.Range("G12").Value With Sh2 For i = 2 To .Range("A" & Rows.Count).End(xlUp).Row If Sh2.Range("A & i").Value = j And Sh2.Range("B & i").Value = k Then Sh1.Range("C5").Value = Sh2.Range("D & i").Value End If Next  End With End Sub

  • ExcelにおけるVBAで、データの振り分けをしたい

    Sub a() Dim i As Long Dim s As Long Dim b As Worksheet Dim c As Worksheet Dim maxi As Long Dim maxs As Long Application.ScreenUpdating = False With ThisWorkbook Set b = .Worksheets("bbb") Set c = .Worksheets("ccc") End With maxi = b.Range("A1").CurrentRegion.Rows.Count maxs = c.Range("A1").CurrentRegion.Rows.Count For i = maxi To 2 Step -1 For s = maxs To 2 Step -1 If c.Cells(s, 1) = b.Cells(i, 1) And c.Cells(s, 2) = b.Cells(i, 2) Then c.Cells(s, 14) = b.Cells(i, 3) End If Next s Next i Application.ScreenUpdating = True End Sub ワークシートcとワークシートbの1列目と2列目が一致したときにだけ、cの14列目にbの3列目のデータを代入したく思い、以上のようなコードを書きましたが、重くて終わる様子がありません。 ・そもそもあっているのか、あっていないならどこを修正すればよいか ・早く終わるようにするにはどうしたらいいか アドバイスをよろしくお願いします。

  • Excel VBA でテキストボックスの値をセルA列から検索

    いつもお世話になります。 Private Sub CommandButton3_Click() Dim 行 As String Dim 列 As String Dim 最終行 As String Dim 検索行 As String Dim メッセージ As Integer Dim 一致 As Range Dim myNO As Variant Dim i As Long Sheets(3).Select 最終行 = Range("A2").End(xlDown).Offset(1).Select 行 = ActiveCell.Row 列 = ActiveCell.Column myNO = TextBox2.Value 検索行 = Range("A2").End(xlDown).Select ※・・・Set 一致 = Range("A2:検索検").Findwhat:=TextBox2,lookat:=xlWhole) If 一致 Is Nothing Then MsgBox "データがありません。新規コード入力します。" Cells(行, 列 + 0) = UserForm1.TextBox2.Value Cells(行, 列 + 1) = UserForm1.ComboBox7.Value Else i = Cells(行 - 1, "A") Cells(i, 列 + 0) = UserForm1.TextBox2.Value Cells(i, 列 + 1) = UserForm1.ComboBox7.Value End If End Sub 「エラー1004'Range'メソッドは失敗しました'Global'オブジェクト」とでます。※印が黄色になっています。 ユーザーフォーム1のテキストボックスの値をシート3のA列から検索して、一致すれば、A列の一致セルに上書き入力して、一致が無い場合はA列の空白セルに追加入力したいのです。よろしくお願い致します。

  • エクセルVBAで、特定の数字になる組み合わせを知りたいのですが・・・

    A.5380、B.4730、C.3310、D.2840、E.2360、F.1890、G.1420、H.940 以上8種類の数字を組み合わせて、合計13010ちょうどになる組み合わせをすべて知りたいです。8種類の数字は、同じものを何度組み合わせても構いません。 例えば、A+A+B=○のようにです。 色々自分なりに調べたところ、ソルバーで試してみましたが、組み合わせの数字が複雑な為か、解答はでませんでした。 また、VBAを使用して以下のような例が掲載されていたので試してみましたが、オーバーフローしてしまって答えがでません。 VBAがまったくの初心者のため、どのようにしたら問題が解消されるのかわかりません。 どなたか教えていただけませんでしょうか。お願いします。 ' knapsack総当たり ' 目標値と一致する物をすべて求める ' 'by S. Tada Const N = 8 ' データの数 Dim wa(N) As Long Sub knap_main() Dim w As Long, wmax As Long Dim i As Integer, j As Long, k As Integer Dim y1 As Integer, y2 As Integer Dim b As Long y1 = 1 ' A1:Anにデータを入れておく y2 = y1 + 1 ' B列以降が結果 For i = 1 To N wa(i) = Cells(i, y1).Value Next wmax = Cells(45, y1).Value ' A45に目標値を入れておく For j = 1 To 2 ^ N - 1 w = 0 b = 1 For k = 1 To N If j And b Then w = w + wa(k) b = b + b Next If w = wmax Then b = 1 For k = 1 To N If j And b Then Cells(k, y2).Value = wa(k) b = b + b Next y2 = y2 + 1 End If Next End Sub

  • エクセルVBAの条件指定が上手くいきません

    「7を超えたら、For Eachステートメントを抜けなさい」という条件を入れたいのですが、 7を超えても処理が継続し困っています。 勉強不足で申し訳ないですが、ご教授願います。 【やりたいこと】 まず、セルB1~D3までのセルの値(9つ)が、7を超えない条件で1を加算していきます。 加算したときの値はE~Gの列に貼り付けていきます。 7を超えた時点でFor Eachステートメントを抜けます。 また、B1~D3までのセルには計算式が入っており、A1に数字を入れると、 それぞれ異なる増え方をします。(計算式自体は$A$1+1.1、$A$1+2.1などシンプルなもの) Sub test() Dim i As Range Dim n As Long Dim x As Long n = 1 x = 1 For Each i In Range("B1:D3") Range("A1").Value = x If i < 7 Then Range("B1:D3").Copy Cells(n, 5).Select Selection.PasteSpecial Paste:=xlPasteValues n = n + 3 x = x + 1 ElseIf i > 7 Then Exit For End If Next End Sub お手数ですが、宜しくお願いいたします。

  • Excel VBA SetFocus

    環境:Excel 2002です UserForm1での質問です Flame5にTextBox14とTextBox15があります TextBox14とTextBox15のBeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)後 Flame2にあるTextBox1にSetFocusしたいのですがエラーが発生します 実行時エラー 2147467259(800004005) 異なるFlameにSetFocusする方法があるのでしょうか? Flame5の中でTextBox14及びTextBox15のSetFocusはできます TextBox14とのTextBox15のBeforeUpdateのプロシージャです Private Sub TextBox14_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean) If Len(Me.TextBox14.Text) <> 0 Then Dim a As Variant a = 100 - Val(Me.TextBox14.Text) Me.TextBox15.Text = a Dim i As Integer For i = 1 To 4 Me.Controls("TextBox" & i).Enabled = True Me.Controls("TextBox" & i).BackColor = &H80000005 '背景色(白色) Next i End If Me.TextBox1.SetFocus End Sub Private Sub TextBox15_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean) If Len(Me.TextBox15.Text) <> 0 Then Dim a As Variant a = 100 - Val(Me.TextBox15.Text) Me.TextBox14.Text = a Dim i As Integer For i = 1 To 4 Me.Controls("TextBox" & i).Enabled = True Me.Controls("TextBox" & i).BackColor = &H80000005 '背景色(白色) Next i End If UserForm1.TextBox1.SetFocus End Sub ご支援願います

専門家に質問してみよう