• 締切済み

ユーザーフォームで別シートを検索できますか

現在エクセルのユーザーフォームを勉強中です。職員データとメモの二つのシートがあります。職員データシート上で職員コード番号で検索し検索画面を閉じるとデータを表示するユーザーフォームが表示されるように作成しました。ここまでは出来ました。これを、コード番号の検索でメモシートの職員番号も検索し該当する番号があれば行番号を取得(変数名:メモRow)無ければカーソルを最終行に移動。データ表示フォームに職員のデータとその職員のメモデータを表示するように、メモを書きたいときはメモ表示ボックスに記入。記入したデータをメモシートにも記入できるようにしたい。 出来ないこと (1)職員データシートの検索画面でメモシートを同時に検索したい (2)メモシートの行番号を変数に格納したい (3)該当番号がなければ最終行にカーソルを移動したい (4)職員データのフォームに記入したデータをメモシートに反映させたい わかる方どうぞ教えてください。 こんな風に作りました Private Sub 初期化_Click() Unload UserForm検索 UserForm検索.次へ.Enabled = False UserForm検索.Label1.Caption = "検索値を入れて検索ボタンを押してください。" UserForm検索.Show vbModeless End Sub Private Sub 検索_Click() Dim 検索値 As String '変数を宣言。 On Error GoTo errhandler 検索値 = TextBox1.Value If 検索値 = "" Then MsgBox "検索する語句を入れてください。" TextBox1.SetFocus 'TextBox1にカーソルを移動。 Else Cells.Find(What:=検索値, After:=ActiveCell, LookIn:=xlValues, LookAt:= _ xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:= _ False, MatchByte:=False).Activate 検索.Enabled = False 次へ.Enabled = True Label1.Caption = "次をさがすには「次へ」ボタンを押してください。" 'Label1のメッセージを変える。 errhandler: ' Select Case Err.Number Case 91 MsgBox "その検索値は存在しません。" End Select ' End If End Sub Private Sub 次へ_Click() Cells.FindNext(After:=ActiveCell).Activate End Sub Private Sub 閉じる_Click() Unload Me DATA.Show End Sub 以上検索画面 ※別シートの検索は可能ですか? 以下は表示画面(DATA) Option Explicit Private myRow As Long Private Sub btm検索_Click() Unload Me 'DATAフォームを非表示に。 UserForm検索.Show '検索フォームを表示 End Sub Private Sub btm前_Click() '前へボタン myRow = myRow - 1 GetData End Sub Private Sub btnCancel_Click() '終了を確認する If MsgBox("終了しますか?", vbYesNo, "確認") = vbYes Then Unload Me End If End Sub Private Sub btn次_Click() '次へボタン myRow = myRow + 1 GetData End Sub ※以下はデータ表示コマンドが続きます最後に Me.tab3資格1.Value = ActiveSheet.Cells(myRow, 111).Value Me.tab3資格2.Value = ActiveSheet.Cells(myRow, 114).Value Me.tab4メモ.Value = Worksheets("メモ").Cells(メモRow, 3).Value                              ↑                  表示できない、具体的に行数を入れると表示する! End Sub ※変数:メモRowをどこで宣言すれば?

みんなの回答

  • eden3616
  • ベストアンサー率65% (267/405)
回答No.3

