• ベストアンサー

Excel VBA 別シートのデータ取得後 検索

ブックAを開いています。 シートは「2013年1月」と「作業項目」の二つあり、 2013年1月にはカレンダーを作成しております。 また作業項目にはA1から順にA2,A3....と 文字列が記載されています。 この文字列をA1から順番にカレンダーの方で検索していき、該当すれば赤色に変更したいです。 (※セル内全ての文字列ではなく、該当文字列のみ赤色に変更) 宜しくお願い致します。

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

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

#1です。 セルにどのようなデータがあるのかがわかりませんが、 例えば作業項目のセルに 21:00 を入れていると 実際には 21:00:00 となってしまい >資料作成(21:00~) が検索で見つからない可能性があります。 よって >Set rf = ws2.Cells.Find(What:=r.Value, LookIn:=xlValues, LookAt:=xlPart) >myReg.Pattern = r.Value 上記2つを Set rf = ws2.Cells.Find(What:=r.Text, LookIn:=xlValues, LookAt:=xlPart) myReg.Pattern = r.Text と差し替えてみて下さい。

nimu_nimu
質問者

お礼

無事作成したい資料が出来ました。 丁寧な回答をして頂き、有難うございます。

その他の回答 (1)

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

シート名は実際の名前に修正してください。 Sub try() Dim myReg As Object Dim match As Variant Dim ws1 As Worksheet Dim ws2 As Worksheet Dim r As Range Dim rf As Range Dim sr As String Set myReg = CreateObject("VBScript.Regexp") myReg.Global = True Set ws1 = Worksheets("Sheet1") ' 作業項目シート Set ws2 = Worksheets("Sheet2") ' カレンダー? With ws1 For Each r In .Range(.[A1], .Cells(Rows.Count, 1).End(xlUp)) Set rf = ws2.Cells.Find(What:=r.Value, LookIn:=xlValues, LookAt:=xlPart) If Not rf Is Nothing Then myReg.Pattern = r.Value sr = rf.Address Do For Each match In myReg.Execute(rf.Value) rf.Characters(Start:=match.Firstindex + 1, Length:=match.Length).Font.ColorIndex = 3 ' フォントカラーを赤 Next Set rf = ws2.Cells.FindNext(rf) Loop Until rf.Address = sr End If Next End With Set myReg = Nothing Set rf = Nothing End Sub こんな感じでしょうか?

nimu_nimu
質問者

お礼

ご回答有難うございます。 先ほど試した結果、文字列の色変更が無事出来ました。 1点お伺いしたいのですが、記号(主に括弧やコロン)を含んだ文字列で同様の作業は出来るでしょうか? (例) 資料作成(21:00~) お答えしていただいたのにも関わらず、不躾な質問となり申し訳ございませんが 宜しければご教示願います。

