Excel2007:ブロック単位での抽出方法

このQ&Aのポイント
  • エクセルで請求書を作成している際に、金額のある請求書だけを抽出する方法や、金額のある請求書を上に持ってくる方法が知りたいです。
  • 請求書を作成する際に、シート内で金額のある請求書と0円の請求書がランダムに並んでしまっており、金額のある請求書だけを抽出したいです。
  • 請求書の中で金額のある請求書を上に表示し、0円の請求書を下に移動する方法を教えてください。
回答を見る
  • ベストアンサー

Excel2007:ブロック単位での抽出について

Excel2007:ブロック単位での抽出について エクセルで請求書を作成しています。 1件の請求書には25行13列を使っています。 25行ごとに改ページを入れており、 次々に請求書をたして行っている状態です。 1か月に1シートとしており、 次月は当月シートをコピーして 金額や日付のみを変更していっています。 毎月同じ取引先へ請求があればよいのですが、 どの取引先も月によって請求があったりなかったり…という状況ですので、 請求がない相手先については請求額0円で請求書が残りますが、 削除してしまうと、次月にコピーされなくなってしまうので、0円のまま残しています。 以上のような処理をしているため、 シートの中で 金額のある請求書と0円の請求書がランダムに並んでしまっている状態です。 このなかから、金額のある請求書だけを抽出することは可能でしょうか? 金額のある請求書を上に持ってきて、0円の請求書を下に持っていく・・というのが理想ですが、 難しければ、抽出して金額のある請求書だけのシートを作成する という事でもかまいません。 わかりづらい説明で申し訳ありませんが、うまい方法がありましたら、教えていただきたいです。 どうぞよろしくお願いします。

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

  • ベストアンサー
  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.1

VBA(マクロ)で可能かと。 内容がはっきりしていないのであくまでもサンプルですが、こんな感じ? 一行、一列目から請求書の1ページが始まっていると仮定しています。 (金額があるセルを、請求書の3行4列目と仮に設定) 金額欄が数字であることなどのチェックは行なっていません。 (無記入、スペースのみ、0などを金額0と判断しています) Sub sample()  Dim sht As Worksheet, rng As Range, rng1 As Range, rng2 As Range  Dim sMax As Long, tmp, i As Integer, j As Integer  Const sheet_rows = 25 ' 請求書1枚の行数  Const sheet_columns = 13 ' 請求書1枚の列数  Const target_row = 3 ' 金額が記入されている行  Const target_column = 4 ' 金額が記入されている列  Set sht = ActiveSheet  sMax = 1  For i = 1 To sheet_columns   tmp = sht.Cells(Rows.count, i).End(xlUp).Row   If tmp > sMax Then sMax = tmp  Next i  sMax = Fix((sMax + sheet_rows - 1) / sheet_rows)  Set rng = sht.Cells(1, 1).Resize(sheet_rows, sheet_columns)  Set rng2 = rng.Offset(0, sheet_columns)  For i = 0 To 1   Set rng1 = rng   For j = 1 To sMax    tmp = rng1.Cells(target_row, target_column).Value    tmp = Replace(Replace(tmp, " ", ""), " ", "")    If tmp = "" Then tmp = 0    If (i = 0 And tmp > 0) Or (i = 1 And tmp = 0) Then     rng1.Copy rng2     Set rng2 = rng2.Offset(sheet_rows, 0)    End If    Set rng1 = rng1.Offset(sheet_rows, 0)   Next j  Next i  rng.Resize(Rows.count, sheet_columns).Delete End Sub

hrklovepop
質問者

お礼

fujillinさん 早々のアドバイスをいただきまして、ありがとうございます。 教えていただいた通りにやってみましたら、できました!! ほんとに助かりました。 ありがとうございます。 VBAって難しそうですが 私も勉強してみようと思います。 ほんとにほんとに ありがとうございました!!!

