• 締切済み

Excelでデータを抽出する方法について

Excel2013で作成されている大きな表があります(最終行が4000位)。そのうちAA列に「A003」「H072」(アルファベットが小文字の場合もあります)など最初の文字がアルファベットで後の3文字は数字の3桁のコードが入っている行を抜き出したいです。 AA列は、空欄のセルもありますし、コードの前や後に「NXE010025021」など別の数字が入っているセルもあります。 アドバイス頂けましたら幸いです。 宜しくお願い致します。

みんなの回答

  • HohoPapa
  • ベストアンサー率65% (454/692)
回答No.3

VBAは使えず、必要な行たちをフィルターで絞り込み 手作業で別シートに複写する対応でよければ、 添付画像を例に AB2=IF(OR(AND(CODE(AA2)>=97,CODE(AA2)<=122),AND(CODE(AA2)>=65,CODE(AA2)<=90)),"〇","×") AC2=IF(LEN(AA2)>=4,"〇","×") AD2=IF(ISERR(VALUE(MID(AA2,2,3))),"×","〇") AE2=IF(MID(AA2,2,3)=ASC(MID(AA2,2,3)),"〇","×") AF2=IF(AND(AB2="〇",AC2="〇",AD2="〇",AE2="〇"),"〇","×") といった式を埋め、必要数下方向に複写し その後AF列でフィルターを設定します。

全文を見る
すると、全ての回答が全文表示されます。
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

既に解答は出ている。出し遅れて、賛成票を投じる的なことで、下記を出します。 ーー >アドバイス頂けましたら ないでしょう。このタイプの問題は (1)文字種の判定 エクセル関数にISNUMBER関数などあるが、ISALFAはない。 そこで正規表現などの力に頼ることになる。 VBAではその簡略機能のLIKEの利用です (2)抜出し FILTER関数ができたが、それまではなかった。 関数は処理中間の情報を保持する、「変数」が使えないので、次ステップへ処理をつなぐのがむつかしい。技巧的な関数組み合わせや、配列数式などを使わざるを得ない。 参考 5・31のOKWAVE質問 INDEX関数SMALL関数を使って空白行を詰める この「詰める」ということが、関数では意外に難しいのです。同行にIF関数で値が出せる問題なら、FILTER関数が使えるか考えるのも手です。 ーー 以上がアドバイスならぬ、小生の、考えの発端です。 下記VBAは、A-H列(8列)データをK-R列に抜き出してます。 また、条件に合う行は、J列にA列データを出してます(テスト確認用) これで下記IF文の条件は正しいでしょうか? このJ列で条件該当列が正しいでしょうかチェックする。 全角のAーZの文字はA列データの先頭に来ると、考慮してません。 条件に合致したデータを作るときの方法は、コピー貼り付けでなく、代入法です。 VBAでも一番やさしい、全行を総当たり方式です。 ーーーー 標準モジュールに Sub test01() Dim dt As Variant k = 1 lr = Range("A100000").End(xlUp).Row For i = 1 To lr x = Cells(i, "A") If Mid(x, 1, 1) Like "[a-zA-Z]" And Mid(x, 2, 3) Like "[0-9][0-9][0-9]" Then Cells(i, "j") = x '漏れや余分ないか確認用 dt = Range("A" & i & ":H" & i) '元データをバリアントに Range(Cells(k, "K"), Cells(k, "R")) = dt k = k + 1 End If Next i End Sub

Shenabo
質問者

お礼

ご回答頂き有難うございます。 このような分野にお詳しい事に尊敬します。 私は全くうとく仕事で苦戦しております。 頂いたアドバイスを参考に勉強致します。

全文を見る
すると、全ての回答が全文表示されます。
  • NuboChan
  • ベストアンサー率47% (746/1586)
回答No.1

