• 締切済み

連続数字の抽出(VBA)

過去歴にてあてはまる物が見受けられなかったので質問させて頂きます。 ある計測器からデータが出力されるのですが、1行に付き5列が1SETで 25行ご1マス空けて出力され又20行後1マス空けて20行それを4回繰り返し後次のtxtとして出力され。データ採取が終了まで続きます。 今現在csvにて取り込んでいるのですが、データにより変更しますが、 15~23ページ有ります。 データ採取した中で、隣と連続数字の行を抽出したいのですがどうすれば宜しいでしょうか(数字は全て整数MAX120です) 5列の内隣同士連続であればコピーで別のエクセルブック(シート)へ貼り付け(コピー)を1ページ4SET分を前ページ分の抽出 例えば 1,2,3,4,5  抽出 21,35,38,49,66 抽出しない 21,35,38,65,66 抽出 の様にどこかで連続が有れば抽出を行いたいです 1行目1,2,3,4,5_11,12,13,14,15_21,22,23,24,25_31,32,33,34,35 2行目 : : 25行目1,2,7,10,16_19,21,23,24,35_21,22,23,24,25_31,32,33,34,35 の様に数字が出力されます

みんなの回答

  • iriyak
  • ベストアンサー率48% (40/82)
回答No.3

こんにちは。 こうしたテキスト処理には Excel VBA よりも、テキスト処理に特化した処理系を採用することも視野に入れるとよいかもしれません。回答者は Awk をおすすめします。実際に使用できるようになるまで慣れと時間が必要かもしれませんが、習得する価値のあるソフトウェアの一つと考えます。ぜひご検討ください。 Windows の環境で Awk を使用するための段取りや実際のスクリプト例は、こちらが参考になるかもしれません。 QNo.4040998『バッチ処理でテキストから数値を取り出し、CSVにしたい』

参考URL:
http://okwave.jp/qa4040998.html, http://ja.wikipedia.org/wiki/AWK
全文を見る
すると、全ての回答が全文表示されます。
  • hotosys
  • ベストアンサー率67% (97/143)
回答No.2

連続する値は、隣り合うセルの値の差が1と言う事になる。 それが1行内にあるかないかで対象かどうかを判断する。 ExcelのシートにA1:E?(5列?行)にデータがある場合を考える。 F1=B1-A1(マイナス方向の連続も対象ならF1=ABS(B1-A1)) として、F1:I?(4列?行)の範囲にコピー。 J1=IF(ISERROR(MATCH(1,F1:I1,0)),0,1) として、J1を下へ(?行)コピー。 とすると、質問の例のデータで言えば A B C D E F G H I J 1 2 3 4 5 1 1 1 1 1 21 35 38 49 66 14 3 11 17 0 21 35 38 65 66 14 3 27 1 1 となり、J列が1のもののA:E列をコピーする。 と言う風なVBAをマクロで記録するなりして作成する。

masaojisan
質問者

お礼

回答ありがとうございます すみません、不慣れな者なので。丁寧に書いていただいてると思いますが、全然わかりません。ごめんなさい。

全文を見る
すると、全ての回答が全文表示されます。
noname#60992
noname#60992
回答No.1

1.一行ずつデータを読み込み、 2.split を使って配列に格納し、 3.ループを使って、一つ前の数値との差分を計算し、 4.それが1であったら書き出す。

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

