• ベストアンサー

Excelの行の抽出について質問です。

Excelの行の抽出について質問です。 シート1にA列に受付番号、B列に会社名、C列に建築確認月と項目をつくり建築月は「2010年7月」と いうようにそれぞれの月を入力します。 シート2にはA列に「当月確認」「当月以降確認」「当月以前で未確認」の項目の表をつくり、 「2010年7月」とういうリスト形式でセルに入力し、月がかわるごとにこのセルに関連して1発で行ごと仕分けする方法はありませんか?

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

  • ベストアンサー
  • soixante
  • ベストアンサー率32% (401/1246)
回答No.4

すみません、#3の続きはコレです。 '-------------------------------------------------------------- r = 2 Do While Cells(r, 1).Value <> "" If Ws1.Cells(r, 3).Value < Tsuki Then LstRow = Ws2.Cells(Rows.Count, 1).End(xlUp).Row + 1 Ws2.Cells(LstRow, 1).Value = "当月以前で未確認" Ws2.Cells(LstRow, 2).Value = Ws1.Cells(r, 2).Value Ws2.Cells(LstRow, 3).Value = Ws1.Cells(r, 3).Value End If r = r + 1 Loop EdRow = LstRow + 1 Set Rng = Range(Cells(StRow, 1), Cells(EdRow, 3)) Rng.Sort _ Key1:=Cells(StRow, 3), _ Order1:=xlDescending, _ Key2:=Cells(StRow, 2), _ Order2:=xlAscending, _ Header:=xlNo, _ OrderCustom:=1, _ MatchCase:=1, _ Orientation:=xlTopToBottom, _ SortMethod:=xlPinYin Set Rng = Nothing Set Ws1 = Nothing Set Ws2 = Nothing End Sub '-------------------------------------------------------------- ご意向にそぐえてますか、一度新規ブックにてお試しください。

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

その他の回答 (4)

  • soixante
  • ベストアンサー率32% (401/1246)
回答No.5

そうですか、私のところでは問題なく作動することを確認したんですがね、すみません。 データの内容は配置などについて私が何か見えてないものがあるのかもしれませんね。 マクロのコード自体はちっとも複雑ではありませんので、ご確認のために内容をざっくりだけ書いておきます。 やってることは超シンプルです。 シート1のデータを上から一番下まで順番に見ていく、これを3周しています。(Do Loopが3回ありますよね) 1周目は、当月のものだったらシート2へコピペ、を繰り返し。 2周目は、当月以降のものだったらシート2へコピペ、を繰り返し。 3周目は、当月以前のものだったらシート2へコピペ、を繰り返し。 つまり、すごーくベタな作業をしています。段取りの悪い新入社員がやりそうな作業です。 マクロはこういう繰り返し作業を定型化するのにはもってこいです。うっかりミスもしませんから。 そういうわけで、以下にコードの構成をざっくり書いておきます。診断してみてください。 Sub AAA 各種変数の宣言とセット シート2の並び替えた結果を消去(2回目以降のため) **************************************************** シート1に入ってるデータを上から順に見ていく     シート1のC列の値が、シート2のE1 と同じならば、そのシート1のデータをシート2の一番下にコピペ。シート2のA列には「当月確認」と入れる 繰り返し ******************************************************* シート1に入ってるデータを上から順に見ていく     シート1のC列の値が、シート2のE1 よりも大きい(=翌月以降)ならば、そのシート1のデータをシート2の一番下にコピペ。シート2のA列には「当月以降確認」と入れる 繰り返し 当月以降確認部分だけを並び替え。確認月の昇順、社名は昇順。 ********************************************************** シート1に入ってるデータを上から順に見ていく     シート1のC列の値が、シート2のE1 よりも小さい(=前月以前)ならば、そのシート1のデータをシート2の一番下にコピペ。シート2のA列には「当月以降で未確認」と入れる 繰り返し 当月以降で未確認部分だけを並び替え。確認月の降順、社名の昇順。 ************************************************************ 変数開放 終了 End Sub

sakuraTk
質問者

お礼

soixante様 大変お手数をおかけしております。 再度チャレンジしてみたら、「当月確認」と「当月以前で未確認」 は表示できますが「当月以降確認」がどうしても表示されませんでした。 何か私のやり方が悪いと思います。 私の職場の職員は関数もろくに使えない人ばかりなので 自動で表示させるには「マクロ」の知識が必要ということで 説明することにします。私はちょっと面白そうなので勉強してみます。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
  • soixante
  • ベストアンサー率32% (401/1246)
回答No.3