関連するQ&A

  • エクセルVBAをつかってフォルダ内のファイルの特定シートのデータを1つのシートにまとめる

    はじめまして。 過去ログ検索しましたが、載っていないようなので投稿させていただきます。 ブックAがあるフォルダ内にある「○年*.xls」のさらに「○月(○月以外のシートもあり)」のシート内の特定のセル(範囲は固定されてます)の文字列を、全てブックAの1つのシートにまとめたいのですが、VBAにてこれは可能ですか? フォルダ内のファイルが複数だったり、またそのファイル内の該当シートが1つだったり複数だったりで、かなり行き詰ってます。 どなたかご存知の方いらっしゃいましたらご教授願います。 エクセル2000を使用しております。

  • 【エクセル】データ抽出する関数の使い方

    データを抽出するのに、今までVlookupなどを使っていました。 今回2つの項目(下記の表だと月と色)を指定して、抽出したいです。 Sheet1(元データ)   A  B  C   1 月  色 値段 2 01  赤 4532 3 02  赤 1495  4 01  白 10012 5 03  赤 7568 6 02  白 78964 7 01  緑 78932 8 02  緑 7894 9 上記のような表から、下記のような形にデータを抽出したいです。 Sheet2   A  B   C    D    E  1 色 1月値段 2月値段 3月値段 2 赤 4532  1495 7568 3 白 10012 78964 4 緑 78932 7894 5 … 6 … Sheet2の色の項目内(A列)の順番は決まっています。 色に対応する、月ごとの値段の出し方がわかりません。 Sheet1のデータは2000行弱くらいの量です。 月は3月までです。説明不足名ところがありましたら 追記いたします。 ※重要なのが元データのシートで作業列などを追加することが出来ませ  ん(色と月を結合した列を追加などが出来ません)。Sheet2のセル内  に関数を記入するだけで今回のようなことは可能 でしょうか。 すみませんがご指導よろしくお願いいます。

  • エクセルVBA データを別シートに書き込む

    エクセルの、あるシートのデータを、別シートの項目条件の一致するセルに 書き出す方法を教えていただけますでしょうか?  元のシートには  A列     B列    C列 ID番号 年月日番号  金額 ID番号 年月日番号  金額 ID番号 年月日番号  金額  ・      ・       ・  ・      ・       ・ という形で、データが入っています。各列でデータには重複はありますが、   A列とB列の内容が共に同じという行は、ありません。 これを列項目がID番号、行項目が年月日番号の、金額を参照する表にしたいのです。 新しいシートのA列に降順に全ID番号を、1行目に同じく全ての年月日番号をいれ、 元のシートのC列データ(金額)を新しいシートの該当セルに書き込むには どのようにすればいいでしょうか?このような感じで‥。    月日1 月日2 月日3‥‥ ID1 金額  金額  金額 ID2 金額  金額  金額 ID3 金額  金額  金額  ・  ・  ・ 実は元のシートは10枚ほどあり(期間で区切っています)、おまけに各シートには 登場しないID番号もあります。 そこで、すべてのID番号と年月日番号をまとめ、ひとつのシートにしたいと考えた次第です。 1枚のシートならばピボットテーブルで何とかなるのですが、それをまとめようとすると、 データの量が膨大で、PCがとまってしまう(のか計算が終わらない気が‥) VBAを使えば何とかなるのかもと思いまして、質問いたしました。 エクセルは2007です。 どうぞよろしくお願いいたします。

  • Excel VBA セル内の文字列操作について

    例えば、A列(A2より下のセル)のセル内にある文字列が、それぞれ対応するB列(B2より下のセル)のセル内にあった場合、該当文字列のフォントの色を変えたい(例えば「赤」)のですが、VBAで一括処理とかできるのでしょうか? <例> A列      B列 テスト     このテストは・・・ → 「テスト」の部分のみ赤色にしたい。 サンプル   サンプル     → 文字列全部分の「サンプル」を赤色にしたい。 どうかご教示の程よろしくお願いいたします。

  • EXCEL VBA 別シートで検索後、貼り付け

    excel2010 (ブック名A.xlsx)にシート名SA、シート名SBがあります。 シート名SAのC列に検索対象(C1~C50位)があり シート名SBのB列が検索範囲(流動的ですがB1~B100位の範囲)です。 検索対象は文字列で、これが検索範囲のセルにに含まれていた場合 検索範囲の隣のセルCxxに検索対象文字列をコピー&ペーストしたいです また、検索範囲の行数に値があるまで、順次処理をしていきたいです

  • エクセル 複数シートのデータを別ブックにまとめる

    月毎の実績表を作ろうとしています。 構成は、7~6月の12枚シートでひとつのブック【実績表.xlsx】(上画像)。 これとは別に、各営業が入力できるブックを12か月分【7月営業.xlsx ~ 6月営業.xlsx】(下画像)。 下画像にあるデータを上画像の表にまとめたいのです。 セルの対応 上画像      下画像  B列23行以下   シート名 C列〃       A列orE列35行~49行 E列〃       B列orF列〃 H列〃       C列〃 I列〃        D列〃 K列〃       G列〃 L列〃       H列〃 これを鈴木さんデータから順にまとめれるようお願いします。 VBAをネット検索し、同ジャンルのQ&Aを複数見つけたのですが、なにぶん素人なものでよくわかりませんでした。 非常に困っていますので、どなたかお助けください。

  • エクセルのシート名を、シート1に作成した新旧一覧表に対応させる形で、複数シート一括で変更するには?

    エクセルのシート名の変更について教えてください。 シート1のA列に、現在のブックのシート名が、 シート1のB列には、変更したいシート名が 対応するように入力されています。 シート数は50~200程度で、つど変わります。 例     A列    B列 1行目:りんご   赤色  2行目:ばなな   黄色 3行目:メロン   緑色     ・     ・     ・     ・     ・     ・ ※この場合、「りんご」は「赤色」に、「ばなな」は「黄色」に、 「メロン」は「緑色」に、それぞれシート名を変換したい。 今は、手作業でひとつずつシート名を変換しており、 かなりの手間で困っています。 一覧表を作成するまでは手作業でいいのですが、 何とかして、シート名の変更を、この一覧表を参照して できないでしょうか? 過去の質問をいろいろと見たのですが、 該当するものが見つけられず、VBAも初心者のため、 途方にくれています。 ぜひともご教授ください。

  • 不要なデータを切り取って別のシートに貼りつける

    シート1に色々なデータが並べています。A列~J列、5000行くらいです。 J列に「0」「1」「#N/A」の三つの値がバラバラに並べています。 フィルタで昇順にし、「0」「1」「#N/A」と奇麗に並べます。 「0」と「#N/A」の行を切り取ってシート2へ貼り付けます。 そして次にG列に「ダウンロード」以外の文字があった場合も同様に切り取ってシート2に貼り付ける といった作業をしています。作業が大変なので、マクロで実行したいのですが、コードの記述が分からないのです。教えて下さい。 宜しくお願いします。

  • エクセルで別ブックを検索するマクロ、VBA

    エクセルで以下の処理を行えるマクロを作成したいです。 当方、マクロについてほとんど知識がありません。 恐縮ですが、教えていただけると嬉しいです。 ・主にしたいこと  [検索]ブックで一致するコードを探して、  [結果]ブックの対応するコードの行にそれぞれの項目を返したい。 ●ブック1 [検索]  シートが12個あります(それぞれ、1、2、3…12というシート名=1~12月分)  ↓各シートの内容    A    B    C    D 1  氏名  数値  コード  内容 2  abc   111  SS1234 あいうえお 3  bcd   123  SS3456 かきくけこ ・ ・ ・ といった感じです。 12個のシートの中身はそれぞれ似たようなものですが、 「コード」や「内容」などは少しずつ違います。 ●ブック2 [結果]  ↓シートの内容    A    B    C    D 1  氏名  コード  内容  数値 2      SS3456 3      SS1234 ・ ・ ・ といった感じです。 (注)検索用ブックとは列の並びが異なっています。 ここでやりたいことの詳細ですが、 ・[結果]ブックの「コード」(B列)にコードを入力すると、  [検索]ブックで一致するコードを検索し、  A列「氏名」、C列「内容」、D列「数値」に、[検索]シートの内容を  自動的に表示させたい。  (ただし[結果]ブックに入力した「コード」は、[検索]ブックの1~12のうち、   どのシートにあるかわからない) ・入力したコードが見つからない場合は何も表示しない。 ということです。 最初VLOOKUP、MATCH等の関数で表示することを考えましたが、 シートが複数にまたがっているのと、 列の並び方が[検索][結果]ブックで違うのでわかりませんでした。 長くなってしまい申し訳ありませんが、どうかおしえてください。 よろしくお願いします。

  • エクセルVBAでのブック名の取得について。

    こんにちは。よろしくお願いします。 自身:a.xls 他:1.xls、2.xls、3.xls 上記全てを開いた状態で、a.xlsのA列に、a.xls以外のブック名を文字列として取得しました。 A 1.xls 2.xls 3.xls この状態で、更に、 追加:11.xls、12.xls、13.xls というブックを開いた場合(1、2、3は開いたまま)に、B列に上記3つのみのブック名を文字列として取得したいと考えています。が、A列に取得したところで行き詰ってます・・・。 ご教授願えると嬉しいです。 よろしくお願いします。