ご提示のコードを拝見しましたが、 フォームの詳細・目的の解釈しきれなかった部分もございます。 勝手な解釈を踏まえて作成しましたので、目的の動作になっていないかもしれませんが。 ご提示のコードをベースに一連の動作をするものを作成してみました。 参考になればと思います。 >※以下はデータ表示コマンドが続きます最後に >Me.tab3資格1.Value ~ .Cells(メモRow, 3).Value テキストボックスで表示されているのでしょうか? 詳細が分からなかったので後の項目追加、見た目重視で 勝手ながらリストビューコントロールを使用して作成しました。 ■(1)処理の流れ 「UserForm検索」フォームの表示  ↓ 検索値による職員シート、メモシートの検索  |  |・「次へ」で同じ検索値で他のセルへ対象が移る  ↓ 「閉じる」で「DATA」フォームの表示  |  |・検索された職員シートのデータがリストビューに表示  |・データを選択して「F2」キーで職員コードを変更可能  | (変更後、データリストを更新し、メモシートを再検索)  |・「検索」で「UserForm検索」へ戻る  |・「前へ」で「職員データ」の1行上のデータを表示  |・「次へ」で「職員データ」の1行下のデータを表示  |・「×」又は「キャンセル」で終了確認ダイアログの表示  ↓ 「メモに書込み」ボタンをクリック  |  |―→「メモ」シートに見つからない場合  | ・「職員データ」:見つかった行のメモを変更  | ・「メモ」:最終行に職員コード、氏名、メモを追加  ↓ 「メモ」シートに見つかった場合 ・「職員データ」:見つかった行のメモを変更 ・「メモ」:見つかった行のメモを変更 ■(2)前提条件 動作の前提条件として以下のようになっている必要があります。 ・シート名は「職員データ」「メモ」とする  (標準モジュールのSettingプロシージャで設定可能) ・両シートとも、1行目は項目名が入っている ・両シートとも、A列「職員コード」B列「氏名」C列「メモ」となっている ・「職員データ」のDG列(111列目)「資格1」DJ列(114列目)「資格2」とする  (この項目は増減することが出来ます。コード内のコメント参照) ・「メモ」に存在し、「職員データ」に存在しない「職員コード」は考慮していません ■(3)ユーザーフォームの作成 添付画像のような配置で「UserForm検索」と「DATA」フォームを作ります。 リストビューの追加方法は下記URLを参考に願います。 http://officetanaka.net/Excel/vba/listview/index.htm 上記ページの下部リンクより以下を参照してListView1をDATAフォームへ配置してください。  1.ListViewコントロールの組み込み  2.ListViewコントロールの配置 ■(4)標準モジュールの挿入 VBEの挿入→標準モジュールから標準モジュールを挿入してください。 ■(5)VBAコードの貼付 コードを全て記述すると文字数オーバとなるため、 クラウド(Doropbox)にアップロードしています。 (この提示方法が問題であれば数回の回答に分けてコードを投稿致します)  (1)標準モジュールに以下のコードを貼付   https://www.dropbox.com/s/qtl24d87bm730tf/Module1.txt?dl=0  (2)「UserForm1」に以下のコードを貼付   https://www.dropbox.com/s/pzzvjejhhgd7dgv/UserForm1.txt?dl=0  (3)「DATA」に以下のコードを貼付   https://www.dropbox.com/s/ppsnsn1g01lpges/DATA.txt?dl=0 ■(6)実行 標準モジュールの「search_form_view」を実行してください。 検索フォームが表示されるので、上記「■(1)処理の流れ」にそって 操作願います。

  • eden3616
  • ベストアンサー率65% (267/405)
回答No.2

ご提示の(1)~(4)に対する回答を主としておりましたので、 目的の動作とそぐわない結果になっていました事お詫び申し上げます。 >(1)職員データ・メモ 両方のシートに職員番号がある場合。 >検索画面を閉じるとメモシート上にデータフォームが表示され >肝心の職員のデータが表示されない。 →Worksheets("職員データ").Activateを追加 ご提示の修正方法で良いと思います。 >(2)職員データにあってメモシートにない場合 >検索フォームの閉じるをクリックすると実行時エラー'1004' こちらでは再現できませんでした。 両シートとも、A列1~10行目に文字列で001~010の通し番号をいれた データのうちメモシートの数行だけ削除したデータでテストしています。 お手数ですが同じ状態のデータで再度エラーが発生するか確認願います。 >カーソルは最終の職員番号の位置に有り >→iカーソルはメモシートの最終の職員番号の下 Cells(Rows.Count, "A").End(xlUp).Offset(0, 1).Select とすることで最終行1行下を選択することが出来ます。 >ii閉じるボタンを押すと職員データシートに移り >メモ以外の職員のデータは表示したい おそらくDATAフォームの動作とおもわれますが、 こちらは詳細な作成を行っておらずNo1のようにメモRowの共有と、 値の設定方法についてのみの説明としておりました。 文字数制限により、次の投稿にてご提示の捕捉とご質問内容を 合わせたフォームを作成したものを投稿致します。 >iii当月のメモ内容をメモシートに書き込みたい。 >職員コード・氏名(これは職員データにあります)・メモ >を最終行に書き込みたい 「職員データ」「メモ」シート共に存在する場合は 両方のメモデータを入力ボックスの値で置き換え、 「メモ」シートに職員コードが見つからなければ 入力ボックスの値をメモの値としてメモシートの最終行+1行へ 職員コード、氏名、メモを追加するということでしょうか? 以上を踏まえて作成してみましたので、コードを次に投稿致します。 動作状態は添付画像のような形になります。

  • eden3616
  • ベストアンサー率65% (267/405)
