Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
  • ベストアンサー

エクセルの関数・VBAについて教えて下さい。

貸借対照表をエクセルで作成しています。 シート1には、各科目に残高を入力し、それぞれの小計・合計を算出するように関数を組んでいます。 シート2には、出力用の表を作成しており、シート1を元に表に科目と残高、合計を反映するように作成中です。 分からない点は、シート2に金額等を反映させる際に、シート1で0円だった科目を反映させないようにするにはどうしたら良いでしょうか?また、その分の行を空白にせずに残高のある科目を反映させるようにするにはどうしたら良いでしょうか? できれば関数で設定したいのですが、関数では上記処理の設定ができなければ、VBAでの設定を教えてください。 よろしくお願いします。

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

  • ベストアンサー
  • rukuku
  • ベストアンサー率42% (401/933)
回答No.2

こんにちは VBAがOKならば、方法は2つあります。 1.1行ずつチェック 単純に一行ずつ判断しながらコピーを行います。 Sumple1 がそのサンプルプログラムです。 2.オートフィルタ オートフィルタで金額が0でない科目だけを抜き出します。 これをコピーしてSheet2に貼り付けると、抜き出された結果だけが張り付きます。 Sumple2 がそのサンプルプログラムです。ほとんどマクロの記録です。 サンプルプログラムは、#1のtom04さんの図を対象に作ってあります。 Sub Sumple1()  Dim Line1 As Long  Dim Line2 As Long  Dim LastLine As Long    ThisWorkbook.Activate  Worksheets("Sheet2").Select  Cells.ClearContents  Range("A1") = "科目"  Range("B1") = "日付"  Range("C1") = "残高"    LastLine = Worksheets("Sheet1").Range("A65536").End(xlUp).Row    Line2 = 2  For Line1 = 2 To LastLine   If Worksheets("Sheet1").Cells(Line1, "C") <> 0 Then    Cells(Line2, "A") = Worksheets("Sheet1").Cells(Line1, "A")    Cells(Line2, "B") = Worksheets("Sheet1").Cells(Line1, "B")    Cells(Line2, "C") = Worksheets("Sheet1").Cells(Line1, "C")    Line2 = Line2 + 1   End If  Next End Sub Sub Sumple2()   Sheets("Sheet1").Select   Range("A1").Select   Selection.AutoFilter   Selection.AutoFilter Field:=3, Criteria1:="<>0", Operator:=xlAnd   Cells.Select   Selection.Copy   Sheets("Sheet2").Select   Cells.Select   ActiveSheet.Paste   Range("A1").Select   Sheets("Sheet1").Select   Selection.AutoFilter   Application.CutCopyMode = False   Range("A1").Select End Sub

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

その他の回答 (5)

  • layy
  • ベストアンサー率23% (292/1222)
回答No.6

残高、合計を反映するように作成中 シート2に金額を反映させる際に 0円だった科目を反映させないように 残高のある項目を反映させるように 『反映』で表現している対象が、どこを?どう?、が伝わってないのでは?。 貸借対照表がどういうものか知らないと、回答は普通のエクセルの観点で答えるしかない。 左に資産、右に総資本、イメージも伝わっていないと思われます。 シート1の相殺分はシート2に書きたくないし、それも上につめながら表示したいならVBAのが有効です。

すると、全ての回答が全文表示されます。
  • layy
  • ベストアンサー率23% (292/1222)
回答No.5

貸借対照表を知らない人は答えられないし、 答えもピントがズレると思います。 貸借対照表というからには、 シート1の項目、配置がどうなっているかはあらかた決まっていますよね?。 事例を提示してあげないと意図が伝わらないと思われます。 参考) 数量がゼロでない行だけをコピーして別のシートに貼り付けるには? http://www.asahi-net.or.jp/~zn3y-ngi/YNxv99118.html こういうのがどのくらい適用、応用できるか、です。

すると、全ての回答が全文表示されます。
  • Azzz___
  • ベストアンサー率40% (9/22)
回答No.4

こんにちは。 他の回答でもありましたが、 質問の内容から、 流れは大雑把に把握できた状態で、その後細かいところをどうしているのかが、 ちょっと見えずらいので、その辺を詳しく説明すれば、より的を得た回答に近づけるかと思います。 私がイメージしたところは ・シート1 科目ごとに明細が縦にずらーっと入力されている ・シート2 シート1の各科目の合計、残高が関数(シート1のデータ使用)によって表示されている というイメージですがいかがでしょうか? もし、上記の場合が正しいとして 関数またはVBAでも必要な情報は ・セルの位置(シート1の構成、シート2の構成) が必要になると思います。 (もっともこの段階ではそれだけで十分かどうかは分かりませんが) 質問者さんの意図には下記のページが参考になるかもです。 「Excelで関数だけを使って月別総括集計表を作る1」 ただしこちらのページはまだ更新途中?のようで関数の設定など全て分かりませんが。 はずしてたらすみません。

参考URL:
http://global-wing.com/activity/excel_tmpl_tukibetu1.html
すると、全ての回答が全文表示されます。
  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.3

>その分の行を空白にせずに残高のある科目を反映させるようにするにはどう この意味はどういう意味ですか? 多分代替できる計数のセルの計数かもしれないが、そんなの部外者にはわからないのfでは? しつれい実例でも挙げて聞かないと判らない。全般に貸借対照表は、エクセルでは大きなテーマで、その一部のことなのだろうが、その点の実例や、文章説明をしないと質問にならない。 >シート1で0円だった科目を反映させないようにするにはどうしたら この意味もあいまい。 シート2の表範囲のすべてのセルについて、関数を入れたセルで0の場合を空白に見せたいのか? 在る1セルでの話か? 後者では =IF(OR(Sheet1!A1=0,Sheet1!A1=""),"",・・・・) の話なら、こんなのはエクセルの常識だ。貸借対照表などという、大きなテーマをエクセルに作ろうと言う人が、なぜ質問するのかな。質問の意味を読者はどう取るか推測して質問のこと。

すると、全ての回答が全文表示されます。
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.1

こんにちは! Sheetの配列が判らないので勝手に↓のような配置でざっくりやってみました。 Sheet2のA2セルに =IF(SUMPRODUCT((Sheet1!$A$2:$A$1000<>"")*(Sheet1!$C$2:$C$1000<>0))<ROW(A1),"",INDEX(Sheet1!A$2:A$1000,SMALL(IF(Sheet1!$C$2:$C$1000<>0,ROW($A$1:$A$999)),ROW(A1)))) これは配列数式になってしまいますので、この画面からSheet2のA2セルにコピー&ペーストする場合は 貼り付け後、数式バー内で一度クリックします。 編集可能になりますので、Shift+Ctrlキーを押しながらEnterキーで確定! 数式の前後に{ }マークが入り配列数式になります。 これを列方向と行方向にオートフィルでコピーすると画像のような感じになります。 尚、日付列のセルの表示形式は「日付」にしておきます。 実際のSheet1の配置は違うと思いますので、あくまでヒントとしてです。 参考になれば良いのですが。m(__)m

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

関連するQ&A