• 締切済み

【関数とVBA】教えてください。

EXCELの関数またはVBAについて教えてください。 【2月 受注明細一覧表】 番号 受注日   受注先    商品名  見積金額  請求金額 1  2/1 (株)○○○○  △△△△ ¥10,000-  ¥12,000- 2  2/3 (株)□□□□  ▲▲▲▲ ¥25,000-   3 4 ・ ・ ・ 私は、デザイン会社で経理をしています。 上記の様な受注明細一覧表を作成したのです。 月次で担当デザイナーから経理に報告してもらうのですが、 月をまたがる業務の場合、3月の一覧表にも記入しなければなりません。受注は2月でも作業終了が3月で、請求金額が 決定するのも3月という場合です。 1月/2月/3月/・・・とシートを分けています。 2月の一覧表から、請求金額が未記入の受注分のみを3月に反映させることが自動でできますでしょうか。 関数かVBAを使用するってことはわかるのですが、どうしていいのかわかりません。 回答お願い致します。

みんなの回答

  • qualheart
  • ベストアンサー率41% (1451/3486)
回答No.2

ツール→マクロ→Visual Basic Editorを選択し、起動した画面の左側エリアにあるツリーから、開いているBookの「ThisWorkbook」をダブルクリックし、表示されたウィンドウに以下ソースをコピーして保存してください。 実行はツール→マクロ→マクロで「ThisWorkbook.NewSheet」を選択して実行すればOKです。 実行は、前月のシートを表示した状態で行ってください。 VBを実行すると、シート名を入力するダイアログが表示されるので、作成するシート名を入力しOKすると、自動的にシートを作成し、必要なデータのみをコピーします。 ////以下VBAソース//// Sub NewSheet() i = ActiveSheet.Index sheetname = InputBox("シート名を入力してください。") Worksheets.Add After:=Worksheets(i) If sheetname = True Then Worksheets(i + 1).Name = sheetname End If For h = 1 To 6 Sheets(i + 1).Cells(1, h).Value = Sheets(i).Cells(1, h) Next b = 1 n = 2 Do While Sheets(i).Cells(n, 5) <> "" If Sheets(i).Cells(n, 6) = "" Then Sheets(i + 1).Cells(b + 1, 1).Value = b Sheets(i + 1).Cells(b + 1, 2).Value = Sheets(i).Cells(n, 2) Sheets(i + 1).Cells(b + 1, 3).Value = Sheets(i).Cells(n, 3) Sheets(i + 1).Cells(b + 1, 4).Value = Sheets(i).Cells(n, 4) Sheets(i + 1).Cells(b + 1, 5).Value = Sheets(i).Cells(n, 5) Sheets(i + 1).Cells(b + 1, 6).Value = Sheets(i).Cells(n, 6) b = b + 1 End If n = n + 1 Loop Sheets(i + 1).Columns("B:B").Select Selection.NumberFormatLocal = "m/d" Sheets(i + 1).Columns("E:F").Select Selection.NumberFormatLocal = "\#,##0;\-#,##0" Cells(1, 1).Select End Sub

noname#74514
質問者

お礼

ありがとうございます。 VBAソースまでのせていただき、とても参考になりました。 本当にありがとうございます。

  • mshr1962
  • ベストアンサー率39% (7417/18945)
回答No.1

「フィルタオプションの設定」を利用してみてください。 あたらしいシートに 請求金額 =">0" と入力。 3月のシートを選択して「データ」「フィルタ」「フィルタオプションの設定」 ■抽出先を「指定した範囲」にする。 ■リスト範囲を「2月のシート!A2:F1000」 ■抽出条件欄を「あたらしいシート!A1:A2」(請求金額とその下のセル) ■抽出範囲を「3月のシートの番号のセル」 でOKすれば抽出できます。

noname#74514
質問者

補足

回答ありがとうございます。 試してみたのですが、うまく作動しません。 「抽出した範囲にはフィールド名がないか、または無効なフィールドです」といわれました。 お手数おかけしますが、おわかりになりましたら教えてください。 よろしくお願い致します。

関連するQ&A