回答No.1

ユーザーフォームの仕様がなかったため、 質問文・コードから適当に想定しています。 (ユーザーフォーム「DATA」は適当) 添付画像のような流れで、各モジュールに記述するコードを 下記「■(1)~(3)」に記載しています。 ・各プロシージャの頭には「▽」で説明をコメントしています ・新規で追加したコードには説明のコメントを入れています ご提示の問題に対する回答としては以下のようになります。 >(1)職員データシートの検索画面でメモシートを同時に検索したい  → ■(2)を参照:▼「メモ」シートをアクティブにして検索 >(2)メモシートの行番号を変数に格納したい  → ■(1)を参照:Public メモRow As Long  → ■(2)を参照:メモRow = 検索セル.Row >(3)該当番号がなければ最終行にカーソルを移動したい  → ■(2)を参照:Cells(Rows.Count, "A").End(xlUp).Select >(4)職員データのフォームに記入したデータをメモシートに反映させたい  → ■(3)を参照 不明な点があれば補足願います。 ■(1)新規に標準モジュールを挿入して記述 '▽ユーザーフォーム間で共通の広域変数を宣言 Public メモRow As Long ■(2)ユーザーフォーム「UserForm検索」へ記述 Private myRow As Long '▽新しくテキストボックスに入力されたらボタン状態をリセット Private Sub TextBox1_Change()   検索.Enabled = True   次へ.Enabled = False End Sub '▽Unloadさせず、値とボタン状態をリセット Private Sub 初期化_Click() With Me   .次へ.Enabled = False   .Label1.Caption = "検索値を入れて検索ボタンを押してください。"   .TextBox1.Value = "" End With End Sub '▽On Errorを使わず検索結果を判定、メモシートも検索して変数に代入 Private Sub 検索_Click() Dim 検索値 As String  '変数を宣言。 Dim 検索セル As Range  '検索結果のセルを代入するセル変数 検索値 = TextBox1.Value If 検索値 = "" Then   MsgBox "検索する語句を入れてください。"   TextBox1.SetFocus  'TextBox1にカーソルを移動。 Else   '▼「職員データ」シートをアクティブにして検索   Worksheets("職員データ").Activate   Set 検索セル = Cells.Find(What:=検索値, After:=Selection, LookIn:=xlValues, LookAt:= _       xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:= _       False, MatchByte:=False)   '検索で見つかれば選択、見つからなければerrhandlerへ移動   If 検索セル Is Nothing Then GoSub errhandler Else 検索セル.Select      '▼「メモ」シートをアクティブにして検索   Worksheets("メモ").Activate   Set 検索セル = Cells.Find(What:=検索値, After:=Selection, LookIn:=xlValues, LookAt:= _       xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:= _       False, MatchByte:=False)   '検索で見つかれば選択、見つからなければerrhandlerへ移動   If 検索セル Is Nothing Then     メモRow = 0 '見つからなかったらメモRowを0にする     GoSub errhandler   Else     検索セル.Select     メモRow = 検索セル.Row '変数に行番号を代入   End If      検索.Enabled = False   次へ.Enabled = True   Label1.Caption = "次をさがすには「次へ」ボタンを押してください。"  'Label1のメッセージを変える。 End If Exit Sub 'プロシージャを終了 '▼見つからない場合の処理 errhandler:   MsgBox """" & ActiveSheet.Name & """シートにその検索値は存在しません。"   '最終行を選択   Cells(Rows.Count, "A").End(xlUp).Select   Return '呼び出し元へ戻る End Sub '▽『検索_Click』とほぼ同じなのでコメント省略 Private Sub 次へ_Click() Dim 検索セル As Range Worksheets("職員データ").Activate Set 検索セル = Cells.FindNext(After:=Selection) If 検索セル Is Nothing Then GoSub errhandler Else 検索セル.Select Worksheets("メモ").Activate Set 検索セル = Cells.FindNext(After:=Selection) If 検索セル Is Nothing Then   GoSub errhandler   メモRow = 0 Else   検索セル.Select   メモRow = 検索セル.Row End If Exit Sub errhandler:   MsgBox """" & ActiveSheet.Name & """シートにその検索値は存在しません。"   Cells(Rows.Count, "A").End(xlUp).Select   Return End Sub '▽DATAフォームのLoadが無かったので追加 Private Sub 閉じる_Click() Unload Me Load DATA DATA.Show End Sub ■(3)ユーザーフォーム「DATA」へ記述 '▽DATAフォームは適当に作成しました。 ' (機能としては以下の仕様) '【1】メモRowの値をLabel1に表示させる '【2】「メモ」シートの検索行に文字を入力する '【1】ラベルにメモRow(広域変数)を表示する Private Sub メモRowを表示_Click() Me.Label1.Caption = メモRow End Sub '【2】「メモ」シートの検索行に文字を出力する Private Sub 入力して終了_Click() If メモRow = 0 Then Exit Sub 'メモRowが0なら終了 '「メモ」シートの検索行のB列にテキストボックスの内容を入力 Worksheets("メモ").Cells(メモRow, "B").Value = Me.TextBox1.Value Unload Me End Sub

