エクセルのユーザーフォーム上のテキストボックスと外部データ取込機能について

このQ&Aのポイント
  • エクセルのユーザーフォーム上でテキストボックスと外部データ取込機能を使用する方法についての質問です。
  • 特定の条件に応じて外部データを取り込むため、テキストボックスに入力した値を特定のセルにセットし、その値をもとに外部データを抽出しますが、その結果が正しく表示されない問題が発生しています。
  • フォームが起動されたままでも、シートでの動作をそのままフォームの別のテキストボックスに戻す方法を教えていただきたいです。
回答を見る
  • ベストアンサー

エクセルのユーザーフォーム上のテキストボックスと外部データ取込機能につ

エクセルのユーザーフォーム上のテキストボックスと外部データ取込機能について 前提条件)1つのフォームにComboboxとTextboxが5列15行に整列して配置してあります。 例えば、TextBox1~3にそれぞれ入力し、その条件から外部データ取込機能で抽出される値をTextbox4へ表示させる試みを行っています。処理としては、TextBox1~3に入力した値は特定シートのセルA1~C1にセットします。 セルA1~C1にセットされることにより、外部データ取込のパラメータ設定で「セルの値が変わる時に自動的に更新する」としてあるため、3つの条件よりある値が特定シートのセルA2に抽出され、そのセルの値をTextbox4へ返すことをしようと挑戦中です。そこでつまづいてしまい質問させて頂きます。フォームを起動しTextboxから入力した内容が特定シートのセルにセットされることは確認できたのですが、外部データ取込機能で値は抽出はされているようなんですが、特定シートのセルA2には表示されていません。フォームを閉じるとセルA2に呼び出されてきた値が確認できます。フォームが開いているとシートをActiveにしても(VBAの記述にて)更新されないんでしょうか?フォームが起動されたまま、シートで展開している動きをそのままフォームの別texeboxへ戻り値として利用する方法を教えて下さい。waitやActiveなどいろいろ試してみました。下記にはActiveの記述はありませんが、色々試してみて上手くいきません。 (参考) Private Sub TextBox23_Exit(ByVal Cancel As MSForms.ReturnBoolean) Sheets("Meisai").Range("F1") = TextBox23.Value waitTime = Now + TimeValue("0:00:02") Application.Wait waitTime Sheets("Hijyu").Select TextBox27.Value = Sheets("Hijyu").Range("A2").Value End Sub よろしくお願いします。

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

  • ベストアンサー
  • end-u
  • ベストアンサー率79% (496/625)
回答No.1

自動更新パラメータ設定のQueryTableについて。 ユーザーフォームがモーダルの場合、ユーザーフォームが閉じられた後に更新が始まります。 ユーザーフォームがモードレスの場合、実行中のプロシージャが終了した後に更新が始まります。 ([winXP/xl2003|2007]で確認) 対処方法としては、自動更新パラメータ設定を解除して任意更新にした上で コード内でRefreshメソッドを実行すると良いです。 自動更新を解除したくない場合は、その、『解除-再設定』自体もコード内で処理します。 Private Sub CommandButton1_Click()   Dim x As Long   Dim i As Long   Dim flg() As Boolean   With Sheets("Meisai").QueryTables(1)     x = .Parameters.Count     ReDim flg(1 To x)     'パラメータのRefreshOnChange設定を記憶してFalseに     For i = 1 To x       With .Parameters(i)         flg(i) = .RefreshOnChange         .RefreshOnChange = False       End With     Next     Sheets("Meisai").Range("F1").Value = TextBox23.Value     .Refresh BackgroundQuery:=False     'パラメータのRefreshOnChange設定を戻す     For i = 1 To x       .Parameters(i).RefreshOnChange = flg(i)     Next   End With   TextBox27.Text = Sheets("Hijyu").Range("A2").Value   Erase flg End Sub

Rika2591
質問者

お礼

回答ありがとうございます。これから動作確認をとります。 取り急ぎお礼の投稿とさせて頂きます。 ありがとうございました。

