advanced help
per page, with , order by , clip by
Results of 1 - 1 of about 2815 for 入力規則 (0.006 sec.)
[[20200623003453]]
#score: 4286
@digest: 7332876050c715edd15557d7c182ab96
@id: 84156
@mdate: 2020-07-14T23:28:56Z
@size: 27244
@type: text/plain
#keywords: ピエ (90372), ビル (81968), エト (77341), ト3 (35626), sheetc (34561), へ飛 (24302), validation (16909), sheeta (15390), 索ボ (15194), 飛ぶ (13865), シー (10528), ム1 (9314), ル名 (8805), formula1 (8606), ート (8219), ラム (8062), のb2 (7414), トa (7234), 力規 (6705), ト1 (6486), worksheets (6268), プロ (5223), 規則 (5194), ト2 (5055), トロ (4875), ルa (4723), ログ (4430), goto (4402), グラ (4291), 2020 (4086), 記載 (3909), application (3388)
『検索システムおよびシート検索』(ピエトロ)
エクセルで実現可能なのかわからず、 実現可能なのかとプログラムとなると どのように書いていけばよいか、教えていただけないでしょうか。 お願いいたします。 シート 1 ___C___ ___D___ 検索名▼ 検索ボタン シート 2(新規入力) ___C___ ___D___ ビル名 入力ボタン シート 3 ___A____ __B____ 管理番号 ビル名 1 A 2 B 3 C シート A シート B シート C *********** シート1で セルにビル名又は▼を押して A又はB又はCのいづれかを選択して検索ボタンをクリックすると シートA又はB又はCへ飛ぶ 一方、シート2で新規に入力されたビル名を入力ボタンで、 シート3に順番に登録されていく。 そしてシート〇←ビル名を作成されていく。 シート2で新規を入力後、シート1の検索で 先ほど、入力したビル名が検索でき、検索ボタンで シート〇へ飛んでいく。 ********** VLOOKUP関数でシートで飛ぶことはできると思うのですが 新規で、順番に蓄積されていくビル名を VLOOKUP関数で補うことはできるのでしょうか。 思いつかず、困っております。 < 使用 Excel:Excel2016、使用 OS:Windows10 > ---- 特定のシートにジャンプするには Application.Gotoメソッドを使うとよいと思います。 できているところまで示されると、皆さんからコメントが入ると思います。 (γ) 2020/06/23(火) 08:48 ---- Dim items() As Variant items = WorksheetFunction.Transpose(Worksheet3.Range("B5:B9").Value) Range("B2").Validation. _ Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Formula1:=Join(items, ",") シート3からシート1へ検索データを引っ張るプログラムをまずは考えています。 (ピエトロ) 2020/06/24(水) 07:57 ---- こんばんは。 (γ)さんありがとうござます。 現在までに考えた内容を記載いたします。 まだまだ、エラーが解決できず、困っております。 お知恵をお借りできないでしょうか Sub Sample_Goto() Dim items() As Variant items = WorksheetFunction.Transpose(Worksheet3.Range("B5:B9").Value) 'シート3のB列からビルAを選択 Range("B2").Validation._Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Formula1:=Join(items, ",") Application.Goto Worksheets("SheetA").Range("C3"), True 'ビルAが記載されているシートAへ飛ぶ End Sub (ピエトロ) 2020/06/26(金) 00:17 ---- やりたいことがピンと来てませんが、 ■1 いらないアンダースコアがついてるので構文エラーになってませんか? Range("B2").Validation._Add ↓ Range("B2").Validation.Add さらに、事前に入力規則が設定されている可能性はないのでしょうか? https://www.moug.net/tech/exvba/0050121.html ■2 また、「Worksheet3」とは何を想定してるのですか? (もこな2 ) 2020/06/26(金) 01:06 ---- Sub Sample_Goto()のなかに ・リストを使った入力規則の設定 と ・Application.Gotoを使ったジャンプが 同時に盛り込まれていますが、 その二つは別の話ですよね。ひとつのプロシージャにする意図がよくわかりません。 それと、 Application.Goto Worksheets("SheetA").Range("C3"), True については、 s = シート名をいれたセルの値 Application.Goto Worksheets(s).Range("C3"), True のような感じになるのではないですか? 取り急ぎ。 (γ) 2020/06/26(金) 07:28 ---- こんにちは。 まずは要件をまとめることから始めましょう。 >シート1で >セルにビル名又は▼を押して >A又はB又はCのいづれかを選択して検索ボタンをクリックすると >シートA又はB又はCへ飛ぶ >一方、シート2で新規に入力されたビル名を入力ボタンで、 >シート3に順番に登録されていく。 >そしてシート〇←ビル名を作成されていく。 >シート2で新規を入力後、シート1の検索で >先ほど、入力したビル名が検索でき、検索ボタンで >シート〇へ飛んでいく。 これを整理すると 1a.シート1の「?1」セルに入力規則(リスト)を設定する。 1a1.リストはシート3の「?2」の範囲の値にする。 1b.シート1に「検索」ボタンを置く。 このボタンを押すと、1aで決めたシートに移動する。 2a.シート2の「?3」セルに”ビル名”を入力する。 2b.シート2に「入力」ボタンを置く。 このボタンを押すと、 2b1.シート3の「??」セルに2aで入力した値を入力する。 2b2.シートを新規作成し、シート名を2aで入力した値にする。 このような感じでしょうか。 (子つばめ) 2020/06/26(金) 16:59 ---- いくつか不明なところがありますね。 A.シート1の入力規則を設定するセル B.シート2のビル名を入力するセル C.シート3の入力規則のリスト対象になるセル この3つです。 Aについては、最初に示してくれたものではシート1のC列になっていますが、 その後示してくれたコードではB2セルになっています。 これをはっきりセル番地で決めてもらえるとうれしいです。 Bについては、最初に示してくれたものではシート2のC列になっています。 これも行を含めたセル番地で教えてください。 Cについては、コードではWorksheet3のB5:B9となっています。 シート3のB列の5行目以降という理解でいいですか? 仮に、 Aはシート1のB2セル Bはシート2のC1セル Cはシート3のB5セルから下(その下に別の表はないもの) として、続けたいと思います。 (子つばめ) 2020/06/26(金) 17:14 ---- >もこな2さま ご回答ありがとうございます。 >Range("B2").Validation.Addです。 >事前に指定はしておりません。 >Worksheet3 シート3の間違いです。 すいません。 >γさま イメージは、その通りです。 >子つばめさま ご回答ありがとうございます。 >1a1.リストはシート3の「?2」の範囲の値にする。 「B2」以降を検索します。 >2a.シート2の「?3」セルに”ビル名”を入力する。 「C3」入力させます。 >2b1.シート3の「??」セルに2aで入力した値を入力する。 シート3「B3」以降にリスト化される。 >Aについては、最初に示してくれたものではシート1のC列になっていますが、 >その後示してくれたコードではB2セルになっています。 >これをはっきりセル番地で決めてもらえるとうれしいです。 シート3のB2列です。 >Bについては、最初に示してくれたものではシート2のC列になっています。 >これも行を含めたセル番地で教えてください。 シート2「C3」入力させます >Cについては、コードではWorksheet3のB5:B9となっています。 >シート3のB列の5行目以降という理解でいいですか? シート3は、B列のの3行目からとなります。 (ピエトロ) 2020/06/28(日) 19:22 ---- Sub Sample_Goto() Dim items() As Variant items = WorksheetFunction.Transpose(シート3.Range("B3:B2000").Value) 'シート3のB列からビルAを選択 Range("B2").Add Type:=xList, AlertStyle:=xStop, Formula1:=Join(items, ",") Application.Goto Worksheets("SheetA").Range("B2"), True 'ビルAが記載されているシートAへ飛ぶ Application.Goto Worksheets("SheetB").Range("B2"), True 'ビルBが記載されているシートAへ飛ぶ Application.Goto Worksheets("SheetC").Range("B2"), True 'ビルCが記載されているシートAへ飛ぶ '以降、続く End Sub (ピエトロ) 2020/06/28(日) 19:29 ---- すいません >Application.Goto Worksheets("SheetA").Range("B2"), True 'ビルAが記載されているシートAへ飛ぶ >Application.Goto Worksheets("SheetB").Range("B2"), True 'ビルBが記載されているシートBへ飛ぶ >Application.Goto Worksheets("SheetC").Range("B2"), True 'ビルCが記載されているシートCへ飛ぶ の間違いです。 (ピエトロ) 2020/06/28(日) 20:05 ---- Private Sub シート 1_Activate() CommandButton1_Click() Dim my_sheet As Worksheet Dim shname For Each my_sheet In Worksheets シート 3.AddItem (my_sheet.Name) Next my_sheet Private Sub シート 3_Change() Worksheets(シート 3.Value).Select Unload Me shname = Userシート 1.シート 3.Value Sheets(shname).Activate End Sub 他サイトで、似たモノを拾ってきたのですが わかりません。 https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1057051160?__ysp=RVhDRUzjgafjgIHjgrfjg7zjg4jlkI3jgpLjg6rjgrnjg4g%3D (ピエトロ) 2020/06/28(日) 23:41 ---- ■3 見づらいので「2020/06/28(日) 19:29」に提示されたものを整理すると↓になりますよね? Sub Sample_Goto() '★1 Range("B2").Add _ Type:=xList, _ AlertStyle:=xStop, _ Formula1:=Join(WorksheetFunction.Transpose(シート3.Range("B3:B2000").Value), ",") '★2 Application.Goto Worksheets("SheetA").Range("B2"), True 'ビルAが記載されているシートAへ飛ぶ Application.Goto Worksheets("SheetB").Range("B2"), True 'ビルBが記載されているシートAへ飛ぶ Application.Goto Worksheets("SheetC").Range("B2"), True 'ビルCが記載されているシートAへ飛ぶ '以降、続く End Sub ■3-1 ★1の部分について、同じことを確認しますが「シート3」とは何を想定しているのですか? ■3-2 ★2の部分、無条件で飛んでよいのですか? どこかのセルの値で条件分岐するんじゃないのですか? ■4 >他サイトで、似たモノを拾ってきたのですが 意味も分からず適当に変えてもダメです。 今回はほぼ参考にならないでしょう。(changeイベントくらいは関係あるかもですが) (もこな2 ) 2020/06/29(月) 05:58 ---- >もこな2さま ありがとございます。 ■3-1 ★1の部分について、同じことを確認しますが「シート3」とは何を想定しているのですか? 全てのデータを集約しているシートとなります。 ___A____ __B____ 管理番号 ビル名 1 A 2 B 3 C 4 D 以下続く シート2で、新規で取得したビル名を入力すると、シート3に追加で登録されていきます。 これをずっと続けます。 シート1は、シート3で登録しているビル名を検索するシートです。 そして、シート1のビル名を検索し、検索ボタンを押すとシートAに飛びまず。 ■3-2 ★2の部分、無条件で飛んでよいのですか? どこかのセルの値で条件分岐するんじゃないのですか? シート3で登録しているビル名を検索するシート1からビル名を選択し。シート3へ飛びまず。 ■4 わかりました。 すいません。 (ピエトロ) 2020/06/30(火) 06:06 ---- ■5 >全てのデータを集約しているシートとなります。 えーっとそういうことじゃないです。 シート3.Range("B3:B2000") ↓ Worksheets("シート3").Range("B3:B2000") とか、別途 Dim シート3 As Worksheet Set シート3 = Worksheets("シート3") とか必要じゃないの?って言ってます。 ■7 >シート3で登録しているビル名を検索するシート1からビル名を選択し。シート3へ飛びまず。 提示されたコードだと"無条件"で順番に飛びますよね?それでいいんですか? 例えば、↓のように条件分岐するんじゃないですか?と言ってます。 Select Case Worksheets("シート3").Range("A1").Value Case Is = "ビルA" Application.Goto Worksheets("SheetA").Range("B2"), True Case Is = "ビルB" Application.Goto Worksheets("SheetB").Range("B2"), True Case Is = "ビルC" Application.Goto Worksheets("SheetC").Range("B2"), True End Select (もこな2 ) 2020/06/30(火) 07:08 ---- >もこな2さま お返事ありがとうございます。 ■5 おっしゃるとおりです。 ■7 おっしゃるとおりです。 シート1で選択された、ビル名を検索して、検索ビル名を選び選択ボタンを押すと〜という条件ですので ビル名とシート名の条件提示が必要と考えられます。 (ピエトロ) 2020/07/01(水) 05:53 ---- ちょっと話が見えなくなりました、 >おっしゃるとおりです。 と仰るなら、そのようにされたらどうですか? また、すでに指摘があることですが、アクティブシートのB2セルの入力規則をマクロで設定することと、何らかの条件(おそらく、アクティブシートのB2セルの値)でシートを切り替えることは、別動作ではないですか? (もこな2 ) 2020/07/01(水) 07:39 ---- もこな2さま お返事ありがとうございます。 別動作と言うのは、別のプログラムという意味でしょうか? 検索のプログラムとシートへ飛ぶプログラムは別で作成した方が良いということでしょうか。 検索した言葉をシートへ飛ばすのは、一連の流れだと考えて考えて考えています (ピエトロ) 2020/07/01(水) 22:19 ---- 私が勘違いしてるだけかもしれませんが↓のようにしたいのでは? (1) シート1のB2セルに入力規則を設定する (2) ユーザーがシート1のB2セルの値を入力規則をつかって変更する (3) シート1のB2セルの値が変化したら、セルの値をチェックして対応するシートをアクティブにする この場合、(1)と(3)の動作は一連じゃないですよね? (一連の操作にしてしまうと、(2)の操作ができないので。) (もこな2 ) 2020/07/02(木) 07:38 ---- 追加で。 >>さらに、事前に入力規則が設定されている可能性はないのでしょうか? >>https://www.moug.net/tech/exvba/0050121.html >事前に指定はしておりません。 私が考えているとおりであれば(1)について、2回目以降は"前回設定した"入力規則がありませんか? したがって、やはり入力規則のリストを"再設定"するときにいったんクリアしないとダメな気がするのですが・・・ (もこな2 ) 2020/07/02(木) 08:12 ---- >もこな2さま ご回答ありがとうございます。 >この場合、(1)と(3)の動作は一連じゃないですよね? そうです。 おっしゃるとおりのプログラムを組みたいのです。 今まで、ご指摘頂いた内容を整理いたしますと Sub Sample_Goto() '★1 Range("B2").Add _ Type:=xList, _ AlertStyle:=xStop, _ Formula1:=Join(WorksheetFunction.Transpose(Worksheets("シート3").Range("B3:B2000").Value), ",") With Range("D2:D10").Validation .Delete .Add Type:=xlValidateList, _ Operator:=xlEqual, _ Formula1:="=シート3!$B$3:$B$2000" End With '★2 Application.Goto Worksheets("SheetA").Range("B2"), True 'ビルAが記載されているシートAへ飛ぶ Application.Goto Worksheets("SheetB").Range("B2"), True 'ビルBが記載されているシートBへ飛ぶ Application.Goto Worksheets("SheetC").Range("B2"), True 'ビルCが記載されているシートCへ飛ぶ >順次、シート2で作成されていく、ビル〇←名前が更新されていくを情報を読みだすプログラム End Sub このようなプログラムの書き方でしょうか。 (ピエトロ) 2020/07/03(金) 06:14 ---- >このようなプログラムの書き方でしょうか。 聞くより試してみては?そのほうが違うってわかるとおもいますよ。 とりあえず、気になるところを挙げていくと 【気になる点1】 ★1の部分について 提示されたものをそのまま整理しただけで、テストしていなかったので改めてチェックしてみると、いろいろおかしな点がありますね。 (1) Validation が抜けている (2) Type:=xList ←謎の引数を指定している (3) AlertStyle:=xStop ←謎の引数を指定している 【気になる点2】 追加した部分について、参考に提示したMougを真似したようなので構文的な誤りはないようです。 ただ、それ必要なんですか? 【気になる点3】 ★2の部分について 前回指摘しているように、”無条件で”シートA、シートB、シートCの順にアクティブシートが切り替わるようになっています。 【気になる点4】 全体について、すでに指摘しているように一連の動作(同じプロシージャ)ですることではないとおもいます。 (もこな2 ) 2020/07/03(金) 08:07 ---- 横から失礼します。 私が以前にコメントしてから、皆さんからご指摘を頂いているのに、余り進んでいませんね。 既に適切なコメントを頂いているのに、伝わっていない感じです。 喩えて言えばこういうことです。 Sub test() Call 誕生日用のケーキを買う Call (目が覚めたので)顔を洗い、歯磨きする End Sub というような処理になっていませんか、ということです。 生活するということなら、ひとつのくくりになるかもしれませんが、 それは同じタイミングで実施しないといけないことですか? 年一回のことと毎日のことを、同じ命令に入れてあなたは実行しますか? 「入力規則の設定」とは、 つまりは、「複数の選択候補を設定する」ということです。 選択肢の設定は一度すれば済むことで、 ジャンプの都度する必要はないでしょう? ジャンプ処理と一緒にすべきは、 ジャンプに先立って、 「どの選択肢が選択されているかを知ること」ではないですか? (なお、その都度、選択肢を最新のもににするという考えもあるかもしれませんが、 少なくともジャンプする処理の中で選択肢を最新化しても、 すでにユーザーは、選択をしてしまった後なので意味がありません。) 筋道を立てて進めてください。 適当にコード(プログラム)を並べればよいというものでもないですよ。 プログラムは二つに分けては、どうですか? (1)Sheet2にある新規ビルのユーザー入力のあとで、 「ビル追加ボタン」押し下げで実行するコード。 処理内容: ・新規ビルをSheet3の一覧表に反映する。 ・そのビルに対応するシートを作成する。 ・Sheet1にある、入力規則(リスト)を更新する(追加分を反映する)。 (2)入力規則のリストから選択したあとで、「ジャンプボタン」押し下げで実行するコード 処理内容: ・入力規則のあるセルで選択されているビルに対応するシートにジャンプする。 (γ) 2020/07/03(金) 08:19 ---- Sub Sample() 'ここから End Sub 'ここまで これが、「一連の流れ」です。 きっと「プロシージャ」「モジュール」というような用語を使っても頭が混乱してしまいますよね。 まずこんなところから試してください。 Sub Sample01() Application.Goto Worksheets("SheetA").Range("B2"), True 'シートAのB2セルへ飛ぶ Application.Goto Worksheets("SheetB").Range("B2"), True 'シートBのB2セルへ飛ぶ Application.Goto Worksheets("SheetC").Range("B2"), True 'シートCのB2セルへ飛ぶ End Sub これは、 「SheetAのB2に飛ぶ」 「SheetBのB2に飛ぶ」 「SheetCのB2に飛ぶ」 を一気に実行します。 結果として、最後に実行した「SheetCのB2に飛ぶ」をしたように見えます。 「SheetAのB2に飛ぶ」と「SheetBのB2に飛ぶ」は実行した意味がなくなっています。 Sub SampleA() Application.Goto Worksheets("SheetA").Range("B2"), True 'シートAのB2セルへ飛ぶ End Sub これは「SheetAのB2に飛ぶ」を実行します。 Sub SampleB() Application.Goto Worksheets("SheetB").Range("B2"), True 'シートBのB2セルへ飛ぶ End Sub これは「SheetBのB2に飛ぶ」を実行します。 Sub SampleC() Application.Goto Worksheets("SheetC").Range("B2"), True 'シートCのB2セルへ飛ぶ End Sub これは「SheetCのB2に飛ぶ」を実行します。 一連の流れにしないことで、個々の命令が有効に働きます。 (参考) 【ゼロからわかるVBA入門】モジュールとプロシージャ https://tech-paclab.com/module-procedur/ (FunctionだのPropertyだのFormだのClassだの書かれている部分は読み飛ばしてください。) (子つばめ) 2020/07/03(金) 09:14 ---- γさんからコメントを頂いていますが、私はこういう感じかなとおもってました。 プログラム1 もしも、シート3のB2〜B2000で値の更新があったら シート1のB2セルの入力規則のリストを設定しなおす もしもの話はおしまい プログラム2 もしも、シート1のB2セルの値が更新されたら 対応するシートをアクティブにする もしもの話はおしまい 命令する用語が分からない場合は、↑のようにやるべき処理の流れをとりあえず日本語で書いてみて、それから、マクロの記録等で命令するには何と書けばよいかを調べてみるというアプローチも有効だとおもいます。 (もこな2 ) 2020/07/03(金) 09:55 ---- >もこな2 >γさま >子つばめさま ありがとうございます。 プログラム内容を整理します。 プログラム1 シート 1 でシート 3のB2列以降に記載されているビル名を選択し、 検索ボタンを押して、シート〇【ビル名】へ飛ぶ プログラム2 シート 2で入力した新ビル名データをシート3に記入していく。 同時に、新しくシート【ビル名】を作成する。 シート1で新たに追加されたビル名を検索できるようにプログラムを書き換える ということで考えていきます。 (ピエトロ) 2020/07/05(日) 10:40 ---- プログラム1 Private Sub ComboBox1_Click() s = Worksheets("シート3").Range("B3:B2000") Application.Goto Worksheets(s).Range("C3"), True End Sub プログラム2 Sub 新規入力() Dim i For i = 3 To Sheets("シート3").Range("B100000").End(xlUp).Row + 1 If Sheets("シート3").Range("B" & i).Value = "" Then Sheets("シート3").Range("B" & i).Value = Sheets("シート2").Range("C2").Value Exit For End If Next Dim Bmax Bmax = Worksheets("シート3").Range("B65536").End(xlUp).Row Dim a, b Dim data For a = 3 To Bmax If data <> Worksheets("シート3").Range("B" & a).Value Then data = Worksheets("シート3").Range("B" & a).Value Worksheets("シート2").Copy After:=Worksheets("シート3") ActiveSheet.Name = data b = 2 End If Next End Sub (ピエトロ) 2020/07/05(日) 17:21 ---- ■8 2020/07/05(日) 17:21 に提示されたコードについて、自己検証してみましたか? どのモジュールに記述しているか知りませんが「ComboBox1_Click」で正しいのですか? ■9 「■8」とも関連しますが、自己検証したなら↓は2次元配列が格納されるから、 s = Worksheets("シート3").Range("B3:B2000") ↓で型が一致しないというエラーになりませんでしたか? Application.Goto Worksheets(s).Range("C3"), True ■10 インデントがついておらず、見づらかったので整理してみるとこんな感じですかね。 Sub 新規入力() Dim i As Long Dim 最終行 As Long With Sheets("シート3") 最終行 = .Range("B65536").End(xlUp).Row For i = 3 To 最終行 + 1 If .Range("B" & i).Value = "" Then Sheets("シート3").Range("B" & i).Value = Sheets("シート2").Range("C2").Value Exit For End If Next For i = 3 To 最終行 If .Range("B" & i).Value <> "" Then Worksheets("シート2").Copy After:=Worksheets("シート3") ActiveSheet.Name = .Range("B" & i).Value End If Next End With End Sub 構文的な問題はないかもしれませんが、そもそも論でループ処理は本当に必要なのかちょっと疑問です。 また、今まで聞いていたことと全く違うことを始めましたけど、入力規則とかはどうでもよくなったのでしょうか? (もこな2 ) 2020/07/05(日) 18:43 ---- >もこな2さま ご回答ありがとうございます。 入力規制のやり方をネットで調べておりまして、 再度、プログラムを組み直しました。 プログラム1 Sub validation_ComboBox1_Click() '今設定されている入力規則を削除しておく Sheets("シート1").Range("C2").Validation.Delete '入力規則を設定 Sheets("シート1").Range("C2").Validation.Add Type:=xlValidateList, Formula1:="=シート3!$B$3:$B$2000" End Sub プログラム2 順次、新しいデータが入力され、シートが続々と作成されていきますので、 ループ処理が必要かと考えておりました。 ループ処理を行わず、新規入力毎に、シートを追加していく方法はありますでしょうか。 (ピエトロ) 2020/07/07(火) 11:57 ---- ■11 相変わらずインデントがついてないので見づらいですが、プログラム1を整理するとこうですね。 Sub プログラム1を整理() With Sheets("シート1").Range("C2").Validation .Delete .Add Type:=xlValidateList, Formula1:="=シート3!$B$3:$B$2000" End With End Sub で、何をやっているかご自身で理解はできているのでしょうか? 構文的な誤りは無いようにおもいますが、提示された内容どおりであれば一度やれば十分でしょうし、わざわざマクロでやる必要性も感じないです。 ■12 プログラム2について、繰り返しになりますが、やるべき処理の流れをとりあえず日本語で書いてみて組み立ててから、エクセル君に命令する文章に書きなおすというアプローチも有効だとおもいます。 https://vbae.odyssey-com.co.jp/column/no7_1.html (もこな2 ) 2020/07/07(火) 13:17 ---- ざっと見て、やろうとしていることはこんなことではありませんか。 'プログラム1-1 'シート 1 でシート 3のB2列以降に記載されているビル名を選択し、 Sub シート1でシート3のB2以降に記載されているビル名を選択できるようにする() '今設定されている入力規則を削除しておく Sheets("シート1").Range("C2").Validation.Delete '入力規則を設定 Sheets("シート1").Range("C2").Validation.Add Type:=xlValidateList, Formula1:="=シート3!$B$3:$B$2000" End Sub 'プログラム1-2 '検索ボタンを押して、シート〇【ビル名】へ飛ぶ Sub 検索ボタンを押す() '※sの値が設定されていないのでエラーになります 'ワークシート「s」のC3セルへ飛ぶ Application.Goto Worksheets(s).Range("C3"), True End Sub 'プログラム2 'シート2で入力した新ビル名データをシート3に記入していく。 '同時に新しくシート【ビル名】を作成する。 'シート1で新たに追加されたビル名を検索できるようにプログラムを書き換える Sub シート2で入力した新ビル名データをシート3に記入しビル名シートを作成、シート1で新たに追加されたビル名を検索できるようにプログラムを書き換える() 'シート2で入力した新ビル名データをシート3に記入 Dim i For i = 3 To Sheets("シート3").Range("B100000").End(xlUp).Row + 1 If Sheets("シート3").Range("B" & i).Value = "" Then Sheets("シート3").Range("B" & i).Value = Sheets("シート2").Range("C2").Value Exit For End If Next '新たにビル名シートを作成 Dim Bmax Bmax = Worksheets("シート3").Range("B65536").End(xlUp).Row '変数Bmaxにシート3のB65536セルから直上のデータが入力されているセルの行を代入 Dim a, b Dim data For a = 3 To Bmax '3行目からBmax行まで繰り返す If data <> Worksheets("シート3").Range("B" & a).Value Then '変数dataの値がシート3B列a行の値と異なる場合 data = Worksheets("シート3").Range("B" & a).Value '変数dataにシート3B列a行の値を代入 Worksheets("シート2").Copy After:=Worksheets("シート3") 'シート2をコピーしてシート3の次に挿入 ActiveSheet.Name = data 'アクティブシートの名前を変数dataの値にする b = 2 '変数bに2を代入(これは何のための値ですか?) End If Next '新たに追加されたビル名を検索できるようする Call シート1でシート3のB2列以降に記載されているビル名を選択できるようにする End Sub ※上記は内容の良し悪しについては検討せず列挙しています >順次、新しいデータが入力され、シートが続々と作成されていきます きっとシート2に入力1回ごとに作成されるシートも1つだと思いますのでループ処理はいらないと思います。 もし複数のシートを作成する場合でも、まず1つ作ることから始めた方が良いと思います。 最後の行を探すのならEnd(xlUp)が使えているのでそれで十分ではないでしょうか。 また、入力規則の数式も「=シート3!$B$3:$B$2000」で固定なら、プログラム2の最後で毎回入力規則を変更する意味はないと思います。 「新たにビル名シートを作成」については、変数dataの値に着目してステップ実行してみてください。 ループするごとに変数dataにはB列の一つ上の行の値が代入され、一つ下の行の値と比べていることがわかりますか。 そしてそのたびに新しいシートを追加するため、 マクロを一度実行するごとにB列の値の分だけ大量のシートが生まれるコードになってしまっています。 まずこのあたりを直してみてください。 (しょくぱん) 2020/07/07(火) 14:27 ---- >もこな2さま ご回答ありがとうございます。 ■11 >構文的な誤りは無いようにおもいますが、提示された内容どおりであれば一度やれば十分でしょうし、わざわざマクロでやる必要性も感じないです。 新規入力にて、次次に更新されていきますので、 マクロで管理しなければと考えておりました。 マクロでやる必要がないとは、どのように考えられておられますか。 ■12 構文については、 >2020/07/05(日) 10:40 に記載して、進めておりました。 >しょくぱんさま ご回答ありがとうございます。 >ループするごとに変数dataにはB列の一つ上の行の値が代入され、一つ下の行の値と比べていることがわかりますか。 すいません。数値の追い方がわかっておらず、チェク方法がわからずにおります。 教えて頂けないでしょうか。 (ピエトロ) 2020/07/10(金) 14:33 ---- 都合がいいとこだけ拾われても困るけど・・・ >新規入力にて、次次に更新されていきますので、 >マクロで管理しなければと考えておりました。 >マクロでやる必要がないとは、どのように考えられておられますか。 ぷろぐらむ1 「シート1」シートの「C2」セルの入力規則を クリアして リストの範囲をシート3!$B$3:$B$2000 に設定する ↑を何度も実行することと、↓を1回やることは同じじゃありません? 手作業で「シート1」シートの「C2」セルの入力規則の設定画面で リストを選んで、範囲をシート3!$B$3:$B$2000 にする 何度言ったか覚えてませんが、コードで悩むより必要な作業を洗い出して整理してから、マクロ化を考えてみてはどうですか? (もこな2 ) 2020/07/10(金) 16:54 ---- >すいません。数値の追い方がわかっておらず、チェク方法がわからずにおります。 >教えて頂けないでしょうか。 マクロのエディタ(VBE)の画面で、メニューから「表示」→「ローカルウィンドウ」を開いてください。 参考サイト https://excel-ubara.com/excelvba4/EXCEL266.html (しょくぱん) 2020/07/15(水) 08:28 ...
http://www.excel.studio-kazu.jp/wiki/kazuwiki/202006/20200623003453.txt - [detail] - similar
PREV NEXT
Powered by Hyper Estraier 1.4.13, with 97029 documents and 608000 words.

訪問者:カウンタValid HTML 4.01 Transitional