• ベストアンサー

VBA ブック内文字列検索

はじめまして 当方、初心者で勉強の身です。ご回答頂けたら幸いです。 文字列"AAA"で、ブック内の全シートに検索を行い ヒットしたシート名を変数配列BBB(15)に順次格納していく コーディングを考えていますが、実装方法がわかりません。 不明点 ・ブック内検索方法 ・ヒットしたシート名を配列に格納する 大変恐縮ですがコーディング等を明記して頂ける助かります。 よろしくお願い致します。

  • c_gen
  • お礼率79% (19/24)

質問者が選んだベストアンサー

  • ベストアンサー
  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.1

一例まで。 Sub try() Dim ws As Worksheet Dim i As Integer, j As Integer Dim BBB() As Variant i = 0 For Each ws In Worksheets If Application.CountIf(ws.Cells, "AAA") > 0 Then i = i + 1 ReDim Preserve BBB(1 To i) BBB(i) = ws.Name End If Next For j = 1 To i Debug.Print BBB(j) Next End Sub

c_gen
質問者

お礼

n-jun様、merlionXX様 どちらも完璧な回答でした。とても助かりました。 誠にありがとうございました。 >merlionXX様 評価の方ですがレスが早い順に付けさせて頂きました。 申し訳ありません。

c_gen
質問者

補足

回答有難うございます。 実装してましたところ、動作を確認できました。 追加の仕様なのですが 今は完全一致のセル「AAA」のみのヒットですが セル「CCCのAAAはBBBだ」もヒットするようにするにはどうすればよいでしょうか。 大変申し訳ありませんが、ご教授願いたく思います。

その他の回答 (3)

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.4

No2 merlionXXです。 部分一致検索にするなら LookAt:=xlWhole を LookAt:=xlPart に変えてみてください。

c_gen
質問者

お礼

動作を確認できました。 有難うございました。

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.3

#1です。 >If Application.CountIf(ws.Cells, "AAA") > 0 Then If Application.CountIf(ws.Cells, "*AAA*") > 0 Then としてみて下さい。

c_gen
質問者

お礼

動作を確認できました。 有難うございました。

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.2

一例です。 Sub test01() Dim st As Worksheet Dim c As Range Dim myStr As String Dim BBB For Each st In Worksheets Set c = st.Cells.Find(What:="AAA", LookAt:=xlWhole) '各Sheetを完全一致検索 If Not c Is Nothing Then 'あったら myStr = IIf(myStr = "", st.Name, myStr & "/" & st.Name) '/で区切り一旦文字列変数に End If Next BBB = Split(myStr, "/") '/で分けて配列に MsgBox Join(BBB, "、") & "を配列に取り込みました。" End Sub

c_gen
質問者

お礼

n-jun様、merlionXX様 どちらも完璧な回答でした。とても助かりました。 誠にありがとうございました。 >merlionXX様 評価の方ですがレスが早い順に付けさせて頂きました。 申し訳ありません。

c_gen
質問者

補足

回答有難うございます。 実装してましたところ、動作を確認できました。 追加の仕様なのですが 今は完全一致のセル「AAA」のみのヒットですが セル「CCCのAAAはBBBだ」もヒットするようにするにはどうすればよいでしょうか。 大変申し訳ありませんが、ご教授願いたく思います。

