• ベストアンサー

エクセル VBA 特定の文字列

エクセル VBA 特定の文字列 A列に、様々な文字列があるとします。 そのうち、りんごと書かれている行のみを別シートに書き出すマクロを教えてください。 お願い致します。

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

  • ベストアンサー
回答No.4

Option Explicit Sub BigAppleInNY() Dim xSheet As Worksheet Dim xLast As Long Dim kk As Long Dim nn As Long Application.ScreenUpdating = False Application.DisplayAlerts = False With Sheets("Sheet2") .UsedRange.clear End With Set xSheet = Sheets("Sheet1") 'xLast = xSheet.UsedRange.Rows.Count xLast = xSheet.Cells(Rows.Count, "A").End(xlUp).Row kk = 1 For nn = 1 To xLast If InStr(xSheet.Cells(nn, "A").Value, "りんご") > 0 Then With Sheets("Sheet2") '.Cells(kk, "A").Value = xSheet.Cells(nn, "A").Value xlpastevalues Application.CutCopyMode = False xSheet.Rows(nn).Copy .Rows(kk).PasteSpecial Application.CutCopyMode = True kk = kk + 1 End With End If Next nn Sheets("Sheet2").Select Application.ScreenUpdating = True Application.DisplayAlerts = True End Sub

その他の回答 (3)

  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.3

>りんごと書かれている行のみを別シートに書き出す エクセルにはフィルターオプションという機能があります。 http://www.eurus.dti.ne.jp/yoneyama/Excel/filter3.htm でも参考してみてください。 マクロのコードについても最後のほうに説明されています。

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.2

こんばんは。 ごく一般には、オートフィルタを使うのが一番簡単で高速です。 sub macro1() range("A:A").autofilter field:=1, criteria1:="リンゴ" activesheet.autofilter.range.entirerow.copy worksheets("Sheet2").range("A1") activesheet.autofiltermode = false end sub ただし。 >A列に、様々な文字列があるとします こういった漠然としたご相談の状況では、リスクもあります。 一番問題になるのが、あなたのリストが 「1行目にタイトル行、2行目からデータ」といった標準的なリスト形式になっているのか、 それともいきなり1行目からだらっとデータが並んでいる状況のお話をしているのか、 という点です。 前者の場合、タイトル行をコピーしたいのかしたくないのか、という問題もあります。 また後者の場合ですと、言わずもがなですが先頭データが「りんご」ではない場合、間違った処理になります。 また既出回答でも指摘されていますが「りんごを抽出したい」のか、「りんごを含む行を抽出したい」のか、によっても具体的なマクロは変わってきます。 もうひとつ、「リンゴ(を含んだ)セル」をコピーしたいのか、「リンゴの行」をコピーしたいのか、目に見えるエクセルの様子としてどこのセル範囲をコピーしたいのかも曖昧です。

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.1

こんばんは! 一例です。 Sheet1のデータをSheet2にコピー&ペーストするようにしてみました。 標準モジュールに↓のコードをコピー&ペーストしてマクロを実行してみてください。 1行目は項目行で最終列までデータが入っているとします。 Sub test() Dim i As Long Dim j As Long Dim ws1 As Worksheet Dim ws2 As Worksheet Set ws1 = Worksheets("Sheet1") Set ws2 = Worksheets("Sheet2") ws1.Cells(1, 1).CurrentRegion.AutoFilter field:=1, Criteria1:="*りんご*" i = ws1.Cells(Rows.Count, 1).End(xlUp).Row j = ws1.Cells(1, Columns.Count).End(xlToLeft).Column Range(ws1.Cells(1, 1), ws1.Cells(i, j)).Copy ws2.Cells(1, 1) ws1.AutoFilterMode = False End Sub ※ 「りんご」を含むでオートフィルタをかけています。 もし「りんご」限定であれば コード内の *りんご* のアスタリクスを削除してください。 こんなんではどうでしょうか?m(_ _)m