16bis
質問者

補足

早速、詳しいご教示ありがとうございます。 このユーザーフォームを作るのにインターネットで色々調べつぎはぎして数ヶ月がかりで作成しましたが、質問をしてすぐに返事を頂き、ただただ驚嘆しております!! 検索して表示するところまで作成しました。上手くいかないところがあります。 (1)職員データ・メモ 両方のシートに職員番号がある場合。  検索画面を閉じるとメモシート上にデータフォームが表示され肝心の職員のデータが表 示されない '▽DATAフォームのLoadが無かったので追加 Private Sub 閉じる_Click() Unload Me Worksheets("職員データ").Activate ←この行を追加すると職員データシートに表示 Load DATA               されるようになりました。 DATA.Show End Sub (2)職員データにあってメモシートにない場合  検索フォームの閉じるをクリックすると    実行時エラー'1004': アプリケーション定義またはオブジェクト定義エラーです 。  とメッセージが有りデバッグ を押すと 検索画面のコードが表示され '▽DATAフォームのLoadが無かったので追加 Private Sub 閉じる_Click() Unload Me Worksheets("職員データ").Activate Load DATA ←この行が黄色く反転しています。 DATA.Show End Sub と表示されます ※検索フォームを閉じる前は メモシート上で "メモ"フォームにその検索値は存在しません。のお知らせが有り OKを押すと 検索画面は表示されていて カーソルは最終の職員番号の位置に有り この検索画面の閉じるボタンを押すと上記のようになります。 ※私としてはこのとき iカーソルはメモシートの最終の職員番号の下(新しく職員番号・氏名・メモを書きたいため) ii閉じるボタンを押すと職員データシートに移りメモ以外の職員のデータは表示したい ここはまだ教えていただいた所を試していませんが iii当月のメモ内容をメモシートに書き込みたい。職員コード・氏名(これは職員データにあります)・メモを最終行に書き込みたい 職員データは毎月総務課で作成し、私は給与計算の時このデータを参考にしております。当月間違いがあって次月にメモとして残したい時や、総務課で作成するデータ以外の事もデータとして残しておきたいのでこのようにメモシートを独立して作りました。メモシートはA:職員コード B:氏名 C:メモ です。ちょうど今、やっと9月の給与計算が終了し今度は月末の処理が始まります。このエクセルのシートが上手く動くようになれば自分の仕事がこの上なくスムースに進むと思います。どうぞよろしくご教示くださいますようお願いいたします。