関連するQ&A

  • VBAの構文を教えてください

    エクセルで請求書を取引先別に作っております。 シート1には当月請求データ、シート2は過去の請求データを入れています。 シート1の当月請求データを次月になったら、シート2に移動したいです。 シート1の請求データ(売上日・品名・金額等)をシート2の一番最後の行に移動させるにはどういう構文になるのでしょうか? シート2は月ごとに1行ずつあけてデータを入力させているので、 空白を調べてそこにデータを入力するという構文は使えないのでパソコン教室で習った構文は使えなくて、困っています。

  • Excel2007:25行ごとにデータを抽出する関数は?

    Excel2007:25行ごとにデータを抽出する関数は? 先日、Excelについて質問させて頂き、アドバイスをいただいた者です。 Excel2007で請求書を作成しており、1請求書には25行13列を使っています。 2つ目の請求書は26行目から、3つ目は51行目から…という風に、 表の下に1請求書ごとに改ページを入れながら 次々と請求書をつなげて作っていっています。 このなかから、会社名と金額のみを取り出して、 同シートの請求書枠外に表として作りたいと思っています。 請求書は25行13列(A1:M25) 会社名はD5、D30、D55・・・・ 金額はJ23、J48、J73・・・・ 表を作りたい場所は、同シートのP1に会社名、Q1に金額とし、 1請求書につき1行で、次の請求書のデータをP2・Q2に入れたいです。 VBAではなく、関数を入れることで可能でしたら、関数で考えたいと思っています。 いろいろやってみたのですが、うまくいかず・・・ お詳しい方、どうぞよろしくお願い致します。 いちおう、前回助けていただいた質問のURLを載せます。 http://okwave.jp/qa/q6245060.html

  • Excel2007でのフィルタ抽出がうまく行きません。

    Excel2007でのフィルタ抽出がうまく行きません。 あきらかに存在する項目名が抽出対象項目の中になかったり、数値項目で抽出すると 10行あるのに5行しか抽出されない。などです。 類似のシートが10あり、平均5000行の表です。正しく抽出されるシートもあります。 どこがどう違っているのか特定不能です。 抽出対象から漏れる行があるということは、特定条件に合致した行の項目を加減乗除する 数式を入れてあるのですが、それも漏れている可能性アリでしょうか? だとすれば、電卓片手に全項目の検算?をみなさんやっているのでしょうか?

  • Excel2007VBA セル範囲の選択について

    ●質問の主旨 任意に変わる、最終行でデータ入力がされているセルを取得し、 かつそのセルを別のセルと組み合わせて範囲選択するためには どうすれば良いでしょうか? 具体的には1.の記述と同じにするためには,2.の記述を どのように変えたらいいでしょうか?ご存知のかたよろしくお願いします。 1. Range("A3:E50").ClearContents 2. Range("A3:Range("A1").End(xlDown).Offset(0, 4)").ClearContents ●質問の詳細 1. 現在現金出納帳を作成しています。 当月が終わったら次月用として当月用のシートをコピーします。 2. コピーするシートの雛型は同じですが、収支項目、収支金額等は、 一旦クリアします。 3. "A3:E50"は収支項目、収支金額の範囲で、 E50はシートの体裁を合わせるための名目的なセルです。 ※ 現金出納帳なだけにE50の位置は毎月変わります。 収支項目の多い月は月中に行を挿入して、 最終セルがE60やE75になるかもしれません。

  • エクセルでランダムに抽出後、一つのセルにまとめる方法

    エクセル初心者です。 エクセルのシート1に A列の1行目~10行目にA~Jまでの文字が入力されています。 これをシート2の B列の1~100行目に シート1からランダムで抽出した3つ又は4つの文字を ACE DFG ・・・・ のように埋めるには、どのような式を入れればできるのでしょうか? 文字はだぶらないように抽出したいと思います。 文字はCAEのように、順番が逆になっても構いません。 むしろ時々逆になったりするほうが都合がよいです。 抽出される文字数も、3つだけでなく、ランダムで4つ抽出するときも あるようにしたいです。 オフィス2003を使用しています。 ご回答よろしくお願いします。

  • データ抽出のコピーの仕方を教えてください。

    エクセル2007で表を作っています。 シートAに、1行目が項目で2行目以降データです。350行ほどあります。 シートAのそのデータにフィルタを使って、3件ほど、抽出しました。 シートBに抽出したデータと1行目の項目を列幅やセルの色などそのままコピーしたいのですが、 コピー→貼り付けだと、書式がコピーできません。 項目と抽出したデータをそのまま、まるっとコピーできないでしょうか?

  • エクセルでデータ抽出するには?

    まったくのエクセル初心者です。 エクセルで、シート1のデータの特定科目を抽出してシート2にコピーしたいのです。 シート1のデータは 5/1 消耗品    2500 5/3 水道光熱費  8000 5/5 消耗品     700 5/7 消耗品    1200 この中から消耗品と記入されている行をシート2に抽出したいのです。 マクロは全然わかりません。。簡単にできる方法は無いでしょうか?よろしくお願いします。

  • Excel2007 VBA 最終行の特定セルの取得

    ●質問の主旨 A列の入力を欠いた最終行の特定セルの取得及び転記について ご教示ください。 ●質問の詳細 下記の要領で現金出納帳を作成しています。 1. 項目は以下の通りです。  A     B     C      D   E        F 日付 摘要1 摘要2 収入金額  支出金額 残高金額 2. 下の行に向かって1.の具体的内容を入力していきます。 3. 同じ日に複数の項目がある場合、その日の先頭項目のみA列に 日付を入力し、2番目の項目には、日付を入力しない。 4. 当月の一番最後に入力されている項目のF列の残高金額をもって、 次月の残高(繰越残高)とする 5. 当月の残高(繰越残高)は、雛型シートを用意し、 そのシートのF3セルに入力する。 ※ 一日に必ず複数の項目を入力するため、最終行には 日付の入力を欠いていることがほとんどです。私案のコードでは 「最終日」の1番目の残高は拾えても、「最終日」の最終行を 拾うことができません。コードをどのように書き換えたらよろしい でしょうか? ●私案のコード Sub 繰越_Click() Dim i As Integer '既存のシート数を取得 i = ThisWorkbook.Worksheets.Count '最終シートをコピーして後ろに挿入 Worksheets(i).Copy after:=Worksheets(i) '月リストからシート名を取得してシート名変更 Worksheets(i + 1).Name = Sheets("月リスト").Cells(i + 1, 1).Value '新しく作成したワークシートについて以下の処理を行う With ActiveWorksheets '当月の残高を次月に繰り越す (残高が記入されている最終行,F列の値を次月シートのF3セルに代入する) Range("F3") = Worksheets(i).Range("A1045876").End(xlUp).Offset(0, 5).Value End With End Sub 使用機種はWindouws Vista Excel2007です。当方はVBA初心者です。   

  • エクセルの関数を使った抽出方法

    エクセルの関数を使った抽出方法 お世話になります。Excelで下記のような例で同じ製品が複数存在するリストから 製品が重複しないようにリスト化することは可能でしょうか? 「重複の削除」を使わずに抽出したいです。 当方はオフィス2003使用です。 sheet1が日報でsheet2が請求書です。金額は抽出して合計しなくていいです。 あくまでも製品名だけをsheet2の請求書に抽出したいです。 何かよい方法をご存知の方がいらっしゃいましたらご指導願います。 よろしくお願いいたします。 【抽出前】sheet1 製品名   金額   A     ○円   B     ○円     B     ○円    B     ○円    C     ○円     C     ○円      D     ○円     E     ○円   E     ○円   F     ○円 【抽出後】sheet2 製品名   金額   A     ○円   B     ○円      C     ○円   D     ○円   E     ○円   F     ○円

  • 複数シートからデータを抽出したい

    教えてください。 複数のシートから同じデータを抽出したいのです。 各々シートの行、列データは等しくない状態となっております。 4行目から○○を検索し、一致するものがあれば”固定のB列”と一致した列を抽出する、をシート2、3と繰り返して統合されたシートを完成させる、という流れにしたいのですが最終行の取得、そこから続きにコピーというイメージまではわかるのですが固定のB列と一致した列を抽出させる方法がわからないのです。 どのような処理で実行できるでしょうか?