アプリ版:「スタンプのみでお礼する」機能のリリースについて

仕事で、データ整理を任されたのですが、量が膨大で途方に暮れています
おわかりになる方いましたら、教えてください。

現在
会社    勘定項目    売掛    買い掛け   備考 
○○商事  備品購入   12000    50000    お得意様
○○建設  施設増設          30000    新設
(株)○○  納品     20000           7/10入金

のようなデータがマスターシートに2000行ぐらいあります。
また、さらにデータを追加していく状態です。

これを、○○建設のデータだけを別シートにコピーするのは
http://kokodane.com/2013_waza_053.htm
こちらのサイト等を拝見し、できるようになったのですが、さらに追加された
○○建設のデータは手入力で、各シートに入力している状態です。
1ブックの中に、会社ごとが約10シート、勘定項目ごとが約10シート、備考ごとが約10シート、マスターシートがひとつあります。

これをマスターシートにあたらしく、○○建設のデータを一行挿入追加したら、
自動で、会社ごとの○○建設のページに自動で一行追加挿入され、入力されるようにというのは
できるのでしょうか?
また、それが備考欄が「新設」であれば、備考ごとの新設シートにも自動で追加されるようには
可能でしょうか?

専用ソフトを使ったほうがいいのは重々承知ですが、会社から許可が出ない状態です
申し訳ありませんが、アドバイスお願いできますでしょうか。

質問者からの補足コメント

  • 補足ですが、ほとんど初心者に近いです。
    パソコン自体は10年ほど触ってますが、office系は書類作る程度です。
    解決策のご提案をいただけましたら、よろしくお願いいたします。

      補足日時:2016/06/01 16:21

A 回答 (4件)

こんばんは!



VBAになりますが、一例です。

>自動で、会社ごとの○○建設のページに自動で一行追加挿入され・・・

ユーザーフォームを使えば簡単にできると思いますが、
ユーザーフォーム作成そのものに手間がかかりますので、
単純に一旦データを消去し、オートフィルタで新たにコピー&ペーストする方法にしてみました。

>また、それが備考欄が「新設」であれば、備考ごとの新設シートにも自動で追加されるようには

の部分で「7/10入金」のような備考Sheetも必要なのかどうか判らないので
とりあえず「会社名」だけのシート操作をやってみました。
「マスター」シートはシート見出しの一番左側に配置しておいてください。

Alt+F11キー → メニュー → 挿入 → 標準モジュール → VBE画面のカーソルが点滅しているところに
↓のコードをコピー&ペースト → Excel画面に戻り(VBE画面を閉じて)マクロを実行してみてください。
(Alt+F8キー → マクロ → マクロ実行です)

Sub Sample1() 'この行から//
Dim i As Long, k As Long, sN As String
Dim wS As Worksheet, myFlg As Boolean
Application.ScreenUpdating = False
Worksheets.Add after:=Worksheets(Worksheets.Count)
Set wS = Worksheets(Worksheets.Count)
With Worksheets("マスター") '←「マスター」は「マスターシート」の実際のSheet名に!★
.Range("A:A").AdvancedFilter Action:=xlFilterCopy, copytorange:=wS.Range("A1"), unique:=True
For i = 2 To wS.Cells(Rows.Count, "A").End(xlUp).Row
sN = wS.Cells(i, "A")
For k = 2 To Worksheets.Count
If Worksheets(k).Name = sN Then
myFlg = True
Exit For
End If
Next k
If myFlg = False Then
Worksheets.Add after:=Worksheets(Worksheets.Count - 1)
Worksheets(Worksheets.Count - 1).Name = sN
End If
Worksheets(sN).Cells.Clear
With .Range("A1").CurrentRegion
.AutoFilter field:=1, Criteria1:=sN
.SpecialCells(xlCellTypeVisible).Copy Worksheets(sN).Range("A1")
End With
Worksheets(sN).Columns.AutoFit
myFlg = False
Next i
.AutoFilterMode = False
End With
Application.DisplayAlerts = False
wS.Delete
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub 'この行まで//

※ 最初のマクロ実行では会社名が存在しない場合、シートを追加するようにしています。
Sheet順が意図しない順になっているかもしれません。
その場合はSheet見出しのシートを移動させてください。

※ 「マスター」シートのデータ変更があるたびに
マクロを実行する必要があります。m(_ _)m
    • good
    • 1
この回答へのお礼