関連するQ&A

  • ユーザーフォーム上にある「テキストボックス」に小数が入力できない

    以前にユーザーフォーム上のテキストボックスにセル値反映する方法を下記(サンプル1)のようにお教えいただいたのですが、下記のようにマクロを組むとテキストボックスに小数が入力できなくなってしまいます。 どのようにしたら、テキストボックスに小数が入力できるようになるのでしょうか? お教えください。 事例)「1.234」とテキストボックスに打ち込むと「1」    「0.856」とテキストボックスに打ち込むと「0」と    なってしまいます。 (サンプル1) 'A1のデータを反映するとした場合 'OptionButton1のコード Private Sub OptionButton1_Click() TextBox1 = Sheets("Sheet1").Range("a1") End Sub 'B1に反映するとして 'OptionButton2のコード Private Sub OptionButton2_Click() TextBox1 = "" End Sub 'TextBox1のコード Private Sub TextBox1_Change() If OptionButton2 = True Then Sheets("Sheet1").Range("B1") = TextBox1.Value End If End Sub

  • Excel ユーザーフォームでコンボボックスを使用してデータ入力

    Excelのユーザーフォームでコンボボックスを使用して、シートのデータを表示しています。 コンボボックス:ComboBox1 テキストボックス1-3:TextBox1-3 コンボボックスのRowSource:シート名!A2:C100 コンボボックスの変更時の動作: Me!TextBox1.Value = ComboBox1.Value とここまではできたんですが、テキストボックス2にシートのB列の値を、テキストボックス3にシートのC列の値を入れたいのですが、 どのようにしたらいいのでしょうか?

  • ユーザーフォームのテキストボックスでVLOOK

    ユーザーフォームのテキストボックスで、ご教示お願いいたします。 現在、以下のようなコードこちらで教えていただきセルに入力をしております。 上から順番に入力した際、テキストボックス5に値を入たら、 listのシートから該当するもの(項目は20個)をテキストボックス6に表示させたいと思っております。 ■現在のコード '// Private Sub CommandButton1_Click() Dim LastRow As Long 'ここはキャメル形式やパスカル形式にします/大文字は定数です。 Dim i As Long '/テキストボックスに値があるか調べる For i = 1 To 7 Next i '/セルに書き込み With Worksheets("Sheet1") LastRow = .Cells(Rows.Count, 1).End(xlUp).Row + 1 For i = 1 To 7 .Cells(LastRow, i).Value = Me.Controls("TextBox" & i).Value Next End With '/TextBox1-7をクリア If MsgBox("テキストボックスを空にしてよろしいですか?", vbQuestion + vbYesNo) = vbYes Then For i = 1 To 7 Me.Controls("TextBox" & i).Value = "" Next i End If 'TextBox1にフォーカスを移動 Me.TextBox1.SetFocus End Sub ■付け足したいコード Private Sub textbox5_change() Dim temp, x temp = Me.textBox5.Value If IsNumeric(temp) Then temp = Val(temp) x = Application.VLookUp(temp, Sheets("list").Range("a1:b20"), 2, False) If Not IsError(x) Then Me.TextBox6.Value = x Else MsgBox Me.TextBox5.Value & " はリストにありません" End If End Sub 【質問内容】 付け足したいコードは上記の通りですが、どのように付け足せばいいのかが分からず、 困っております。 度々で申し訳ありませんが、テキストボックス5の値を見て、 テキストボックス6に表示させるやり方をご教示お願いいたします。

  • エクセル ユーザーフォームテキストボックスについて

    テキストボックスからセルへの入力について教えていただきたいのですが、 ネットからサンプルを落として勉強しております。 以下のコードを下の画像のように見出しを3から7まで項目を増やしたい場合、 どの部分を書き換えたらいいのでしょうか? よろしくお願いいたします。 Private Sub CommandButton1_Click() Dim LASROW As Long Dim f As Long With Worksheets("Sheet1") 'A列の最終行を取得 LASROW = .Range("A" & CStr(Rows.Count)).End(xlUp).Row 'セルに書き込み For f = 0 To 2 .Range("A" & CStr(LASROW)).Offset(1, f).Value = Me.Controls("TextBox" & f + 1).Value Next End With 'TextBox1,2,3をクリア For f = 1 To 3 Me.Controls("TextBox" & f).Value = "" Next 'TextBox1にフォーカスを移動 Me.TextBox1.SetFocus End Sub

  • エクセルのユーザーフォームにあるテキストボックスへの値代入

    エクセルのユーザーフォームにあるテキストボックスへの値代入 お世話になります. エクセルのシートの入力を,ユーザーフォームを使って入力させています. 新規の場合は空欄のフォームがでるのですが,既存の列を編集するには編集用のフォームで行っています. フォームにはテキストボックスが15個(Textbox1からTextbox15まで)あり,Textbox1はCells(*,1)Textbox2はCells(*,2)というふうにセルの列との関連付けがあります. この規則性を上手く使おうと,For Nextを使っていきたいのですが, Dim r As Integer Dim i As Integer Dim t As String r = ActiveCell.Row For i = 1 To 15 t = "TextBox" & i t = Cells(r, i).Value Next i と,ここまで入力をしてみたものの,値の代入がうまくいきません. MsgboxでCells(r, i)の動きは確認できているので,おそらく,TextBox & iのところが原因と思われますが・・・ どのように修正すればよろしいでしょうか?教えてください.

  • ユーザーフォームの入力をシートに反映

    かなりの初心者(始めて3日)ですが宜しくお願いします。 しかも2点あります。。。 (1)ユーザーフォームにある大量のテキストboxないし、optionboxをエクセルのsheet2に反映させたいです。 で、地道に With Sheets(2) .Range("A22").Value = OptionButton184.Value .Range("A23").Value = OptionButton185.Value .Range("A24").Value = OptionButton186.Value .Range("A25").Value = OptionButton187.Value とAの行を手で直していたのですが、途中で間違えて、手直しは断念しました。そこで、思いついたのが、「ひとつ下のセルに記述する」ということでした。 で、本を見ながら考えたのが、 With Sheets(2) Range("A1").Select ActiveCell.Offset(1, 0).Value = TextBox1.Text ActiveCell.Offset(1, 0).Value = TextBox2.Text ActiveCell.Offset(1, 0).Value = TextBox3.Text まずA1を指定させて、下にずらしていけるかと思ったのですが、全然上手くいきません。しかもsheet1のA1を選択してるようです。どうしてでしょうか??? (2)フォームOKボタンを押して、上記の処理をしても、フォームに記入したものが次にフォームを開いた時に消えていないように、 Me.Hide End Sub で終わらせたのですが、次に開いても残っていません。 無知でお恥ずかしいですが、宜しく御願い致します。

  • ユーザーフォーム オプションボタン について

    ユーザーフォーム内にオプションボタンを21個作っており、 Private Sub CommandButton1_Click() Dim SerchArea As Range '検索範囲(シート名指定) Set SearchArea = Sheets("1").Range(Range("A:A"), Range("A:A").End(xlDown)) '検索処理(引数:LookAt に xlWhole で完全一致 Set FoundCell = SearchArea.Find( _ What:=Me.TextBox1.Value, _ SearchOrder:=xlByRows, _ LookAt:=xlWhole, _ LookIn:=xlValues, _ MatchCase:=False) '商品コードが無い場合の処理 If FoundCell Is Nothing Then MsgBox "ありません!", vbCritical GoTo ExitHandler End If '見つかった場合の処理 With FoundCell Me.TextBox1.Value = .Offset(0, 0).Value Me.TextBox2.Value = .Offset(0, 11).Value Me.TextBox3.Value = .Offset(0, 12).Value Me.TextBox4.Value = .Offset(0, 4).Value テキストボックスにセルの値が入るようにしており、追加でオプションボタンを付けて更新としたいのですが、21個のうちどれか一つを選択して、その値をZ列に反映させたいのですが Private Sub CommandButton2_Click() With FoundCell .Offset(0, 13).Value = Me.TextBox20.Value .Offset(0, 4).Value = Me.TextBox4.Value .Offset(0, 5).Value = Me.TextBox5.Value ここの追加でオプションボタンを設定するにはどうすれば良いでしょうか?

  • エクセル2003のVBAで、ユーザーフォームにあるテキストボックスに入力制限をつけたいのですが

    エクセル2003のVBAで、ユーザーフォーム上にあるテキストボックスに入力制限をつけようとしています。 エクセルのセル13列目にdeg値 0 0.5 1 1.5 2 ・ ・ ・ があります。 ここにない値を入力するとエラーメッセージを表示させます。 下記のコードで、小数点を入力した瞬間(例えば「1.」)にエラーメッセージが表示されてしまいます。 どう修正したらよいか、どなたか分かりませんでしょうか? よろしくお願いいたします。 Private Sub TextBox21_Change() For i = 7 To 1446 If TextBox21.Value = ThisWorkbook.Sheets(\"default\").Cells(i, 13).Value Then Exit For Next i If i = 1447 Then MsgBox \"deg値と一致しません。補正値を入れなおしてください。\" TextBox21.Text = \"\" End If End Sub

  • エクセルVBAで、ユーザーボックスを開いたときにテキストボックスにセル

    エクセルVBAで、ユーザーボックスを開いたときにテキストボックスにセルの値を自動で表示させたいのですが、うまくいきません。テキストボックスをクリックすると表示されるのですが・・・    Private Sub txt1_Change() Sheets("Sheet1").Range("a1").Value=txt1.Value End Sub としたのですが、やはり間違いなのでしょうか?

  • ユーザーフォームのデータ

    ユーザーファームを2つ作成しました。 そのユーザーフォームのデータを表の最終行に追加をしたいのです。 Range("A65536").End(xlUp).Offset(1,0).select を使おうと思っていますが、うまくいきません。 どなたか教えてください。 <ユーザーフォーム1> Private Sub CommandButton1_Click() Sheet2.Range("H7") = TextBox1 Sheet2.Range("I7") = TextBox2 Sheet2.Range("J7") = TextBox3 Sheet2.Range("K7") = TextBox4 Sheet2.Range("L7") = TextBox5 Sheet2.Range("P7") = TextBox6 If CheckBox1.Value = True Then Worksheets(2).Range("M7") = "0:30" Else Worksheets(2).Range("M7") = "0:00" End If If CheckBox2.Value = True Then Worksheets(2).Range("R7") = "1000" Else Worksheets(2).Range("R7") = "0" End If If CheckBox3.Value = True Then Worksheets(2).Range("S7") = "3000" Else Worksheets(2).Range("S7") = "0" End If If CheckBox4.Value = True Then Worksheets(2).Range("T7") = "1500" Else Worksheets(2).Range("T7") = "0" End If Unload Me End Sub <ユーザーフォーム2> Private Sub CommandButton1_Click() Sheet2.Range("V7") = TextBox1 Sheet2.Range("W7") = TextBox2 Sheet2.Range("X7") = TextBox3 Unload Me End Sub

専門家に質問してみよう