関連するQ&A

  • VBAでワイルドカードを使った文字列検索

    初めて投稿いたします。 環境は、WinXP Access2000 下記のVBAモジュールで、文字列検索がヒットしません。 数字の比較でヒットするのはナゼでしょうか? ちなみに、変数に導入したのは、全角半角どちらも入れてみました。 この疑問・・・どなたか解決お願いします。 Sub TEST() Dim AAA As String Dim BBB As String Dim YYY As String AAA = "0" BBB = "2" YYY = AAA & BBB Select Case YYY Case "0*" MsgBox "ココを通り過ぎないで!" Case "15" MsgBox "やったね" Case Is > 0 MsgBox "なぜかココでヒットします??" End Select End Sub

  • EXCELで別のブックから式をコピーしたときにブック名がついてきてしまうのですが

    EXCEL2003を使用しています。 ブックAAAのシートBBBからSUM(A10:B20)というような式をコピーしたのですが、参照先が SUM([AAA.xls]BBB'!A10:B20) と、いうような形になり、ブック名とシート名が入ってきてしまいます。 ブック名とシート名はつけずにそのままSUM(A10:B20)の形でコピーしたいのですが、何か方法はありますでしょうか。

  • 文字列を検索しその列をコピーする(VBA)

    よろしくお願いします。 OS:WINDOWS 2000 PRO 環境:OFFICE 2003 エクセルのVBAについての質問です。 A列には数値コードが入っています。 そのコードは"1"と"2"に分類されてます。 マスターはSHEET1で、このマスターから コード1はSHEET2に、 コード2はSHEET3に 振り分けたいのですが、どうもうまくいきません・・・ A列にはコード"1" "2"以外に空白セルが存在します。 空白セルは無視したい。。。 それとこのデータはDBから抽出するのですが、 抽出したデータは規則性はありません。 抽出するごとに"1"と"2"と"空白"はランダムなので、 LOOP等のマクロを調べてやってみたのですが、出来なくて週末になってしまいました。 A列からコード1とコード2を検索して、 ヒットしたコードの行ごと各SHEETにコピーして、 なおかつ各シートA列の入力されていない一番下の セルにコピーしたいのですが、検索でヒットした 上から順番に。。。 これをLOOPと組合わせれば、各シートにコピーするのは 問題ないような気がします。。。 Sub AAA_BBB() .Copy Worksheets("Sheet2").Range("A65536").End(xlUp).Offset(1, 0) End With End Sub LOOP等で上記の条件を満たせる方法はないでしょうか。 ご教示を、よろしくお願いします。

  • 文字列を配列定義に使用するには

    文字列を配列の定義に使用したいのですが、可能でしょうか? 具体的には以下のような内容です。  $AAA = array("name"=>"山田","val"=>"10"); とすると変数$AAAは配列になります。  $BBB = 'array("name"=>"佐藤","val"=>"20")'; とすると変数$BBBは文字列になります。  $CCC = $BBB; と変数$CCCに代入した場合に、 変数$CCCを配列として認識させたいです。 つまり  print $CCC[name]; //佐藤  print $CCC[val]; //20 というように出力させたいのですが、 根本的に可能なのでしょうか…? よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • 複数の文字列検索について

    VBというよりも、accessで利用したいのでVBAになるかと思いますが、 ある項目について文字列検索をしたいのですが、 001:"aaa" 002:"bbb" 003:"ccc" ・ ・ 100:"zzz" ※SELECT hoge FROM geho WHERE あああ Like "*%%%*"     ***%%%の値を個数分かえたい*** といったように複数パターンあり、クエリの条件節に記述できない状態です。 フォームを作成し、リストボックスに値を格納するところまではできたんですが、 その値を取得して、変数に格納することができません。 ヘルプではItemsSelectedを利用すればいけそうな感じでしたが、 使用例をはりつけて試してみてもエラーになります。 access97なので使えないメソッドだったりするんでしょうか? 何かよい知恵ももってらっしゃる方いらっしゃったらご教授願います。

  • perlのマクロ演算子?について

    AAA変数にBBB配列名を代入し,AAA変数に配列を入れてBBB配列を使いたいのですが....どのようにするのでしょうか? 例 $count = 1 $AAA = "@BBB_no".$count; ※$AAA = ("ア","イ","ウ","エ"); ↑ここの※の部分に何か加えるのでしょうか?

  • 文字列を改行で区切り配列に格納したい

    データをプログラムに明記し、プログラムで いろいろ加工したり処理をしたい場合ですが、 例えば、 Dim hairetu(10) As String hairetu(0) = "aaa" hairetu(1) = "bbb" hairetu(2) = "ccc" 途中省略 hairetu(10) = "zzz" これをイメージとして以下のように行う方法はありますでしょうか あくまでもイメージとしてです。 Dim mojiretu As String Dim hairetu(10) As String mojiretu="aaa\nbbb\nccc\n途中省略zzz" ← hairetu=mojiretuを”\n”で区切り順次配列に格納する ←は、mojiretu="aaa bbb ccc 省略 zzz"  のようなイメージです。 よろしくお願いします

  • エクセル2007 VBA シート内のデータを項目名で検索し、その列を新

    エクセル2007 VBA シート内のデータを項目名で検索し、その列を新規シートにコピーする方法についてです。 VBAについては初心者で、グーグルで調べながら作ったのですが、コピー後のペーストが上手く出来ません。どうすれば最後まで処理できるのかを教えて下さい。 それと、全体的に書き方がおかしいところがありましたら指摘・改善方法を教えて下さい。 よろしくお願いします。 Sub 配列並べ替え() Dim myArray As Variant '1項目名希望順配列格納 Dim strArray As Variant '2検索用1の配列格納 Dim LastCol1 As Long '3最終列数格納 Dim LastCol2 As Long '4新規シートの最終列数格納 Dim DefSheetname As Variant '5初期のシート名取得 Dim i As Long Dim j As Long '初期シート名を取得。 DefSheetname = ActiveSheet.Name '初期シートの最終列数取得。 LastCol1 = Worksheets(DefSheetname).Range("A1").End(xlToRight).Column 'シート名:レポートの新規シート追加。 Worksheets.Add.Name = "レポート" '初期シートを選択。 Worksheets(DefSheetname).Select '項目名希望順配列格納。 myArray = Array("得意先C", "取引先名1", "製番", "相手管理NO", "品目C", _ "製品名1", "受注数", "受注残数", "納期", "受注単価", _ "受注金額", "出荷数", "出荷金額", "出荷先名1", "郵便番号", "住所1", "TEL", "FAX") '配列要素数分繰り返し処理。 For i = LBound(myArray) To UBound(myArray) '検索用の配列(項目名)格納。 strArray = myArray(i) 'A1:LastCol1範囲で配列(項目名)検索し、番号で返す。 j = WorksheetFunction.Match(strArray, Worksheets(DefSheetname).Range(Cells(1, 1), Cells(1, LastCol1)), 0) 'シート名:レポートに変数jの列数目の値を入力。 Columns(j).Copy 'シート名:レポートの最終列数取得。 LastCol2 = Worksheets("レポート").Range("A1").End(xlToRight).Column 'シート名:レポートを選択。 Worksheets("レポート").Select Range(Cells(1, 1), Cells(1, "LastCol2")).Past Next i End Sub

  • VBA:複数のブックから複数のブックへの転記

    はじめまして、いつもこのサイトにはお世話になっております。 私は現在、ExcelVBAを使って複数のブックの情報を読み取り、 その読み取った情報を複数のブックへ反映させるマクロを作成中です。 ですがエクセルマクロもとい、プログラミング初心者なため、 どのように想定している機能を実装すればよいのかわからず、試行錯誤中です。 みなさまの、ご教授を頂ければと思います。 実装したい機能の内、不明点は以下の三つです。 1.フォームから読み取ったYYYYMMの情報に基づいて、 20XX年度      1月     2月     ・・・ 20XX年度     1月     ・・・ という並びのフォルダに移動する方法。 (YYYYMMを一つの変数として定義しているので、YYYYとMMの二つに分け、 YYYYを読み取る→フォルダ移動→MMを読み取る→フォルダ移動というロジックを考えているのですが、どういうふうに実装できるのかわかりません。Case文を使えば、ゴリ押しはできそうですが、、、) 2.以下のブック内のデータをKey値を基に存在チェックをし、 Key値があれば、Key値の右にあるDataをKey値に紐付け、 一意の値として取得する。(変数へ代入する。) その後、Key2の値を調べに行き、上記を繰り返すロジック。 Key1 Data1.1 Data1.2 Data1.3 Key2 Data2.1 Data2.2 Data2.3 ・・・ 3. 統計用のブックとして、上記2でしらべたKey値の名前を統計用ブックのシート名として投入し、 Key値に紐づいた全てのデータを投入していくロジック。 (同じKey値を持ったDataを一つのシートにまとめ、それが、Key値の数だけるというイメージです。) 色々な手段を考えてはいるのですが、 是非、皆様のお知恵をお借りしたいと考えております。 以上、長文乱文失礼いたしましたが、 どうぞよろしくお願い致します。

  • エクセルVBAでの文字列抽出

    エクセルVBAで文字列を検索して、検索した文字列を他のセルへ出力する方法がわかる方法を探しております。状況を図で説明すると、 A1セル:aaa\bbb\item1\ddd A2セル:aaa\bbb\ccc\item2\ddd A3セル:aaa\bbb\ccc\ddd\item3\eee このような状態からitemを検索して、B1セルに B1セル:item1 B2セル:item2 B3セル:item3 と表示させたいです。エクセルVBA初心者な者でRegExpを使うのかな、というところまではたどり着きましたが、そこから先にすすめません。 何か良い方法をご存知の方、教えていただきたいです。よろしくお願いいたします。

専門家に質問してみよう