[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『マクロを実行し、条件に一致した別sheetのセルにジャンプしたい』(ねこ)
お世話になります、どうしてもわからなかったので質問させてください。 Excel2007です
・sheet1のA1には数字を入力できるようにしてあります ・sheet1のA3あたりにフォームコントロールのボタンを置きます ・sheet2以降に会員番号とその他データを登録してあります。 (例:sheet2のA1に会員番号 その下に会員情報。sheet2のA10に別の会員番号・・・ 20人分超えると、sheet3、sheet4と増える)
・sheet1のA1に数字を入力します(例:会員番号) ・ボタンをクリックすると、その会員番号と同じ番号のsheetのセルにジャンプ
以上のことを実行したいのですが、ご教授いただけますでしょうか?
Sheet2以降の構成というかレイアウトが、なんとなく扱いにくいような気もするけど、それは、当方がどうこういうことじゃないので。
たとえば会員番号が、必ず1から始まる連番なんかであれば、Sheet1のA1の値から、それが存在するシートをわりだして そこを表示するなんてこともできるけそ、そうじゃないんだろうから。
で、たとえばSHeet2のA2〜A9が会員情報なんだろうけど、そのなかに「たまたま」会員番号と同じものがあるのか、ないのかにもよるんだけど。 ・ないばあい Sheet2以降のA列を片っ端からMatchあたりで検索して存在すればそこ。どのシートにもなければエラー。 ・会員番号と同じものがある場合は、Matchは使えないので(きわめて使いにくいので)Stepを9にしたFor/Nextかな。
追記)Sheet2以降だけど、最初はA1、次がA10。その次は? 9行ずつならA19だけど、そうなの?A20なんてことはないんだろうね。
(ぶらっと)
うえでいった2つのケースそれぞれの処理案。(ただし、2つめのケース、A10の次はA19)
Sub Sample1() Dim sh As Worksheet Dim sh1 As Worksheet Dim flag As Boolean Dim d As Variant
Set sh1 = Sheets("Sheet1") d = sh1.Range("A1").Value If Len(d) = 0 Then MsgBox "会員番号が指定されていません" Else For Each sh In Worksheets If Not sh Is sh1 Then If IsNumeric(Application.Match(d, sh.Columns("A"), 0)) Then flag = True Exit For End If End If Next If flag Then sh.Select Else MsgBox "会員番号" & d & "が見あたりません" End If End If
Set sh1 = Nothing
End Sub
Sub Sample2() Dim sh As Worksheet Dim sh1 As Worksheet Dim flag As Boolean Dim d As Variant Dim i As Long
Set sh1 = Sheets("Sheet1") d = sh1.Range("A1").Value If Len(d) = 0 Then MsgBox "会員番号が指定されていません" Else For Each sh In Worksheets If Not sh Is sh1 Then For i = 1 To sh.Range("A" & sh.Rows.Count).End(xlUp).Row Step 9 If sh.Cells(i, 1).Value = d Then flag = True Exit For End If Next If flag Then Exit For End If Next If flag Then sh.Select Else MsgBox "会員番号" & d & "が見あたりません" End If End If
Set sh1 = Nothing
End Sub
(ぶらっと)
ご教授、ありがとうございます。 いずれの場合でも実行できることを確認しました! 会員情報の中には会員番号と一致するものはないので、1つ目のほうを使わせていただきます (別の人が作成した会員情報をそのまま利用しようとしており、会員番号が9行ごとに固定されているか怪しいところもありますので・・・)。
ちなみに、一致した会員番号のあるsheetを開くだけでなく、一致するセルにまでジャンプするということは制限としてできないんでしょうか?
質問ばかりで申し訳ありません。
(ねこ)
じゃぁSample1をベースに
Sub Sample3() Dim sh As Worksheet Dim sh1 As Worksheet Dim flag As Boolean Dim d As Variant Dim n As Variant
Set sh1 = Sheets("Sheet1") d = sh1.Range("A1").Value If Len(d) = 0 Then MsgBox "会員番号が指定されていません" Else For Each sh In Worksheets If Not sh Is sh1 Then n = Application.Match(d, sh.Columns("A"), 0) If IsNumeric(n) Then flag = True Exit For End If End If Next If flag Then Application.Goto sh.Cells(n, "A"), True Else MsgBox "会員番号" & d & "が見あたりません" End If End If
Set sh1 = Nothing
End Sub
(ぶらっと)
ぶらっとさま、ありがとうございます! 思っていた通りの処理ができるようになりました。
(ねこ)
横から失礼します。
sheet2の複数列(例えばA列とF列とK列)にここでいう会員番号が登録してある場合には 実現不可能でしょうか
似たような質問があり喜んだのですが検索範囲が1列でないため困っています(はいちゅう)
別トピをたてたほうがいいかと思うけど。
Sub Sample4() Dim sh As Worksheet Dim sh1 As Worksheet Dim flag As Boolean Dim d As Variant Dim n As Variant Dim col As Variant
Set sh1 = Sheets("Sheet1") d = sh1.Range("A1").Value If Len(d) = 0 Then MsgBox "会員番号が指定されていません" Else For Each sh In Worksheets If Not sh Is sh1 Then For Each col In Array("A", "F", "K") n = Application.Match(d, sh.Columns(col), 0) If IsNumeric(n) Then flag = True Exit For End If Next If flag Then Exit For End If Next If flag Then Application.Goto sh.Cells(n, col), True Else MsgBox "会員番号" & d & "が見あたりません" End If End If
Set sh1 = Nothing
End Sub
(ぶらっと)
質問ばかりですみません…
会員情報の入ったExcelと検索をかけるExcelを別にするよう指示されました。 別ブックの参照&ジャンプは出来るのでしょうか? またこの場合、別ブック(会員情報の入ったブック)は常に開いておく必要はありますか?
(ねこ)
>会員情報の入ったExcelと検索をかけるExcelを別にするよう指示されました。
これは、適切かつ、正しい指示だね。
>別ブックの参照&ジャンプは出来るのでしょうか?
参照は、もちろんできるし、ジャンプも Application.Goto ブックオブジェクト.シートオブジェクト.セルオブジェクト, True というコードでOKだよ。
>別ブック(会員情報の入ったブック)は常に開いておく必要はありますか?
「常に」というのが、ちょっとあいまいだけど、少なくとも検索を実行してジャンプする時には開いておかなきゃね。
(ぶらっっと)
ありがとうございます。できるのですね! 別ブックの参照の指示の仕方がわからないので、教えていただけると幸いです。 (初心者で申し訳ありません・・・)
ちなみに、別ブックを参照するときには、そのブックは同じディレクトリ内にある、 あるいはいつも同じ場所に保管されている状態でないと指定できないですよね?
というのも、CDかUSBキーに保管し、複数の人間が別拠点で触れることが目的です (ネットワークでの共有は今のところできない予定です)。
それでは以下。Sample3をベースに変更ポイントがわかりやすいように、削除したコードもコメントとして残してある。 会員番号指定はマクロブック側のSheet1のA1に入力して実行。 かつ、マクロ実行時には当該データブックが「別途」呼び出されているという前提。 もし、マクロで、必要なものを呼び出す部分も実行させたいなら、それはそれで可能。
>別ブックを参照するときには、そのブックは同じディレクトリ内にある、 >あるいはいつも同じ場所に保管されている状態でないと指定できないですよね?
マクロブックと同じフォルダにあればコードがシンプル。でも、別フォルダにあってもきまったフォルダなら これも、どうってことない。 フォルダが可変(場合によってはデータブックも可変)ということなら、ファイルを選択するダイアログを表示して そこで操作者に選ばせることも可能。
Sub Sample3A() Dim wb As Workbook '★追加 Dim sh As Worksheet 'Dim sh1 As Worksheet '★削除 Dim flag As Boolean Dim d As Variant Dim n As Variant
Set wb = Workbooks("別ブック.xls") '★追加 'Set sh1 = Sheets("Sheet1") '★削除 d = ThisWorkbook.Sheets("Sheet1").Range("A1").Value '★変更 If Len(d) = 0 Then MsgBox "会員番号が指定されていません" Else For Each sh In wb.Worksheets '★変更 'If Not sh Is sh1 Then '★削除 n = Application.Match(d, sh.Columns("A"), 0) If IsNumeric(n) Then flag = True Exit For End If 'End If '★削除 Next If flag Then Application.Goto sh.Cells(n, "A"), True Else MsgBox "会員番号" & d & "が見あたりません" End If End If
Set wb = Nothing '★追加 'Set sh1 = Nothing '★削除
End Sub
(ぶらっと)
Sample3Aをベースに別ブックをマクロから開くコードを2つ。 Sample3B 当該データブックを直接開いて処理。 Sample3C ダイアログからデータブックを指定して開いて処理。
Sub Sample3B() Dim wb As Workbook Dim sh As Worksheet Dim flag As Boolean Dim d As Variant Dim n As Variant
Set wb = Workbooks.Open("c:\フォルダ名\サブフォルダ名\別ブック.xlsx") 'マクロブックと同じフォルダなら 'Set wb = Workbooks.Open(ThisWorkbook.Path & "\別ブック.xlsx")
d = ThisWorkbook.Sheets("Sheet1").Range("A1").Value If Len(d) = 0 Then MsgBox "会員番号が指定されていません" Else For Each sh In wb.Worksheets n = Application.Match(d, sh.Columns("A"), 0) If IsNumeric(n) Then flag = True Exit For End If Next If flag Then Application.Goto sh.Cells(n, "A"), True Else MsgBox "会員番号" & d & "が見あたりません" End If End If
Set wb = Nothing
End Sub
Sub Sample3C() Dim wb As Workbook Dim sh As Worksheet Dim flag As Boolean Dim d As Variant Dim n As Variant Dim fName As String
d = ThisWorkbook.Sheets("Sheet1").Range("A1").Value If Len(d) = 0 Then MsgBox "会員番号が指定されていません" Else fName = Application.GetOpenFilename("会員情報ブック,*.xlsx", , "会員情報ブックを選んでください") If fName <> "Flase" Then Set wb = Workbooks.Open(fName)
For Each sh In wb.Worksheets n = Application.Match(d, sh.Columns("A"), 0) If IsNumeric(n) Then flag = True Exit For End If Next If flag Then Application.Goto sh.Cells(n, "A"), True Else MsgBox "会員番号" & d & "が見あたりません" End If End If End If
Set wb = Nothing
End Sub
(ぶらっと)
ぶらっとさま ありがとうございます。 Sample3Bを使わせていただき、うまくいきました!
マクロブックと会員情報のブックは、常に同じフォルダ内には保存するので、 Set wb = Workbooks.Open(ThisWorkbook.Path & "\別ブック.xlsx")で うまく実現できそうです。
本当にありがとうございました。
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.