関連するQ&A

  • エクセル 文字列から数字だけを抽出

    エクセル2016の操作について教えて下さい。 セル内の文字列から数字だけを抽出したいです。 例えばAの列にこのような文字列が入っているとします。 高度5km 高度10.1km この中の数字だけを取り出して隣のB列の同じ行に数字だけを表示させる方法がありましたら教えて下さい。 宜しくお願いします。

  • ご質問お願いいたします。VLOOKUPのように数字を抽出したいのですが

    ご質問お願いいたします。VLOOKUPのように数字を抽出したいのですが、 抽出する行はA列のみの数字です。 例えば、条件はD列の150でしたら、1500        B列の2100でしたら、3100 を抽出したいのですが、なにかいい方法はないでしょうか。 どうぞご教授ください。よろしくお願いいたします。

  • エクセルで連続した数字を抜き出す

    エクセルでの作業で困っています。 エクセルのある列からデータを取得して、その中から連続した3桁の数字のみを抜き出して隣の列に入力するという作業を行っています。 しかし、大変量が多いので早くできるようにマクロで行いたいのですが、コーディングの仕方がわかりません。 どなたか、ご教授願えないでしょうか? よろしくお願いします。 例 1.A列の以下データを取得する S741T 154D_D15.5_D13 151ZZ_D18.5_D16 S154ZZZ3 S743DZ 743CHR S111D_cov 2.連続した3桁の数字のみを抜き出してB列に入力する 741 154 151 154 743 743 111 よろしくお願いします。

  • エクセルのデータ抽出

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

  • 行の連続数字を見つけて塗潰す方法

    どなたかご存知でしたら回答をよろしくお願いします。 【質問】 下図の様に5×5のセルが4つあり、それぞれ1~99迄の数字がランダムに 重複有りで入っています。5×5のセルの中には行の連続数字(例:02 03) が入っています(1個も無い場合もあります)。 行の連続数字を見つけたら、その連続数字のセルを塗潰す方法が知りたいです。  ・2連続・・・黄色で塗潰す。   ・3連続・・・赤色で塗潰す。  ・4連続・・・青色で塗潰す。  ・5連続・・・緑色で塗潰す。  A B C D E F  G H I J K   1 01 07 09 11 22     03 10 20 30 31 2 04 12 14 15 23     01 02 07 09 22 3 07 13 17 18 25     04 11 12 14 15 4 06 16 21 24 26     02 13 17 18 23 5 08 19 27 28 29     06 16 24 25 26 6 7 05 09 11 26 30     03 06 13 22 27 8 04 10 15 19 24     03 14 25 28 29 9 01 14 20 25 29     05 11 18 20 21 10 07 18 21 23 31     07 08 16 23 31 11 02 08 12 16 17     02 03 12 17 27 【結果】 上記4つある5×5のセルには、10個の重複数字がありその数字のセルが塗潰されます。 (1)14 15  (2)17 18 (3)27 28 29 (4)30 31 (5)14 15 (6)24 25 26 (7)16 17 (8)28 29 (9)07 08 (10)02 03 【注意事項】  ・使用するエクセルは2010です。  ・セルの中の数字は2桁で表しています。(例:1ではなく01)  ・5×5のセルの位置は下記のとおりです。    1個目の5×5マス・・・A1~E5    2個目の5×5マス・・・G1~K5      3個目の5×5マス・・・A7~E11    4個目の5×5マス・・・G7~K11  ・回答はVBでも関数でも構いません。 以上、よろしくお願いします。

  • numbersで特定行の抽出するには

    アップルのnumbers 09の操作について質問です。 下記のようなデータがあります(実際は★マークはありません)。 左の列の数字は1から、同じ数字を複数個連続しながら順番に並んでいます。 右の列の数字はランダムです。 1 25 ★ 1 88  1 55  2 95 ★ 2 52  2 10  3 99 ★ 3 57  3 41  4 50 ★ 4 46  4 06  ★マークのところだけ、つまり左列の数字の先頭行だけを抜き出して 下記のように並び変えたいのですが、自動で抽出できますでしょうか? (繰り返しますが、実際のデータには★マークはありません) 1 25  2 95  3 99  4 50  よろしくお願いします。

  • Excel VBAでオートフィルタで抽出したデータの一部だけ貼り付けるには

    いつもこのコーナーでは皆様にお世話になっております。以下のVBAマクロが組める方ご教示ください。 Sheet2にあるデータに複数条件でソートをかけ、ある数字(1から18まで)を入れたら、オートフィルタでE列のデータの選択部をSheet1のある部分に1行貼り付けるという作業です。以下のInputBoxに数字を入れるところからです。 (ソート後、どの数字を入れるか判断) ↓ InputBoxにある数字"○"(1から18まで)を入れる ↓ オートフィルタE列「"○-"で始まる」or「"-○"で終わる」 ↓ 抽出されたデータのE列(1列だけ)のデータ(上から17個分)を選択 ↓ 選択部をコピー ↓ Sheet1を選択。Sheet1の"K5"セルに行列を入れ替えて貼り付け という流れなのですが・・・ わかる方教えてください。よろしくお願いします。

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

    Windows7、エクセル2010を使用しています。 エクセルで、指定したセルのデータを抽出する方法についての質問です。 エクセルに60000行×1列のデータがあるとして、 その中から99行目、199行目、299行目、・・・59999行目のデータを抽出しなければなりません。 手作業でコピーするのは時間的に非現実的なので、なにか抽出する方法はないでしょうか? 100行単位で列を変えれば、99行目のみをコピーし、行と列を置き換えればいいと思うのですが、そんなことは可能なのでしょうか? そのほか、何か方法があれば教えてください。

  • Excel VBAでオートフィルタで抽出したデータの一部だけ貼り付けるには(第2弾)

    今週質問タイトルの件で回答いただき解決したのですが、更なる操作を希望したく質問させていただきました。内容は Sheet2にあるデータに複数条件でソートをかけ、ある数字(1から18まで)を入れたら、オートフィルタでE列のデータの選択部をSheet1のある部分に1行貼り付けるという作業です。以下のInputBoxに数字を入れるところからです。 (ソート後、どの数字を入れるか判断) ↓ InputBoxにある数字"○"(1から18まで)を入れる ↓ オートフィルタE列「"○-"で始まる」or「"-○"で終わる」 ↓ 抽出されたデータの右隣のF列(1列だけ)のデータ(上から17個分)を選択 ↓ 選択部をコピー ↓ Sheet1を選択。Sheet1の"K5"セルに行列を入れ替えて貼り付け というものでしたが、これはできました。ここから先です。 Sheet1のU5セルに先ほどインプットした数字"○"(1から18までのどれか)を入れる ↓ Sheet2にてオートフィルタE列「"○-"で始まる」or「"-○"で終わる」によって抽出されたデータの一番上の文字列から「"○-"」もしくは「"-○"」を除いて残った数字(○を除く1から18までの数字)をSheet1のW5セルに(先ほどのセルとは1個飛ばして)入れる ↓ 以下抽出されたデータの上から2番目の文字列を同様に操作し、1個飛ばしのセルY5に入れる。これがBC5セルまで続く というものです。難しいとは存じますが、どなたか教えていただけませんか? よろしくお願いいたします。

  • エクセル2002 数字の抽出とグラフの作成

    数字を抜き出してグラフを作成したいのですが可能でしょうか。 そのステップとして(1)表の数字の抽出、(2)グラフ化があると思います。 (1)では関数を使えば範囲内の数字の出現数がわかると思うのですがどれを使っていいのかわかりません。 (2)では他のデータで3列指定してグラフ化すると系列2までしかでません(3行あるので系列3にしたいです)。 よろしくお願いします。