• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Excel2007:ブロック単位での抽出について)

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

このQ&Aのポイント
  • エクセルで請求書を作成している際に、金額のある請求書だけを抽出する方法や、金額のある請求書を上に持ってくる方法が知りたいです。
  • 請求書を作成する際に、シート内で金額のある請求書と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