#2です。以下がコードです。 分量の関係で2回に分けますが、点線の間部分を貼ってください。 '------------------------------------------------------------------- Sub AAA() Dim r As Integer, c As Integer Dim Ws1 As Worksheet, Ws2 As Worksheet Dim Tsuki As Long, LstRow As Long, StRow As Long, EdRow As Long Dim Rng As Range Set Ws1 = Worksheets("Sheet1") Set Ws2 = Worksheets("Sheet2") Tsuki = Ws2.Cells(1, 5).Value Ws2.Select Set Rng = Range(Cells(2, 1), Cells(2, 1).End(xlDown)) Set Rng = Range(Rng, Rng.End(xlToRight)) Rng.ClearContents Columns.NumberFormatLocal = "yyyy/m" r = 2 Do While Ws1.Cells(r, 1).Value <> "" If Ws1.Cells(r, 3).Value = Tsuki Then LstRow = Ws2.Cells(Rows.Count, 1).End(xlUp).Row + 1 Ws2.Cells(LstRow, 1).Value = "当月確認" Ws2.Cells(LstRow, 2).Value = Ws1.Cells(r, 2).Value Ws2.Cells(LstRow, 3).Value = Tsuki End If r = r + 1 Loop StRow = LstRow + 1 r = 2 Do While Cells(r, 1).Value <> "" If Ws1.Cells(r, 3).Value > Tsuki Then LstRow = Ws2.Cells(Rows.Count, 1).End(xlUp).Row + 1 Ws2.Cells(LstRow, 1).Value = "当月以降確認" Ws2.Cells(LstRow, 2).Value = Ws1.Cells(r, 2).Value Ws2.Cells(LstRow, 3).Value = Ws1.Cells(r, 3).Value End If r = r + 1 Loop EdRow = LstRow + 1 Set Rng = Range(Cells(StRow, 1), Cells(EdRow, 3)) Rng.Sort _ Key1:=Cells(StRow, 3), _ Order1:=xlAscending, _ Key2:=Cells(StRow, 2), _ Order2:=xlAscending, _ Header:=xlNo, _ OrderCustom:=1, _ MatchCase:=1, _ Orientation:=xlTopToBottom, _ SortMethod:=xlPinYin StRow = Cells(Rows.Count, 1).End(xlUp).Row + 1 '-------------------------------------------------------------------

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

#1の者です。補足説明有難うございます。 やはりマクロを使うべきでしょう。 新規ブックで試してください。 【1】Sheet1 A1「受付番号」、B1「会社名」、C1「建築確認月」と入力し、2行目以降にデータを貼り付け 【2】Sheet2 A1「状況」、B1「会社名」、C1「建築確認月」と入力。検索対象にする月の入力場所は、E1とします。E1に、「2010/7/1」と入力 【3】 Alt+F11。VisualBasicの画面が開きます。Alt+I、M とすると、真っ白な画面が開きます。 【4】 この真っ白画面に、のちほどご提示するコードをコピペ。VisualBasic画面を閉じる。 【5】 エクセル画面に戻り、Alt+F8 【6】 マクロ名「AAA」を実行。すると、7月を当月としたデータとなるでしょう。 【7】 そのまま翌月分を試して見ましょう。Sheet2 の E1セルに、「2010/8/1」と入れる。 【8】 【5】~【6】 をやる。 8月を当月としたデータになってるはずです。 コードは分量の関係で次の回答に書きます。

sakuraTk
質問者

お礼

soixante様 ご回答ありがとうございました。 残念ながら実行してみましたが上手くいきません。 シート2に「当月確認」「当月以降確認」・・・・・項目が無いような・・・ ただ、私のような素人の頭では考えられる内容ではないようですね。 貴重な時間ありがとうございました。 マクロの本をみて勉強してみようと思います。

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

シート2の部分の記述がいまいちよく分かりません。 >A列に「当月確認」「当月以降確認」「当月以前で未確認」の項目の表 ・・・具体的な構成が不明。A列以外の構成要素は? >「2010年7月」とういうリスト形式でセルに入力し ・・・どこのセルに入力? >セルに関連して1発で行ごと仕分けする方法 ・・・「仕分け」の意味するところ。 >当月以前で未確認 ・・・シート1において、確認できてない案件はどうなってるのでしょう?空欄? 内容にもよるのですが、マクロを使用する形になった場合、あなたに知識はありますか。 上記のようなことを詳しく書くと、回答が付くと思います。

sakuraTk
質問者

補足

質問いただきありがとうございます。 シート2はA列に「当月確認」「当月以降確認」「当月以前で未確認」の項目。 B列にその項目に該当する会社名、C列に建築確認日といったように行ごと シート1から抽出したいのです。 例えば、 「2010年7月」であれば 当月確認 A社 2010年7月      F社 2010年7月 当月以降確認 B社 2010年8月        C社 2010年9月 当月以前で未確認 D社 2010年5月          E社 2010年4月 「2010年8月」 に変更すればこれが自動的に各項目を移動する感じです。 建築確認が終了したものはシート1からデータを削除します。 マクロはあまり詳しくないです。 難しい場合はシート1を月順に並び替えVLOOKUP関数で受付番号で入力 して手動でやるしかないかなって考えてます。 よろしくお願い致します。          

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