関連するQ&A

  • エクセルVBAで特定の文字を含まない行を削除する

    エクセルVBAで特定の文字列(たとえば” りんご ”)を含まない行を削除するものを作成したいです。 ” りんご ”がB列だけにしかない場合は作成できたのですが、 ” りんご ”がB列とC列にも含まれていて どちらかに含まれていたら、その行を残して、それ以外の行を削除したい場合にはどうしたらいいのかわかりませんでした。 教えてください。 

  • 特定の列に特定の文字があるとき

    VBAについてです。 たとえば、エクセルのA列に「あいうえお」という文字があったとき その行を削除したいという場合 素人ながらVBAを真似てみたら、A列以外のところに「あいうえお」が 入っている行も削除されてしまいました。 あくまでA列にその文字があったときにだけ削除したいのですが どのようにしたらいいのでしょうか。 InputBoxを使っていたら、どの列に文字が入っていても 削除されてしまい困っています。

  • Excel 文字列の結合について

    いつもお世話になってます。 Win2000 Office2000です。 文字列を結合するのに=A1&A2などで結合できますが片方が空白だった場合に空白を返すことは可能でしょうか? 正確には2行目が入ってたり入ってなかったりしてるので     A列   B列   C列 1行目 りんご イチゴ  桃 2行目 赤い       甘い これで=A1&A2と入れて他もフィルドラッグでやると 別シートA1:りんご赤い 別シートA2:イチゴ0 別シートA3:桃甘い これで「イチゴ0」となってますが空白にしたいのです。 探し方が悪かったのか過去ログで見つからず、お知恵を拝借できたらと思います。 よろしくお願い致します。

  • Excel で特定の文字を取り出してその文字だけをコピーする方法

    VBAや関数に詳しくないので、というよりもExcelにあまり詳しくないので、とりあえずこうすればできるという方法を具体的に教えていただければと思います。 やりたいことは2つあります。内容はそれぞれこんな感じです。 (1) セルA1に”・・・・・・・○”  (・は任意の文字とします。)   セルA2に”・・・・・・・×”  (抽出したい文字は最後に来ます。) とあったとしたら セルB1に”○” セルB2に”×” というふうに特定の文字をコピーする。 それらの文字が含まれていなかったり、あってもそれが最後でなければ何もしません。 (2) (1)で作ったシートを他のシートにコピーしたとして、そのシートには列2に特定の文字○、×などが入っています(空欄の場合もあります。)。この中から列2の内容が×の行を削除します。 Officeについては詳しくありませんが C、C++やJavaなどは使っていたのでスクリプトについては読んでいるうちに慣れると思うのですが、肝心のExcelを使いこなしていないのでこれをマクロで保存した方がいいのか関数にしたほうがいいのかということもはっきりしていないレベルですのでその辺も交えて教えていただけるとありがたいです。 本来であれば自分である程度の勉強をしなければいけないのはわかっているのですが、急ぎということでよろしくお願いします。

  • エクセル 特定文字列のある列の削除と保存

    こんにちは いつもお世話になっています。 エクセル2010です 1行目に文字列が入力されています。 (1)1行目に特定文字列を含む列を削除するマクロ。 (2)1行目に特定文字列を含む列だけを残して、他はすべて削除するマクロ を教えてください。 2つ質問するのが不適当ならどちらか一方でも構いません。 指定したい文字列は複数ありますので「文字列A、文字列B、・・・」等で追記できる形だと助かります。フォーマットが決まっているので指定文字列を頻繁に変えることはありません。 特定行を削除するマクロはネット上でヒットしたんですが、列は見つかりませんでした。 マクロ記録で、文字列検索、列削除をしましたが、連携のさせ方がわかりません。 よろしくお願いします。 Sub Macro1() ' ' Macro1 Macro ' ' Rows("1:1").Select Selection.Find(What:="あ", After:=ActiveCell, LookIn:=xlFormulas, LookAt _ :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _ False, MatchByte:=False, SearchFormat:=False).Activate Selection.FindNext(After:=ActiveCell).Activate Columns("A:A").Select Selection.Delete Shift:=xlToLeft End Sub

  • エクセル VBA 特定文字がある行を別シートに移動

    C列にA,B,C,D,E(赤枠部分)の文字列が入力された表があります。 マクロ実行時下記のようにするには、VBAのコードをどのように記入すれば、よろしいでしょうか? AとBが入力されている行をシート2にコピー Cが入力されている行を切り取りしシート2に貼り付け(下の行は上方向にシフト) Dが入力されている行を切り取りしシート3に貼り付け(下の行は上方向にシフト) Eが入力されている行を切り取りしシート3に貼り付け(下の行は上方向にシフト) エクセルは2000及び2007です。 よろしくお願い致します。

  • Excelで特定の文字のある列の数値を合計する関数

    Excelで、特定の文字列を含む列の数値の合計を、自動で集計してくれる関数はあるでしょうか。 複数シート(シートA、シートB)で構成されるExcelファイルで、シートAにはすべての取扱い商品が記載されています。現在は、シートBに入力されている商品ごとの販売個数の合計をシートB上でsumにより求め、その数値をシートAの該当箇所に、手で入力しています。シートAに記載されている商品が多いため、この手作業を関数で代替したいのです。 ただし、シートBに、次のような条件があります。 シートBの1行目(A1,B1,C1,D1...)には、見出しとして"氏名" "りんご" "バナナ" "いちご"...などがあり、2行目以降は、販売者の名前と、その人が販売した商品の個数が入力されています。掲載人数は40人(行数で41行)ほどです。 ところが、誰も"りんご"を販売していなければ、その列自体がなくなります。シートBには販売された商品しか記載されておらず、たとえばB1は、必ずしも"りんご"ではありません。 シートAからBを参照し、シートBの1行目に、もし"りんご"の文字があれば、そのりんごの列の2行目以降にある販売数の合計を、"バナナ"があれば同じくバナナの販売数の合計を、じかにシートAのそれぞれの合計欄に表示させたいのです。 なお、シートBの行と列を入れ換えたシートB'を作るのは、避けたいと思っています。理由は、販売者の名前でも、全商品の販売個数をシートAにsumif関数で集計していること。また、シートは1週間ごとに、今後30枚程度まで増え、その各週合計もシートAに集計する予定のため、シートは各週1枚だけにしたいのです。 このような条件のもと、Excelの関数で集計する方法があれば、教えてくださいますか。

  • EXCElで特定の文字列の行をコピー

    下記のようなシートがあります。 列A~K 行1~80程度 列は変わることがありません。 行はデータ量によって40~80くらいまで変動します。 この中の特定の行をコピーして他のシートにペーストしたいのです。 コピーしたい行のK列は430という数字が入ります。 K列には430以外の数字も入ることがあります。 また、コピーしたい行の範囲は「開始」という文字列から「小計」 と言う文字列の間です。(小計の後の行にも430という数字が出てきます) マクロを使えば出来ると言うことは聞いたのですが、ヘルプを見ても よくわかりません。 わかる方いましたら是非ご教授下さい。

  • エクセル 特定の文字列から範囲を指定

    エクセル 名前定義の範囲について質問です。 始まり・終わりの行・列を示す特定の文字列を設定し、 それを元に自動で範囲を変化させるようなことはできませんでしょうか。 例えば、 B1:列ここから D1:列ここまで A3:行ここから A6:行ここまで と書かれていた場合、 名前定義の範囲が自動で「B3:D6」となるような方法を探しています。 なお、 ・列を指定する文字列は必ず1行目に ・行を指定する文字列は必ずA列目に あるという想定です。 極力マクロを使用しない方法で、有効なものがございましたら ご指導のほどよろしくお願いします。

  • エクセルマクロ 特定の文字列を含む行を削除

    エクセルマクロ 特定の文字列を含む行を削除 エクセルのマクロについて教えてください。 下の中から列を限定せず、すべての行でAAA、CCCのいずれかがある場合、 その行ごと、すべて削除したいのです。 時に削除したい特定の文字列が数十種類になるため、 マクロ起動時に削除したい特定の文字を記述したファイルを読み込み、それから 削除できるようにしたいのです。場合によってはそのファイルを編集し、 削除したい文字列を変更したいのです。 ご教示いただだけないでしょうか A列 B列 C列 1 AAA BBB CCC 2 BBB CCC FFF 3 DDD BBB FFF 4 AAA CCC DDD 5 GGG RRR UUU 行中にAAA、BBBがある場合、削除したい ↓ A列 B列 C列 5 GGG RRR UUU マクロを実行し、上記の結果にしたい。

専門家に質問してみよう