Page 668 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 通常モードに戻る ┃ INDEX ┃ ≪前へ │ 次へ≫ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ▼条件にあったセルに自動入力 hana 03/1/30(木) 18:08 ┗Re:条件にあったセルに自動入力 ポンタ 03/1/31(金) 12:49 ┗Re:条件にあったセルに自動入力 hana 03/1/31(金) 18:09 ┗Re:条件にあったセルに自動入力 ポンタ 03/1/31(金) 22:27 ┗Re:条件にあったセルに自動入力 ポンタ 03/1/31(金) 22:36 ┗Re:条件にあったセルに自動入力・続 hana 03/2/1(土) 23:48 ┗Re:条件にあったセルに自動入力・続 ポンタ 03/2/2(日) 14:24 ┗Re:条件にあったセルに自動入力・続 hana 03/2/2(日) 22:06 ┗Re:条件にあったセルに自動入力・続 ポンタ 03/2/3(月) 14:08 ┗Re:条件にあったセルに自動入力・続 hana 03/2/3(月) 21:02 ┗Re:条件にあったセルに自動入力・続 ポンタ 03/2/3(月) 22:19 ┗Re:条件にあったセルに自動入力・続 hana 03/2/3(月) 23:03 ┗Re:条件にあったセルに自動入力・続 ポンタ 03/2/3(月) 23:25 ┗できました!! hana 03/2/4(火) 9:41 ─────────────────────────────────────── ■題名 : 条件にあったセルに自動入力 ■名前 : hana ■日付 : 03/1/30(木) 18:08 -------------------------------------------------------------------------
連続ですみません。下と同じ表にまだ取組んでおります。 いきなり期日が決められてしまったり、内容がかえられ たりなのでとても困憊しています。お助け下さい・・。 1 2 3 4 5 ・・・・・ 1 日付 コードNO. 店名 コードNO. 店名 ・・ ______________________________________________ 2 | 鈴 木 | 田 中 | ・ _________________________ 3 1/1 | 1111 |A店 | 2222 |B店 |・・ _______________________ 4 1/2 | 2222 |B店 | 3333 |C店 |・・ ・ ・ 行に日付・列に人名の表で、コード番号を入力すると店名が VLOOKUP関数で入る上記の様なシフト表があります。コード NO.を入力する前に、1.何日に2.誰が3.この店に・・という 風に自動入力できるものでしょうか?1.(行)と2.(列)で セルの位置を探して3.の店コードを入力、という流れかな? とか思ったりしましたがそこで思考回路が止まっております。 最終的にはユーザーフォームで選択もしくは入力すると、 表中に自動入力という形にしなければならないのですが・・。 わかりづらくてすみませんが宜しくお願い致します。 |
UserForm上にComboBox1、ComboBox2、ComboBox3、CommandButton1を 作ってあげれば簡単にできると思います。 コードとしてはこんな感じです。 Private Sub CommandButton1_Click() Dim Mes As String Me.Hide If ComboBox1.ListIndex = -1 Then Mes = "日付を選択してください" ElseIf ComboBox2.ListIndex = -1 Then Mes = "人名を選択してください" ElseIf ComboBox3.ListIndex = -1 Then Mes = "店名を選択してください" Else Mes = "" End If If Mes <> "" Then MsgBox (Mes) Me.Show Exit Sub End If Cells(ComboBox1.ListIndex + 3, ComboBox2.ListIndex * 2 + 3).Value = ComboBox3.Value End Sub Private Sub UserForm_Initialize() Dim i As Long For i = 3 To Range("A65536").End(xlUp).Row Call ComboBox1.AddItem(Format(Cells(i, 1).Value, "M月D日")) Next For i = 2 To Range("iv2").End(xlToLeft).Column Step 2 Call ComboBox2.AddItem(Cells(2, i).Value) Next End Sub ComboBox3 の RowSource プロパティを設定することをお忘れなく。 分からないことがあれば、質問してください。 |
▼ポンタ さん: >UserForm上にComboBox1、ComboBox2、ComboBox3、CommandButton1を >作ってあげれば簡単にできると思います。 > >コードとしてはこんな感じです。 > >Private Sub CommandButton1_Click() > Dim Mes As String > Me.Hide > If ComboBox1.ListIndex = -1 Then > Mes = "日付を選択してください" > ElseIf ComboBox2.ListIndex = -1 Then > Mes = "人名を選択してください" > ElseIf ComboBox3.ListIndex = -1 Then > Mes = "店名を選択してください" > Else > Mes = "" > End If > If Mes <> "" Then > MsgBox (Mes) > Me.Show > Exit Sub > End If > Cells(ComboBox1.ListIndex + 3, ComboBox2.ListIndex * 2 + 3).Value = ComboBox3.Value > >End Sub > >Private Sub UserForm_Initialize() > Dim i As Long > For i = 3 To Range("A65536").End(xlUp).Row > Call ComboBox1.AddItem(Format(Cells(i, 1).Value, "M月D日")) > Next > For i = 2 To Range("iv2").End(xlToLeft).Column Step 2 > Call ComboBox2.AddItem(Cells(2, i).Value) > Next >End Sub > >ComboBox3 の RowSource プロパティを設定することをお忘れなく。 >分からないことがあれば、質問してください。 いつもありがとうございます!教えて頂いたコードを元に本を見たり して調べながら少しかえてみましたがどうにも間違っているみたいです。 combobox3はリストが長いのでテキストボックスにして入力して もらった数値をそのままセルに入力できたら・・と思いましたので textboxにしたいのですが・・・。 詳しいシートの状態はF8〜F38に日付、6行目のI6〜BN6に人名、 I8〜BN38Gは2行くくりで左コード・右店名,H列は曜日と日程で 関係ない状態です。 Private Sub UserForm_Initialize() Dim i As Long For i = 8 To Range("F65536").End(xlUp).Row Call ComboBox1.AddItem(Format(Cells(i, 6).Value, "M月D日")) Next For i = 9 To Range("iv6").End(xlToLeft).Column Step 2 Call ComboBox2.AddItem(Cells(6, i).Value) Next Private Sub CommandButton1_Click() Dim Mes As String Me.Hide If ComboBox1.ListIndex = -1 Then Mes = "日付を選択してください" ElseIf ComboBox2.ListIndex = -1 Then Mes = "人名を選択してください" ElseIf TextBox = "" Then Mes = "店舗コードを入力してください" Else Mes = "" End If If Mes <> "" Then MsgBox (Mes) Me.Show Exit Sub End If Cells(ComboBox1.ListIndex + 8, ComboBox2.ListIndex * 2 + 9).Value = TextBox.Value End Sub よくわからない中でいじってますので余計おかしくしているかも しれません。すみません。 |
これでどうでしょう? Private Sub CommandButton1_Click() Dim Mes As String Me.Hide If ComboBox1.ListIndex = -1 Then Mes = "日付を選択してください" ElseIf ComboBox2.ListIndex = -1 Then Mes = "人名を選択してください" ElseIf TextBox1.Value = "" Then Mes = "店舗コードを入力してください" Else Mes = "" End If If Mes <> "" Then MsgBox (Mes) Me.Show Exit Sub End If Cells(ComboBox1.ListIndex + 8, ComboBox2.ListIndex * 2 + 9).Value = TextBox1.Value End Sub Private Sub UserForm_Initialize() Dim i As Long For i = 8 To Range("F65536").End(xlUp).Row Call ComboBox1.AddItem(Format(Cells(i, 6).Value, "M月D日")) Next For i = 9 To Range("iv6").End(xlToLeft).Column Step 2 Call ComboBox2.AddItem(Cells(6, i).Value) Next End Sub ※TextBoxの名前はわざわざ変更しない限り、 最初に作ったものがTextBox1、次がTextBox2、・・・なので、 そのように書きました。 これがうまくいったら、 テキストボックスに店舗コードを入力した瞬間に 店舗名を表示するマクロを付け加えてみてはいかがでしょう? |
書き忘れましたが、このマクロはこの表があるシートが アクティブじゃないと動きません。 シートがアクティブじゃない状態でも動かしたいなら、 この表があるシートのシート名を教えてください。 |
▼ポンタ さん: >書き忘れましたが、このマクロはこの表があるシートが >アクティブじゃないと動きません。 > >シートがアクティブじゃない状態でも動かしたいなら、 >この表があるシートのシート名を教えてください。 いつもご親切にありがとうございます。教えて頂いたマクロで うまく動きました!!シートですが今の所の予定では同シート内 ですので大丈夫だと思います。 今度はアドバイスを頂いたように、店名が表示されるように textbox2を新たに作り、textbox1に店コードが入力され たらvlookupで店名を呼び出すようにしてみようと思ったの ですが、これまた躓いております・・。恥ずかしながら下記の ようにしてみたのですが・・ Private Sub TextBox1_Change() Dim 範囲 As Range Dim 検索値 As Long Dim 位置列 As Long '検索テーブルはcode.xlsのcodeシートのA3:B280セル範囲 Set 範囲 = Workbooks("code.xls").Worksheets("code").Range("A3:B280") 検索値 = TextBox1.Value TextBox2.Value = Application.WorksheetFunction.VLookup(検索値, 範囲, 2, False) End Sub また、教えていただいたコンボボックスだと1回ずつ入力用のボタン をクリックする事になりますが、これを複数選択の掛け合わせにする のはかなり難しいでしょうか??例えば1/1・1/2・1/3にはAさんと Bさんをコード番号1のお店に・・のような形です。本等を見て勉強 してはいるのですが、パターンが違うととまってしまいます。。 |
>textbox1に店コードが入力されたらvlookupで店名を呼び出すように 他のブックを参照しているようなので、BO1を使って店名を求めました。 非表示にしても問題ない適当なセルに書き直してください。 >これを複数選択の掛け合わせにするのはかなり難しいでしょうか?? ComboBoxで複数選択を可能にする方法を知らないので、 代わりにListBoxを使う方法を考えました。 ComboBox1、ComboBox2を削除してから、ListBox1、ListBox2を作成してください。 ListBox1、ListBox2の MultiSelect プロパティを fmMultiSelectMulti にしてから、お試しください。 Private Sub CommandButton1_Click() Dim Mes As String Dim i As Integer, j As Integer Dim bln1 As Boolean, bln2 As Boolean Me.Hide If TextBox1.Value = "" Then Mes = "店舗コードを入力してください" ElseIf TextBox2.Value = "" Then Mes = "店舗コードが間違っています" Else Mes = "" End If If Mes <> "" Then MsgBox (Mes) Me.Show Exit Sub End If For i = 0 To ListBox1.ListCount - 1 If ListBox1.Selected(i) Then bln1 = True For j = 0 To ListBox2.ListCount - 1 If ListBox2.Selected(j) Then Cells(i + 8, j * 2 + 9).Value = TextBox1.Value bln2 = True End If Next End If Next If bln1 = False Then MsgBox ("日付を選択してください") ElseIf bln2 = False Then MsgBox ("人名を選択してください") End If End Sub Private Sub TextBox1_Change() Dim MyRange As Range Set MyRange = Range("BO1") MyRange.Formula = "=VLOOKUP(" & TextBox1.Value & ",[code.xls]code!A3:B280,2,TRUE)" If IsError(MyRange) Then TextBox2.Value = "" Else TextBox2.Value = MyRange.Value End If End Sub Private Sub UserForm_Initialize() Dim i As Long ListBox1.Clear ListBox2.Clear For i = 8 To Range("F65536").End(xlUp).Row Call ListBox1.AddItem(Format(Cells(i, 6).Value, "M月D日")) Next For i = 9 To Range("iv6").End(xlToLeft).Column Step 2 Call ListBox2.AddItem(Cells(6, i).Value) Next End Sub ※入力漏れを警告するメッセージの優先順位が若干変更されてます。 (日付、人名、店舗コード→店舗コード、店舗名、日付、人名) ※TextBox2は入力不可にしておくか、Labelにしてしまったほうがよいかもしれません。 |
ポンタ様 本当に本当にいつもありがとうございます。お蔭様でそんなの 私には無理だ・・と思っていた複数選択での入力がばっちり できるようになりました!! ただ、textbox1にコードを入力してvlookupでtextbox2に 店名を表示させる際、数字のみのコードはきれいに動くの ですが、アルファベット混じりのコード(例:S12のような) だと反応しません。多分ちょっとしたことなのだろう、と自力 での解決を目指しましたが結局分かりません。もう一度だけお力 を頂けないでしょうか・・? |
MyRange.Formula = "=VLOOKUP(" & TextBox1.Value & ",[code.xls]code!A3:B280,2,TRUE)" を MyRange.Formula = "=VLOOKUP(""" & TextBox1.Value & """,[code.xls]code!A3:B280,2,TRUE)" で、どうでしょう? |
本当にしつこくて申し訳ありません。新しく教えていただいた コードだとアルファベット混じりのものはばっちりなのですが、 そうすると今度は数字のみのコードの場合がダメみたいですxxxxx ▼ポンタ さん: > MyRange.Formula = "=VLOOKUP(" & TextBox1.Value & ",[code.xls]code!A3:B280,2,TRUE)" >を > MyRange.Formula = "=VLOOKUP(""" & TextBox1.Value & """,[code.xls]code!A3:B280,2,TRUE)" >で、どうでしょう? |
VLOOKUP関数の使い方が分かってないことが ばれちゃいましたね。(^_^;) これでどうですか? Private Sub TextBox1_Change() Dim MyRange As Range Set MyRange = Range("BO1") MyRange.Formula = "=VLOOKUP(" & TextBox1.Value & ",[code.xls]code!A3:B280,2,FALSE)" MyRange.Offset(1, 0).Formula = "=VLOOKUP(""" & TextBox1.Value & """,[code.xls]code!A3:B280,2,FALSE)" If IsError(MyRange) = False Then TextBox2.Value = MyRange.Value ElseIf IsError(MyRange.Offset(1, 0)) = False Then TextBox2.Value = MyRange.Offset(1, 0).Value Else TextBox2.Value = "" End If End Sub |
こんばんは。早速またもやありがとうございます! でもでも・・やっぱりできませんです。。今回のコードでは 数字のみはOKで、アルファベット混じりのコードは0という 認識なのか0コードで登録している”希望休日”が出てしまい ます・・。実際の表にはセルにVLOOKUPが使ってあるので、 textbox2の表示がどうであれ作業には問題はないのですが・・ ▼ポンタ さん: >VLOOKUP関数の使い方が分かってないことが >ばれちゃいましたね。(^_^;) > >これでどうですか? > >Private Sub TextBox1_Change() > Dim MyRange As Range > Set MyRange = Range("BO1") > MyRange.Formula = "=VLOOKUP(" & TextBox1.Value & ",[code.xls]code!A3:B280,2,FALSE)" > MyRange.Offset(1, 0).Formula = "=VLOOKUP(""" & TextBox1.Value & """,[code.xls]code!A3:B280,2,FALSE)" > If IsError(MyRange) = False Then > TextBox2.Value = MyRange.Value > ElseIf IsError(MyRange.Offset(1, 0)) = False Then > TextBox2.Value = MyRange.Offset(1, 0).Value > Else > TextBox2.Value = "" > End If >End Sub |
早いだけで、お役に立てず、スミマセン。 さらに別の案を考えました。 BO2のセルに以下のような式を入れてください。 =VLOOKUP(BO1,'[code.xls]code'!A3:B280,2,FALSE) BO1にいろんな値を入れてみて、 ちゃんと正しい店舗名を表示することを確認してください。 その上で、このコードの置き換えてみてください。 Private Sub TextBox1_Change() Dim MyRange As Range Set MyRange = Range("BO2") MyRange.Offset(-1, 0).Value = TextBox1.Value If IsError(MyRange) = False Then TextBox2.Value = MyRange.Value Else TextBox2.Value = "" End If End Sub |
早い上にご親切にして頂いていつも感激です!! これでばっちりでした!教えて頂いたコードを見ると なるほどと思うんですけど自分ではできず。。。貴重な お時間と知識をありがとうございました!! |