関連するQ&A

  • エクセルで、データのある行だけを抽出したい。

    エクセルのSheet1にデータが入っており、セルが空白でない行のデータのみを、Sheet2に抽出したいと思っています。 Sheet2にあらかじめ関数を入れておく方法にしたいため、関数について教えてください。 タイムテーブルで予定を管理するような表で、A~Hまでにデータが入っています。 予定を入れる際にはE列には必ず入力をするため、E列が空白でない行のみを抽出したいです。 A|B|C|D|E|F|G|H 月|日|時間|… 11|22|10:00|… 11|22|10:30|… 時間枠は10:00~17:00の30分刻みで、1日15行使用するので、1年で5475行まで使用します。 1行目はタイトル行なので、データは2行目から入力しています。 フィルタオプションで抽出する方法や、それをマクロで登録しておく方法は分かったのですが、あとから予定を追加することがあるため、マクロを実行する度にデータが置き換わると困ってしまいます。 また、抽出したSheet2のI列以降には備考などを入力したいため、やはり後から列がずれると困るため、A~H列に関数を入れておく方法で実行したいと思います。 よろしくお願いいたします。

  • EXCEL抽出?についてご指導ください。

    シート1にあるデータをシート2に抽出したいのですが・・・ シート1にあるデータの2列目と3行目で交差する「A」を シート2のA1セルに「2」A2セルに「3」と入力すると 指定したセル(たとえばB1セルに「A」と表示(抽出)させたいのですが、ご存知の方教えていただけませんか? (シート1)   1 2 3 4 5 1 2 3    A 4 (シート2)   A  B  C 1 2  A 2 3 3 よろしくお願いします。

  • エクセル フィルタオプションで 特定の文字列を含む行を全て抽出する方法がわかりません

    エクセル2002を使用しています。 エクセルフィルタオプション設定で、特定の文字列を含む行を全て抽出する方法がわかりません。 たとえば sheet1    A    B    C    1 項目1 項目2 項目3  2  あ   い    う    3  う        あ    4  え        い 5      う       Sheet2   A         B         1 抽出文字列 2 あ  3   4 (計算式) 5 (以下抽出結果)   上記のようなデータがあり、sheet2!a5以降に「あ」が該当する行を全て抽出するといった式を組みたいのですが、 Sheet2 a2に抽出文字を入力し、a4に「=or(sheet1!a2=a2,sheet1!=a2,sheet1!=a2)」といった検索条件式を組み、フィルタオプションで、 ・リスト範囲 Sheet1!$a$1:$c$5 ・検索条件範囲 $a$3:$a$4 ・抽出範囲 $a$5  と指定するのですが、うまく抽出できません。 ちなみに抽出対象が文字列でなく数字なら(たとえばSheet1のデータの文字をあ→1 い→2のように全て数字に置き換えてSheet2!a2に1を入力)抽出できるのですが・・・ 文字列をセル参照して条件式を組む場合に何か気をつけることがあるのでしょうか?文章が長くなってしまい申し訳ありません。良い方法があればご教授お願いします。

  • エクセル 行にある項目を抽出

    間違えて他のカテゴリーで質問してしまいました。 そちらは閉めましたので改めてこちらで質問させてください。 エクセルで下記のような表から項目を抽出したいのですが うまくいきません A列 りんご みかん りんご ぶどう みかん と入力されていて任意のセルに、A列に入力されている項目から 重複分を除き抽出したいです 具体的には任意セルに「りんご、みかん、ぶどう」と抽出したいのです。 フィルタオプションを利用し、抽出することはできました。 また、それをマクロ登録すれば、A列に追加項目があっても 自動変更できるという、回答も頂き、確かにできたのですが、 このエクセルから、ハイパーリンクでワードへ飛ばしたり、 いろいろと込み入っているため、できれば、 マクロではなく、関数利用をしたいのですが、 どのような関数を利用すればよいのかわかりません。 ご存知でしたら、ご教示お願いいたします。

  • エクセルで項目を抽出したい

    皆様のお知恵をお貸しください。 日々作業者が行っている日報の項目を一覧表より抽出したいのです。 シート1には受付日(A列) 品番(B列) 数量(C列) 納期(D列)・・・ などが記入されています。日々増えていき月あたり100件程度です シート2には作業者の日報に書かれている品番(A列)、作業時間(B列)、作業者名(C列)作業日時(D列)を手入力していきます。 月当たり1000ほどの入力になります。 複数の作業者が同じ仕事をすること、日をまたぐこともあり重複しています。 求めたいことはシート3のA列にシート2で書かれた品名をシート1の品名の中から抽出し自動で書き出したいのです。 今はピボットを使いシート2のデータを表にして、そこの項目をLOOKUP関数を用いて導きだしていますが、その都度ピボットを更新させないといけないので煩わしいと思い、できれば関数で抽出をしたいのです。欲を言えば品番の若い順に自動で抽出できればいいのですが、まずはシート2に書かれた順でもかまいません。 記入例 シート1には A列    B列    C列    D列 10/1   10001    30    10/12 10/2   10002    1     10/5 10/2 10003 3 11/5 ・       ・        ・ シート2には  A列    B列     C列    D列 10001    2.5     ○○   10/2  9058    4      ○○   10/2 10003 1 ○○   10/3 10001 1 ××   10/3  10003 6 ××   10/3 10002 2 △△   10/5 シート3には(希望としては)  A列     9058 10001 10002 10003 . . . よろしくお願いします。     

  • エクセルで検索→抽出

    お願いします。 シート(1)に次のように入力されています。 A列 B列 C列 D列 E列 → Y列 番号 県 性別 年齢 来社 1行目   1 東京 男  45 09/21  2行目   2 京都 女  33 10/07  3行目   3 福島 女  49 10/25  4行目   4 京都 男  25 12/05  5行目   5 東京 女  30 12/30  ↓ 以上のようにY列まで項目と、1110人のデータが 入ったシート(1)があります。 シート(2)に検索したい文字を入れて抽出する方法を教えてください。 例えば京都出身の人を検索したい場合↓ シート(2)の1行目にはあらかじめシート(1)の項目をコピーしておく 検索したい『京都』は「県列」の項目だから B列の2行目に『京都』と入力する。(1行目には項目) 3行目以降に検索結果↓が表示される。 2 京都 女  33 10/07  スイカ 4 京都 男  25 12/05  モモ 8 京都 女  58 05/04  りんご 12 京都 女  12 06/20  オレンジ また、年齢10~35を検索したりなどもできれば… データを入力したり検索したりするのは、パソコンに不慣れな方ですので エクセルに詳しくない人でも簡単に使用できるよう作成できればと思います。 以上、 検索項目を入力し、下の行に抽出されるような関数はありますでしょうか・・・? なければ近いものでも構いませんので教えてください。 宜しくお願い申し上げます。

  • オートフィルターの抽出されない条件とは

    シートに8列の項目があり項目に対応する文字列を入力しているブックがあります。A列に識別コード(主キーみたいな感覚で)作成してこれまでは Sheet1.Range("A1").AutoFilter Field:=1, Criteria1:= _ "=*08??", Operator:=xlAnd として抽出したい文字列だけ抽出できていました。 今回、別の識別コード(具体的には月日です)をA列に新たに挿入して同じように抽出を試みましたが、何も抽出されず文字列が入力されている最終行の次の1行以前が消えてしまいます(空欄が抽出された)。しかし、完全一致であれば抽出できます。なぜでしょうか?  ちなみに新しい識別は月日なので4桁の数字で10月10日→1010というようにしています。これで10月の行を抽出したいので"=10??"で抽出をかけてみたりしているのですが・・・。

  • EXCEL データをコピーして別シートの最初の空白行に貼り付けたい

    EXCEL データをコピーして別シートの最初の空白行に貼り付けたい Sheet1はA列からR列までを使ったシートで、1行目は各項目があり、2行目からは当月のデータが入力されています。 Sheet2はSheet1の1行目と同じようにA列からR列までが項目になっていて、期中のデータを付け足していきたいと思っています。 マクロの記録でやってみたのですが、前月の最後の行(貼り付ける最初の空白行)の認識の仕方が分からず、Sheet2への貼付がうまくいきません。 どのような方法でやったらいいのか教えて下さい。

  • 検索後、行を抽出するマクロ

    エクセルのシート1、A列からE列まで1~800のセルにテキストが入力されいます A列を検索(部分一致)し、ヒット(複数)した行をシート2へコピーしていのですが出来ません。 因みに、A列は文字列で「赤エンピツ、黄エンピツ」などでエンピツと検索してら両方抽出したいです。 初心者で何も判らず本等を読んでも訳判りません、どなたか御教授よろしくお願いします。

  • エクセルで20万行あるシートから100行ずつ抽出したいのですが

    お世話になります。 エクセルで20万行のデーターがあります(時刻と温度のデーター)。 これを100行ずつ抽出し、別のシートにコピーしたいのですがどうすればいいでしょうか? +’sheet’A1 +’sheet’A101 +’sheet’A201 ・・・ と手入力では大変ですので、ドラッグで一度に出来るやり方を教えて頂けると幸いです。 よろしくお願いします。