関連するQ&A

  • ユーザーフォームに入力したデーターが転記できない

    いつもお世話になります。 Windows7 excell2010 です。 いろんなものに勉強してここまでに作成したユーザーフォームですが、データーは入力できるのですがコマンドボタンをクリックしても各セルに反映されません。 色々と試行錯誤していますがうまくゆきません。 どこに不具合があるかわからず恐れ入りますがどなたかご指導いただけませんか。 参考にコードは参考に下記にします。 ユーザフォームのVBAは下記です コード ※Module1 Sub 売上() Do UserForm1.Show Loop End Sub Sub 入金() Do UserForm2.Show Loop End Sub ※UserForm1 Private Sub UserForm_Initialize() With ComboBox1 .AddItem "1" .AddItem "2" .AddItem "3" End With End Sub Private Sub CommandButton1_Click() n = Cells(Rows.Count, 1).End(xlUp).Row + 1 Cells(n, 2) = UserForm1.TextBox1.Text Cells(n, 3) = UserForm1.TextBox2.Text Cells(n, 4) = UserForm1.TextBox3.Text Cells(n, 11) = UserForm1.ComboBox1.Text Unload Me End Sub Private Sub CommandButton2_Click() Unload Me End End Sub ※UserForm2 Private Sub CommandButton1_Click() n = Cells(Rows.Count, 1).End(xlUp).Row + 1 Cells(n, 2) = UserForm2.TextBox1.Text Cells(n, 3) = UserForm2.TextBox2.Text Cells(n, 4) = UserForm2.TextBox3.Text Unload Me End Sub Private Sub CommandButton2_Click() Unload Me End End Sub

  • エクセルのユーザーフォームでご教授ください

    マクロの知識はほぼなく、調べながらエクセルの入力用のユーザーフォームを作りましたが、うまく作動しません。 UserForm1 ~~~~~~~~~~~~~~~~~~~~~~~~~ Option Explicit Private Declare Function ReleaseCapture Lib "user32" _ () As Long Private Sub UserForm_Initialize() Me.Show End Sub Private Sub Button_cxl_Click() Me.Hide End Sub Private Sub ok_Click() Dim RowNum As Long Dim Ctrl As Control RowNum = Cells(Rows.Count, 1).End(xlUp).Row + 1 Cells(RowNum, 1).Value = Me.txt_date Cells(RowNum, 2).Value = Me.txt_guest Cells(RowNum, 3).Value = Me.txt_person Cells(RowNum, 4).Value = Me.txt_begin Cells(RowNum, 5).Value = Me.txt_finish For Each Ctrl In Me.Controls If Ctrl.Name Like "txt*" Then Ctrl.Value = "" RowNum = 0 End If Next Ctrl Me.Hide ReleaseCapture UserForm2.Show vbModal End Sub ~~~~~~~~~~~~~~~~~~~~~~~~~ UserForm2 ~~~~~~~~~~~~~~~~~~~~~~~~~ Option Explicit Private Declare Function ReleaseCapture Lib "user32" _ () As Long Private Sub UserForm_Initialize() End Sub Private Sub ButtonEnd_Click() Unload Me UserForm1.Hide End Sub Private Sub ButtonNext_Click() Unload Me ReleaseCapture UserForm1.Show vbModal End Sub ~~~~~~~~~~~~~~~~~~~~~~~~~ Module1 ~~~~~~~~~~~~~~~~~~~~~~~~~ Sub ユーザーフォーム() UserForm1.Show End Sub ~~~~~~~~~~~~~~~~~~~~~~~~~ UserForm1を開き、Button_cxlで閉じず、もう一度Button_cxlをクリックで閉じる。 UserForm1を開き、Button_okでUserForm2を出し、ButtonEndをクリックでUserForm1にもどる(1と2を数度行き来しても同じ) UserForm1を開き、Button_okでUserForm2を出しButtonNextをクリックでUserForm1にもどりButton_cxlをクリックで閉じず、もう一度クリックしても閉じず、三回目で閉じる。 現状、エクセルを開いた直後のみで発生してます。 一度ユーザーフォームを出し、閉じたあとは意図通り動き、再度エクセルを開くまで発生しません。 ちなみにUserForm2の Private Sub ButtonEnd_Click() Unload Me UserForm1.Hide End Sub 部分の、UserForm1.HideをUnload UserForm1にすると、「オブジェクト変数または With ブロック変数が設定されていません」と出てデバックでModule1の UserForm1.Show が黄色になります。 どこが悪いか教えてください。

  • マクロのユーザーフォームについて(エラー)

    現在、エクセルのマクロ・ユーザーフォームを使って書式を作っています。 ユーザーフォームを幾つか使っているのですが、ある一つのフォームを開こうとするとそれだけ”インディックスが有効範囲にありません。”とエラーが出ます。 他のフォームと構文の内容はほぼ同じなのですが、それだけ開かないのです。どこが間違っているのか、教えていただけないでしょうか? ■ユーザーフォーム2からユーザーフォーム7を開きたい■ -----ユーザーフォーム2の構文----- Private Sub CommandButton2_Click() '出張期間を閉じて業務内容を開く Unload UserForm2 Dim myRow As Long Dim myMaxNo As Integer   myRow = 12 myMaxNo = Worksheets("規定").Range("E25").Value Do Until Cells(myRow, 22) = "" myRow = myRow + 1 Loop If (myRow - 12) >= myMaxNo Then MsgBox "入力できる件数を超えています。" Else UserForm7.Show ※←ここで止まってしまいます。 End If End Sub

  • ユーザーフォームをWorksheet上で表示

    数日前、このカテゴリで相談した事の続きです。 以前の相談は、次の通りです。 http://okwave.jp/qa/q8892460.html この相談の中で出来たことは 1 ユーザーフォームを保存終了 2 Worksheet上にボタンを作成、そのボタンをクリックでユーザーフォームを表示 以上のことはできました。 作成したコードは次のとおりです。   '// Private Sub UserForm_Initialize() With Worksheets("Sheet1")  TextBox1 = .Cells(1, 1).Value  TextBox2 = .Cells(2, 1).Value TextBox3 = .Cells(3, 1).Value TextBox4 = .Cells(4, 1).Value TextBox5 = .Cells(5, 1).Value ).Value End With End Sub Private Sub UserForm_Terminate() With Worksheets("Sheet1")  .Cells(1, 1).Value = TextBox1  .Cells(2, 1).Value = TextBox2 .Cells(3, 1).Value = TextBox3 .Cells(4, 1).Value = TextBox4 .Cells(5, 1).Value = TextBox5 End With End Sub '// Private Sub cmdsyuuryo_Click() Unload Me End Sub Private Sub UserForm_Click() Myform.Show vbModeless End Sub そこで質問です。 現在Worksheet上にボタンを作成、クリックしてユーザーフォームを表示しているの を、WorksheetのセルA1(名前を記述してある)をクリックするだけでユーザーフォー ムを表示する方法はありませんか? ユーザーフォームの保存先は「Sheet1」のA1からA5までです。 できれば、この設定で具体的なコードの記述をお願いします。 Excel2013です。 よろしくお願いします。

  • ユーザーフォームの切り替えについて・・・

    UserForm1とUserForm2の2つのユーザーフォームがあります。 UserForm1の中にあるcommandButton1をクリックすると、UserForm2が表示される仕組みになっています。 (ちなみに、UserForm2にもコマンドボタンがあり、クリックするとUserForm1に戻るようになっています) UserForm1の方に、 Private Sub CommandButton1_Click() UserForm2.Show 0 Unload UserForm1 End Sub UserForm2の方に、 Private Sub CommandButton1_Click() UserForm1.Show 0 Unload UserForm2 End Sub と記述してあります。 ところが、それぞれのユーザーフォームには、閉じると同時にブックが閉じるように Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer) ActiveWorkbook.Save 'ブックを保存 ActiveWorkbook.Close 'ブックを閉じる Application.Quit 'excelを終了 End If End Sub というコードを記述しているため、UserForm1からUserForm2へ移るときにブックが閉じてしまいます。 右上の「×」を押したときだけブックを閉じるようにしたいのですが、どういうコードを書いたらいいのですか? 宜しくお願いします。(*´Д`人)

  • マクロ ユーザーフォームが表示されない

    いつも回答して頂き、ありがとうございます。 Sub UserForm1() UserForm1.Show End Sub と記述しましたが、エラーが発生し、ユーザーフォームが表示してくれません。 コンパイルエラー:Functionまたは変数が必要です フォームはコマンドボタンを一つ配置し、 Private Sub CommandButton1_Click() Unload UserForm1 End Sub と記述してあるだけです。何が悪いのでしょうか?御教授の程宜しくお願い致します。

  • ユーザーフォームVBAでCells(n, 7)が

    いつもお世話になります Windows7 excell2010 です ご指導を仰ぎたいのは参照図で言うと、 TextBox1~6 は順調に入力しますがTextBox7にすると「入力」に飛び 参照図のG13に入力されません。 VBAを勉強し始めたはかりですのでどこが悪いかわかりません。 恐れ入りますがご指導願えませんでしょうか。 下記参考にします。 Module のコードには Sub FormSample() Do UserForm1.Show Loop End Sub Sub Test() MsgBox "ボタンによるマクロの実行" End Sub UserForm1 Private Sub CommandButton1_Click() n = 1 Do n = n + 1 Loop While Cells(n, 1) <> "" Cells(n, 1) = UserForm1.TextBox1.Text Cells(n, 2) = UserForm1.TextBox2.Text Cells(n, 3) = UserForm1.TextBox3.Text Cells(n, 4) = UserForm1.TextBox4.Text Cells(n, 5) = UserForm1.TextBox5.Text Cells(n, 6) = UserForm1.TextBox6.Text Cells(n, 7) = UserForm1.TextBox7.Text Unload Me End Sub Private Sub CommandButton2_Click() Unload Me End End Sub

  • ユーザーフォームの入力時のマクロについて

    いつもお世話になります。 Windows7 excell2010 です。 今まさにVBAをやり出してあまりわかっていませんが下記のようにまでになったところです。 ご指導をいただきたいのは、 参照図にあるUserForm1に入力するとき、 「日付」 ime が 半角数値 「顧客名」ime が ひらがな 「売上」 ime が 半角数値 を自動的にする マクロ を記述したいです。 ご指導いたたければ幸いです。 下記のようなマクロが記述されています。 ※UserForm1 コード表示 Private Sub CommandButton1_Click() n = 1 Do n = n + 1 Loop While Cells(n, 1) <> "" Cells(n, 1) = UserForm1.TextBox1.Text Cells(n, 2) = UserForm1.TextBox2.Text Cells(n, 3) = UserForm1.TextBox3.Text Unload Me End Sub Private Sub CommandButton2_Click() Unload Me End End Sub ※標準モジュール Sub FormSample() Do UserForm1.Show Loop End Sub Sub Test() MsgBox "ボタンによるマクロの実行" End Sub

  • ユーザーフォームの内容が一部だけ残らない。

    VBAを始めてまだ1週間ほどなのでどの部分を変えればよいのかわかりません。 どなたかわかる方が居れば回答をお願いします。 問題:下記の構文でTextBox2の内容だけが残らない。 UserFoem1で記入場所が7つあり、ボタン1(入力)を押すと 7つの内容がSheet(履歴表)に転記されます。 ボタン2(終了)を押すとUserFormが消えます。 そして転記された後、内容をそのまま7つのTextBoxに残したいと思っています。 TextBox1(txtDate)日付を自動で表示して、 TextBox3~7までは転記後も内容は残るのですが、 TextBox2の内容だけが残らないのです。 下記の構文はネット上でいろんな方のものをコピペして製作したので、 訳の分からない文字がたくさんあり理解をしていない部分はあります。 ですので回答をいただけるならTextBox2の問題解決と 下記の内容をもっとスマートな形に変えて 不要な部分を削除して頂けたらと思っています。 宜しくお願い致します。 Sub ユーザーフォームで履歴表へ入力する() End Sub Private Sub CommandButton1_Click() Dim n As Long With Worksheets("履歴表") n = .Range("B" & Rows.Count).End(xlUp).Row  'Bの一番下を検索する Cells(n + 1, 2).Value = txtDate.Value    'テキストボックス2に自動で日付を入れてB列へ Cells(n + 1, 3).Value = TextBox2.Value 'C列へ代入 Cells(n + 1, 4).Value = TextBox3.Value 'D列へ代入 Cells(n + 1, 5).Value = TextBox4.Value 'E列へ代入 Cells(n + 1, 6).Value = TextBox5.Value 'F列へ代入 Cells(n + 1, 7).Value = TextBox6.Value 'G列へ代入 Cells(n + 1, 8).Value = TextBox7.Value 'H列へ代入 Range(Cells(n + 1, 2), Cells(n + 1, 2)).Offset(, -1).Value = Range(Cells(n + 1, 2), Cells(n + 1, 2)).Row - 4   'A列に番号を順番に入れる End With TextBox2.Value = "" TextBox2.SetFocus End Sub Private Sub TextBox2_Change() '商品名 End Sub Private Sub TextBox3_Change() '型式・形式 End Sub Private Sub TextBox4_Change() '数量 End Sub Private Sub TextBox5_Change() '客先 End Sub Private Sub TextBox6_Change() '担当 End Sub Private Sub TextBox7_Change() '備考 End Sub Private Sub txtDate_Change() End Sub Private Sub UserForm_Click() End Sub Private Sub UserForm_Initialize() UserForm1.txtDate.Value = Date End Sub Private Sub CommandButton2_Click() Me.Hide End Sub

  • ユーザーフォームを使った検索について

     仕事で使うために、VBAを勉強中ですが、検索の段階でつまずいてしまいました。自分なりに色々やってみたのですが、どうしてもうまくいきません。自分の知識不足が原因なのですが、どこをいじったらよいのかわからないでいます。  シート"一覧"にA列から整理No、職員番号、職種、氏名・・・・という風に、40列、130行程度データが入ります。 ユーザーフォームに複数のテキストボックスを作り、氏名を入力することで、任意のテキストボックスにその行のデータを返すようにしたいのですが、検索すると、アクティブセルの値が表示されます。  よろしくお願いします。 Private Sub cmb検索_Click() Dim frange As Range Dim frow As Long If (txt検索氏名 = "") Then MsgBox "氏名を入力して下さい。", vbExclamation Exit Sub End If Set frange = Worksheets("一覧").Columns(4).Find(what:=txt検索氏名.Text,LookIn:=xlValues, lookat:=xlWhole,searchorder:=xlByRows) If (frange Is Nothing) Then MsgBox "入力された氏名が見つかりませんでした。", vbExclamation Exit Sub End If frow = frange.Row txt検索整理番号.Value = Cells(検索データ行, 1).Value txt検索職名.Value = Cells(検索データ行, 2).Value txt検索職員番号.Value = Cells(検索データ行, 3).Value txt検索氏名.Value = Cells(検索データ行, 4).Value txt検索フリガナ.Value = Cells(検索データ行, 5).Value ’以下40行程度 End Sub

専門家に質問してみよう