最初の1文字がアルファベットで後の3文字が数字の3文字のコードが入っている行を別シートに抜き出す 但し、A003edfなど後ろに文字列が続く場合も対象とする Option Explicit Sub ExtractRows() Dim wsSource As Worksheet Dim wsTarget As Worksheet Dim lastRow As Long Dim i As Long Dim pattern As String pattern = "[A-Za-z][0-9][0-9][0-9]*" Set wsSource = ThisWorkbook.Worksheets("Sheet1") Set wsTarget = ThisWorkbook.Worksheets("Sheet2") lastRow = wsSource.Cells(wsSource.Rows.Count, "A").End(xlUp).Row For i = 1 To lastRow If wsSource.Cells(i, "AA").Value Like pattern Then wsSource.Rows(i).Copy wsTarget.Rows(wsTarget.Cells(wsTarget.Rows.Count, "A").End(xlUp).Row + 1) End If Next i End Sub

Shenabo
質問者

お礼

ご回答頂き有難うございます。 私はこういった分野にうとく仕事で困る事が多いです。 頂いたアドバイスを参考にさせて頂き勉強したいと思います。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • エクセル2003 データの抽出

    excel2003を使用しています。 A列に8桁のコード、B列に、そのコードの品名が入力された表があります。 この表の中から、最初の4桁だけ一致するデータを抽出したいのですが どうすればよいでしょうか? オートフィルタオプションを使ってみたのですが、うまくできません。 よろしくお願いいたします。 例:12348888、12349999、12346666、32224434、46732235・・・・と並ぶコードの中から、 1234×××× のコードの行だけが、表示されるようにしたい。

  • Excel抽出方法を教えてください。

    お世話になります。 下記のような表があります。 中の数字は任意の数字が入ります。 行に対して、数字は必ず1セルのみ。 列に対しては、数字は複数になります。 この数字が入っている列の1行目(画像でいうとA~F)を右側(H列)に表示させたいです。 関数で表示ができるようであればお教えください。 何卒よろしくお願いします。

  • エクセル関数で条件が二つの時の数値抽出

       列方向のそれぞれ三つのセルに数値が入った78行  (75行から152行)のテーブルがあります。       今,これらと異なる列方向の三つのセルの内の左側二  つに,テーブル内の任意の行の数値をそれぞれ選択した  時,残るセルにテーブル内の残された行の数値を抽出し  たいと思いますがうまくいきません。      何方かエクセル関数で出来る方法を教えていただけま  せんか。   なお,選択行は4行だけとしており,これらを連続させず  に一行毎に設け,各行毎の抽出セルにDSUMで計算式を  作成すると数値の抽出ができますが,この方法は避けた  いと思います。     (数値選択列)(抽出列)   (テーブル)   73行 X  ,Y   ,Z      , AA  ,AB  ,AC   74行開始 終了 期間     開始 終了 期間   75行,0005 ,0011 ,0010 (空欄),0004 ,0012 ,0010   76行,0007 ,0009 ,0010 (空欄),0005 ,0011 ,0010   77行,0004 ,0011 ,0009 (空欄),0006 ,0010 ,0010 (空78行,0008 ,0003 ,0004 (空欄),0007 ,0009 ,0010  --------------------(空欄),0004 ,0011 ,0009 (空79行(空            欄),0005 ,0010 ,0009 (空80行(空            欄),0006 ,0009 ,0009 (空                 欄),0007 ,0005 ,0006 (空152行(空           欄),0008 ,0003 ,0003    以上で,(空,あるいは(空欄)乃至は数字で00を含む4  桁としているのは,文字化けを避けるために便宜上入れた  もので,数値そのものは2桁の範囲です。                   何度もトライしておりますができません。どうかよろしくお  願いします。なお,エクセルVBAによる方法もお教えいただ  ければ有難いです。

  • Excelのマクロで()内の文字を抽出して書き出したい

    HTMLにあるテーブルの部分をコピペして貼り付けたExcelファイルがあります。 A~Cまでの3列が埋まっている状態で、D以降の列は空欄です。 C列に123(1112)というように、数字(数字)の記載になっている部分があります。 ()の前と、中は必ず半角数字で、桁は1桁~5桁までと幅広い状態です。 この()内の数値をD~F欄に書き出したいです(縦3列のものを、横3列として書き出したい) 数字(数字)という記載のセルは、必ず縦に3つ並んでいますが C列は膨大なセル数なうえに、数字(数字)という記述以外のセルも間に入っております(数字のみのセルか、空欄のセルです) 3つ並んでいる部分のみを探して、()内の数値を抽出し、D~F列に書き出すことは可能でしょうか? 書き出す場所は、3つ並んでいるC列の最初のセルの横のD~Fだと助かります。 (数字(数字)がC6~8にあった場合、D6~F6に書き出される) なお、数字(数字)というセルはC列以外にはなく、4つ以上縦に並ぶ事もありません。 さすがにこのような内容を実行するのは不可能でしょうか? もし可能でしたら、マクロを組んでいただきたいです・・・よろしくお願いします。

  • Excel関数

    Excel2010を使用しています。 A~E列 及び H~K列の1,000行目くらいまで、1ケタから5ケタの数字を入力しています。 重複した数字がないか確認したいのですが、適した関数はありますか? (重複していた場合、指定したセルに「重複」と出るような関数など) セルは空欄の場合もあります。 ご教示いただければ幸いです。よろしくお願いします。

  • エクセルの置換

    m行n列の表があります。 第1行はタイトルで、 第2行の各列には (2,a)セルに関するデータが それぞれ入力されています。 第3行以降は、a列にのみコードが入力されていますが、b列以降は空欄です。 第2行のデータ中の (2,a)セルの文字を、 各行について (m,a)セルの文字に置換しながら第2行を各行にコピーして、(3,b)から(m,n)の空欄を埋めて表を完成させたいのです。 できれば、第2行の各列の書式も含めて第3行以降の各列にコピーするというVBAを教えていただきたくよろしくお願いします。

  • エクセルのデータ抽出

    今エクセルのデータ抽出に困っています。 14:00:00.862072 文字列(以下すべて数字、英字混合) 14:00:00.862114 文字列 14:00:00.862359 文字列 14:00:00.862367 文字列 というデータがあり、 14:00:00.[この部分!!] 文字列 だけを抽出したいのです。 しかし、コピー&ペーストを行って貼り付けたので この長い1行が1つのセルにすべて入ってしまっています。 どこのサイトも、セルが違うと、抽出はできるように書いてあるのですが....。 このデータはすべて1つのセルに長い1文が入ってしまっています。 この場合、抽出することは不可能でしょうか? やりかたがあったら、ぜひ教えてください。

  • Excelセル内の条件付最大値抽出方法で困っています

    Excel2003を使用しています。 800件ほどのデータで、縦一列に、カテゴリをあらわす2桁もしくは3桁のアルファベットと数字の組み合わせのデータが入っています。 例) kim2 kim3 kim4 kim343 hon209 hon210 coi4 coi5 sys92 coi9 coi59 ur2004 ur2005 これについて、カテゴリ(kim、honなど)ごとの最大値を求めようと思っています。 カテゴリごとにセルを一列足して、左の文字を抜いた値をセルに入れ、その列ごとの最大値を求めるという方法はわかるのですが、今後カテゴリが増えていくときのために列を増やさなくても計算できる方法を探しています。 表と離れたところに、カテゴリの値を入れたセルを置き、横のセルに最大値が入るイメージで作成しています。 ご教示いただけると助かります。

  • エクセルでのデータの抽出

    エクセル2007で教えていただきたいのですが、a1からc1セルに特定の文字列が 入っていてa2からc2セルにも特定の文字列が入っています。 行1に入っている文字列が「あ」で、且つ行2に入っている文字列が「い」を満たす、 その下の行3に入っている数値の合計は、どうすれば求められるでしょうか。 ご教授お願い致します。

  • Excelで年月日をyy/mm/dd表記にする方法

    1つのセル内に「年月日+文字列2桁+数字1~2桁」で入力されたA列があります。 例えば、 A1「21/3/1●●2」 A2「21/3/1●●12」 A3「21/2/28●●5」 といった感じです。これをB列に年月日だけyy/mm/ddに表記にして表示する関数を作成したいのですが行き詰っています。 B1「21/03/01●●2」 B2「21/03/01●●12」 B3「21/02/28●●5」 1万行ほどあるので、出来るだけ軽い式がよいのですが、いい方法はありますでしょうか。真ん中の文字列は必ず2桁で、右端の数字は1~2桁です。 使用しているExcelは2019です。

専門家に質問してみよう