- ベストアンサー
Excel2007:ブロック単位での抽出方法
- エクセルで請求書を作成している際に、金額のある請求書だけを抽出する方法や、金額のある請求書を上に持ってくる方法が知りたいです。
- 請求書を作成する際に、シート内で金額のある請求書と0円の請求書がランダムに並んでしまっており、金額のある請求書だけを抽出したいです。
- 請求書の中で金額のある請求書を上に表示し、0円の請求書を下に移動する方法を教えてください。
- みんなの回答 (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
お礼
fujillinさん 早々のアドバイスをいただきまして、ありがとうございます。 教えていただいた通りにやってみましたら、できました!! ほんとに助かりました。 ありがとうございます。 VBAって難しそうですが 私も勉強してみようと思います。 ほんとにほんとに ありがとうございました!!!