• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBA 検索)

VBA検索方法について質問

denbeeの回答

  • denbee
  • ベストアンサー率28% (192/671)
回答No.1

ある列の1つ1つのセルに上記の範囲情報が載っているということですか? 自分だったら以下のようにします。  1)セルの範囲情報を文字列として取得する(例:270,000~290,000)  2)「~」をキーに文字列を分割し、「~」の前の情報(270,000)と後の情報(290,000)を   それぞれ変数に取得する  3)入力したデータが上記の前情報と後情報の範囲内にあるか判断する  4)これを、範囲情報が設定されているセル分繰り返す。    (3)で条件に一致するものがあれば検索処理は終了)

lostsymbol
質問者

補足

数字ごと一つのセル使ってます それだとコードがながくなってしまいますよね?

関連するQ&A

  • vba vlookupについて

    VBAで範囲検索をしたくて、 vlookuを使おうと思ったのですが 1000~2000 2001~3000 3001~4000 4001~5000 5001~6000 6001~7000 7001~8000 8001~9000 9001~10000 このような表から 1237 を検索しようとすると失敗してしまいました(・・;) wskyu.Range("D24") = Application.WorksheetFunction.VLookup(kihon, .Range("D:H"), 5, True) このコードでエラーは起きず、 kihonに1237が入っています 1000 2001 ↑がD列です H列は 309 359 406 569 630 680 700 703 904 こんな感じです 思い通りにいけば1237を検索するので当てはまるのは1列目で 309が表示される予定だったのですが 実際やってみると630が表示されました、、、 なぜなのでしょうか そもそもVLOOKUPでこのような検索方法はできないのでしょうか? 補足として 最初はSELECT CASEを使い 1000~2000の間にあれば 309を表示 という風にしていたので 表などが間違っているのではないようです しかしそれだとコードがとても長くなってしまうので VLOOKUPにしようと思いました どうかよろしくお願いします!!

  • VBA 曖昧一致CASE文のELSE

    以下の様な曖昧一致CASE文でElse判定がとれず困っています。 どの様にするべきでしょうか Select Case True Case str Like "*AAAA*" ' 処理1 Case str Like "*BBBB*" ' 処理2 Case Else ' Else処理 End Select この例で実行すると、全ての曖昧検索が一致しなくても 結果として処理2が走ってしまいます。

  • VBAで成績表を作りたい

    VBAについては全く初心者ですが、自分なりに調べて成績表を作ってみました。 A列個人の名前、B・C・D列にそれぞれ1~3回目のテストの総得点が入っていとして、E列に得点のランク別にA~Mの成績を出します。 Select Case を使って成績を出すようにしたいのですが、1~3回目のテストの中で、1番高得点だったもので判定したいのです。 また、全員が3回ともテストを受けているとは限らず、得点が空欄になる人もいます。 具体的には A列   B列    C列   D列   E列 ○さん  580点 620点 530点  C列の得点で判定 △さん  550点 580点 600点  D列の得点で判定 □さん  600点      590点  A列の得点で判定 1回分のテストの得点だけでは Select Case を使って上手く判定できたのですが、3回分の中から選択させる方法がわかりません。 関数を使う方法もあると思いますが、今回はVBAを使って作りたいと思います。 よろしくお願いします!

  • vbaのselect

    先輩の置き土産として作成されたマクロで、シート上の色を検索して、 色がついていたらA列に名前を入れえるというマクロがあって改修しようとしています。 そのコードの中で With Ws(Worksheet) Application.FindFormat.Interior.colorIndex = 3(黄色検索) .Cells(1, 1).Select: pos = "" とありますが.Select:ってなんでしょうか??? Selectだけならなんとなく意味はわかるのですが、コロンまでつけられ 変数pos で次処理でいろいろ判定を付けています。 お聞きしたい内容としてはとりあえずコロンが指す意味がわかればいいのですが・・・ すいませんが教えていただけないでしょうか?

  • VBA: Select Caseを短くしたい

    Excel2003 の VBA でクラスモジュールを作成しています。 Select Case文で Caseが多い場合にコードを短くするテクニックがありませんか。 Select Case i   Case 1     str = "momo"   Case 2     str = "sakura"       ・       ・       ・   Case 100     str = "tsubaki" End Select のようなコードです。 配列に入れることも考えましたが、 str(1) = "momo" str(2) = "sakura"      ・      ・      ・ str(100) = "tsubaki" となって、コードを短くする効果は僅かです。 クラスモジュールなので、ワークシートにデータを入れておくテクニックは使えません。 また、外部ファイル(*.txt など)も管理の面から使いたくありません。 クラスモジュール内だけで完結させるテクニックがないでしょうか。

  • VBA case判定で

    Excel2010 Win7使用 VBA独学中の初心者です。 下記のcase判定でTrueなのに、Trueと判定してもらえません。 解決策を教えて頂けると助かります。 また、もっとスマートな方法があれば、 併せて教えて頂けると助かります。 例) hの中に"早い"という文字列がある場合  Case InStr(h, "早い") > 0 において、InStr=1が入っている場合でも Trueと判定されず、次のcaseに移行してしまいます。 Sub chg2() Dim r As Long Dim c As Long Dim day As Long Dim dc As Long Dim h As String day = Right(Range("S5"), 2) Select Case day Case 28 dc = 30 Case 29 dc = 31 Case 30 dc = 32 Case 31 dc = 33 End Select For r = 53 To Range("A52").End(xlDown).Row Step 2 For c = 3 To dc h = Cells(r, c) Select Case h Case InStr(h, "早い") > 0   h = Replace(h, "早い", "a")   Case InStr(h, "遅い") > 0 h = Replace(h, "遅い", "b")   ・   ・   ・  End Select Next c Next r End Sub

  • 検索値と検索先のシートが別でもOKなVBAはありますか?

    「Excel2002」を使用して、内線番号表を 作ろうと思っています。 「表紙」sheetにあるコンボボックスで選んだ 値(各部署名)が、 「内線番号表」sheetの「E1」に入るとします。 (「LinkedCell:内線番号表!E1」) その「E1」を検索値として「内線番号表」内を 探すマクロを、フォームボタンに登録しました (以下。自分で書いたわけではないのですが)。 Sub 部署を表示() With Worksheets("内線番号表") Sheets("内線番号表").Select Cells.Find(What:=Range("E1"), After:=Cells(2, 1), LookIn:=xlFormulas, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, MatchByte:=False, SearchFormat:=True).Activate End With End Sub これはこれでうまくいったのですが、少し問題が 出てきてしまいました。 「内線番号表」sheetはデータを取り込んで、 列や行を大幅にいじる事が頻繁にあるので、 コンボボックスの「LinkedCell」として指定した 「内線番号表!E1」という アドレスが勝手に変更されてしまうのです。 (「$」をつけても駄目でした) そこで、コンボボックスの「LinkedCell」を、 いじる事がない「表紙」sheetの セルに変えたいと思うのですが… 「検索先のシートの中に検索値がなくても 検索出来る」方法はあるのでしょうか? つまり、「表紙」sheetのセルの値を元に、 「内線番号表」sheetを検索するVBAのコードが あれば、教えて頂きたいのですが…。 (これが出来れば、他にも応用したいと思うので) コントロールBOXやVBAは勉強し始めた ばかりなので、うまく説明出来たかどうか 分かりませんが…よろしくお願い致します。

  • VBAの構文は合っているのでしょうか?。

    VBAの構文は合っているのでしょうか?。 変数2つの中身を判定して、フォーム上のリストボックスの規定値を自動で移動させようと していますが、自動で移動してくれません。 お分かりになる方どなたかご教授下さい。 Select Case syuuki & hi_hantei Case 1 & 1 Let Forms!Print![lotmark] = "A" Case 1 & 2 Let Forms!Print![lotmark] = "B" Case 1 & 3 Let Forms!Print![lotmark] = "C" : : : Case 3 & 31 Let Forms!Print![lotmark] = "?" End Select

  • エクセルVBAで別ブックの条件検索

    VBA初心者です。エクセルは2007です。 『データのあるブック(Book1,Book2,Book3)』と、『検索条件シート+出力先シートをもつブック』の4つのブックがあります。 検索条件シートで、L22でブック、P22でシートを指定してN22に入力した数に対応するデータをVlookupで出力先シートのセルに抽出されるようにしたいのですが、※の部分で「エラー438 オブジェクトは、このプロパティまたはメソッドをサポートしていません」とでて実行できません。 データのあるブックは同じ形式でシートには表があります。 数 a b c d 1 A B C D 2 ○ × △ ■ 3 Z Y X W     ・     ・ 検索条件がL22=3,P22=2,N22=2だとすると、Book3の2枚目のシートを検索し、 出力先シートのD1=○,J6=×,L23=△,J69=■となるようにしたいです。 本やインターネットで調べましたがわかりませんでした。 解決方法を教えていただきたいです。お願いします。 Sub 検索() Dim a, b, c, d As Range Dim 番号, ブック, シート As Integer With Workbooks("検索.xlsm").Sheets("検索条件") 数 = .Range("N22").Value ブック = .Range("L22").Value シート = .Range("P22").Value End With Dim wb As Workbook Dim sh As Worksheet Dim set範囲 As Variant With Workbooks("検索条件.xlsm").Sheets("出力先") Set a = .Range("D1") Set b = .Range("J6") Set c = .Range("L23") Set d = .Range("J69") End With Select Case ブック Case 1 Set wb = Workbooks("Book1.xlsm") wb.Activate Select Case シート Case 1 Set sh = Worksheets(1) Case 2 Set sh = Worksheets(2) Case Else MsgBox "・・・・・", vbExclamation, "nothing" End Select Case 2 Set wb = Workbooks("Book2.xlsm") wb.Activate Select Case シート Case 1 Set sh = Worksheets(1) Case 2 Set sh = Worksheets(2) Case Else MsgBox "・・・・・", vbExclamation, "nothing" End Select Case 3 Set wb = Workbooks("Book3.xlsm") wb.Activate Select Case シート Case 1 Set sh = Worksheets(1) Case 2 Set sh = Worksheets(2) Case Else MsgBox "・・・・・", vbExclamation, "nothing" End Select Case Else MsgBox "nothing", vbExclamation, "nothing" End Select ※Set set範囲 = wb.sh.Range("A4:E42")  ←エラー438 a = Application.WorksheetFunction.VLookup(数, set範囲, 2, False) b = Application.WorksheetFunction.VLookup(数, set範囲, 3, False) c = Application.WorksheetFunction.VLookup(数, set範囲, 4, False) d = Application.WorksheetFunction.VLookup(数, set範囲, 5, False) End Sub

  • 下記エクセルVBAコード:改良 表

    下記エクセルVBAコードの中で Case "a" Case "b" Case "c" などの情報を処理していますが、その”a”、"b"、"c"の代わりに、$A$50~$A$52の表の中(ここにaとか入っている)のデータを用いて処理できるようにするには、どのようにコードを変更すべきでしょうか。よろしくお願いします。 Sub test01() d = Range("A65536").End(xlUp).Row j = 1 For i = 1 To d Select Case Cells(i, "a") Case "a" Case "b" Case "c" '---XXX Case Else Worksheets("Sheet2").Cells(j, "A") = Cells(i, "A") Worksheets("Sheet2").Cells(j, "B") = Cells(i, "b") 列や行やシートが変わっても、類推で変えられるでしょう。 '---YYY j = j + 1 End Select Next i End Sub