大変丁寧にありがとうございます。
ここまで作っていただき、本当にありがとうございます
昨日、他の回答者様からVBAを教えてもらい、やってみて
今回tom04さんがここまで作ってくれるのにどれだけ大変か、
全部ではないですが、わかりました
しかもここまで丁寧な説明、本当にうれしく思います。
これを使って、新規ブックで実際に実行してみて、うまく活用できるようにやってみます。
ありがとうございました。

お礼日時:2016/06/02 08:15

まずは、発想を変えましょう。


マスターシートにひたすらデータを入力します。
抽出するためのシートは、一枚です。
仮に シート名 抽出
  A     B       C      D      E
1 会社    勘定項目    売掛    買い掛け   備考
2○○建設

5 会社    勘定項目    売掛    買い掛け   備考 
と云ったように、1行目に抽出する条件の項目
2行目に、抽出する 内容を記述する。
下の方5行目くらいに抽出したい項目

あとは、リボン データ 中ほどのフィルターの詳細設定
からフィルターオプションを使って希望のデータを抽出します。
http://www.eurus.dti.ne.jp/yoneyama/Excel/filter …
こちらに詳しく説明してあります。
マクロの記録で、自動化も出来ます。
勘定科目で抽出したければ、会社名を空白で、勘定科目の部分に
抽出する内容を入れて、フィルターオプションを実行
もちろん、組み合わせで抽出も可能です。
シートは3枚で済みます。
シートをたくさん作ると移動するだけでも大変でしょう。
2行目に入力したら、5行目以下にすぐにデータが抽出されたら
便利だと思いませんか。
    • good
    • 1
この回答へのお礼

ご返信ありがとうございます。
ですが、○○建設だけで100行以上ある状態ですので、ちょっとイメージがわきません。
お勧めいただいたサイト、ぱっと見では理解できなかったので
今日一日、読んでやってみたいと思います。

お礼日時:2016/06/02 08:02

>こちらのサイト等を拝見し、できるようになったのですが


ならば、該当するデータの個数が変わった場合を判断し、
(当方、VBA苦手なので適当なセルに数式を入力しますが(データベース関数かな))
前の抽出データをすべて消して、抽出しなおせばよいのでは?
    • good
    • 1
この回答へのお礼

ご返答ありがとうござます
現状、入力した1行をコピーして、必要シートにペーストして作業しております
なにぶん、作業がたくさんなもので、、、

大体一日に、マスターシートに20ー30行ほど入力しており、それを約40シートに手入力で反映しております。
これを私程度の能力で、簡略できないものかと思いまして。
皆様のお返事を待ってる間にVBAをちらっと見てみて、例題サンプルをコピーしてやってみましたが、
大変難しいですね。
マクロも簡単なものだけやってみましたが、こちらは私のやり方が悪いのでしょうけども、ちょっと望んでるものとずれておりました。
読んでいただき、ご返答いただきありがとうございました。

お礼日時:2016/06/01 18:58

>>これをマスターシートにあたらしく、○○建設のデータを一行挿入追加したら、


自動で、会社ごとの○○建設のページに自動で一行追加挿入され、入力されるようにというのは
できるのでしょうか?

私は、プログラマーとして簡単なエクセルVBAのプログラムを作って、あるシートのデータを別シートにコピーするなどの処理をさせています。
考え方としては、入力が完了したシートの行を上から下にサーチして、目的の行が見つかれば、別のシートに追加するって処理をExcelVBAというプログラムで記述します。

この処理の欠点は、同じ処理を2回行うと、それぞれ2件のデータが別シートに追加されることです。
それを防ぐには、例えば、各行のデータに登録日付欄などをもっておいて、コピー先のシートで同じ日付のデータ行を事前に削除したあとで、コピーする処理を行うようにします。

上記のようなプログラムを、シートごとに作って、それを順番に実行すれば、マスターシートに入力した当日分のデータ行を、別シートにコピーすることが可能になります。

ちなみに、別シートにコピーする例のサイトを見ましたけど、私はそのサイトの方法でコピーしたことありませんね。ちょっと面倒な処理が必要なばあい、いろいろと追加処理が後から必要になることが多いので、ExcelVBAで作成しています。

結論として、可能か、不可能か?と問われるなら「可能」だという答えになります。
ただし、エクセルに内蔵されているExcelVBAを使ってプログラミングする能力を持っていることが条件になります。
    • good
    • 1
この回答へのお礼

迅速なアドバイス、ありがとうございました。
私の力量も書いておけばよかったですね、、、、失礼しました。
プログラミングの能力は残念ながら持っていません。
現実的には不可能ってかんじですかね、、、。

お礼日時:2016/06/01 16:11

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!