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

VBA勉強中のため、力を貸していただけますと助かります。

日次で吐き出されるcsvデータをexcelブックに読み込み、条件によって抽出、シートに反映させるまでを自動化したいのですが、どのようにコードを組めばよいのかご教授いただけないでしょうか。

元データ(csv)
A列 B列 C列 D列
日付 担当者名 案件名 価格

反映ブック(excel)
※ブックにはcsvの担当者名ごとにシートがあります。

A列 B列 C列 D列 E列 F列
日付 案件名 価格 計上数【A】 計上数【P】 計上数【H】

反映させたいこと
① 元データの担当者名(B列)をexcelブックにある同じ担当者名シートに反映させたい
-1.反映させる内容は「日付」A列と「案件名」B列

②案件名の頭文字に【A】が付いているものは、D列の「計上数【A】」セルに「1」(数値)を入力させる。
同じように、案件名の頭文字に【P】が付いているものは、E列の「計上数【P】」セルに「1」(数値)を入力させる。
案件名の頭文字に【H】が付いているものは、F列の「計上数【H】」セルに「1」(数値)を入力させる。

※担当者は40名程度おり、日次のデータ数としまして200〜300ありますため、なんとか自動化したいです。

どうぞよろしくお願いいたします。

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

  • 早速おしえてくださり、ありがとうございます。
    ですが、現在教えていただいたフローとほぼ等しい作業を行っており工数的に負担ですため、簡略化したいと思っております。

    No.1の回答に寄せられた補足コメントです。 補足日時:2017/12/08 19:24
  • ありがとうございます。
    お答えいたします。

    ①〜④
    元データのcsvを反映ブックのシートに貼り付けるまではマンパワーでもかまわないと思っています。
    ですので、反映ブックにデータ用シート(仮)を用意してそこから自動抽出反映を行いたいです。

    ⑤ VBAのコードは反映ブックに有るとして考えて良いのでしょうか?

    上記のルール決めにしたいのでコードは反映ブックにお願いいたします

    ⑥ 二重取り込んでしまったときは「日付」「案件名」「価格」をキーにして削除は可能でしょうか?

    削除可能です。

    何卒よろしくお願いいたします

    No.2の回答に寄せられた補足コメントです。 補足日時:2017/12/08 19:33
  • お返事が遅くなり申し訳ございませんでした
    教えてくださったcodeを使用しようと試みたのですが
    私の説明不足できちんと動きませんでした
    恐らく、反映させたいセルの位置が違うことや、実行ファイルが違っていたのかもしれません。
    添付画像のようなシート内構成です

    アポ一覧というシートが元データです。
    反映したいシートは担当者の名前分あります。

    こういった構成で、アポ一覧シートからマクロ実行を行いたいです。

    何卒、宜しくお願い致します。

    「教えて下さい!データの自動抽出反映をマク」の補足画像3
    No.3の回答に寄せられた補足コメントです。 補足日時:2017/12/09 17:50
  • 添付のように
    インデックスエラーになってしまいます。

    先ほどの添付ファイルのように
    インデックスのセルが5行目だからでしょうか

    「教えて下さい!データの自動抽出反映をマク」の補足画像4
    No.4の回答に寄せられた補足コメントです。 補足日時:2017/12/09 18:21
  • 何度も申し訳ございません。
    実行時にエラーになるデバック表示は
    添付のとおりです。

    また
    頭文字は【A】【P】【H】で間違いありません

    お願いいたします

    「教えて下さい!データの自動抽出反映をマク」の補足画像5
    No.5の回答に寄せられた補足コメントです。 補足日時:2017/12/09 18:33
  • シートのタブ構成も添付します。
    何卒、宜しくお願い致します。

    「教えて下さい!データの自動抽出反映をマク」の補足画像6
      補足日時:2017/12/09 18:37
  • No.6 の訂正はなしでよろしいでしょうか。
    それとも、そもそもそのcodeは必要ないのでしょうか

    アポ一覧の一は漢数字で間違いございません。

    No.8の回答に寄せられた補足コメントです。 補足日時:2017/12/09 19:13
  • 申し訳ございません。

    デバックで反転されるコードは
    With Sheets(Cells(元行, 2).Value)
    上記の部分です

    反映させるためのシート名に問題があるのでしょうか。

    インデックスが有効範囲にありません (エラー 9)

    という表示が、そもそもないものを参照して起きてしまっているのかなと思ったのですが・・・

    No.10の回答に寄せられた補足コメントです。 補足日時:2017/12/09 19:56
  • >>アポ一覧シートのその行のB列の値(担当者名)のシートは存在しますか?
    「元行=2」と表示され、その担当者名のシートはありませんでした。

    >>担当者のシートが存在しない場合は自動で追加する事ももちろん出来ます。必要ですか?
    はい、ぜひ追加をお願いしたいです。

    No.12の回答に寄せられた補足コメントです。 補足日時:2017/12/09 20:19

A 回答 (13件中1~10件)

自動追加バージョンです。


--------------------------------------------------------------------------------
Sub Sample()
Const 元データシート名 As String = "アポ一覧"
Dim 元行 As Long
Dim 先行 As Long
Dim ワークシート As Worksheet
Dim シート有 As Boolean
Dim シート名 As String
Sheets(元データシート名).Select
For 元行 = 2 To Cells(Rows.Count, 1).End(xlUp).Row
シート有 = False
シート名 = Cells(元行, 2).Value
For Each ワークシート In Worksheets
If ワークシート.Name = シート名 Then シート有 = True
Next
If シート有 = False Then
Sheets("原本").Copy After:=Sheets(Sheets.Count)
ActiveSheet.Name = シート名
Sheets(元データシート名).Select
End If
With Sheets(シート名)
先行 = .Cells(Rows.Count, 1).End(xlUp).Row + 1
.Cells(先行, 1).Value = Cells(元行, 1).Value
.Cells(先行, 2).Value = Cells(元行, 3).Value
.Cells(先行, 3).Value = Cells(元行, 4).Value
Select Case Left(Cells(元行, 3).Value, 2)
Case "【A"
.Cells(先行, 4).Value = 1
Case "【P"
.Cells(先行, 5).Value = 1
Case "【H"
.Cells(先行, 6).Value = 1
End Select
End With
Next
End Sub
--------------------------------------------------------------------------------
    • good
    • 0
この回答へのお礼

問題なくきちんと動作しました!
昨月のデータ6000件あまりもあっという間に全て処理できました。
本当に昨日からありがとう御座いました。

また、私の不毛な返答にもお付き合いいただき感謝します
今後はもっと勉強してまいります。

お礼日時:2017/12/09 21:24

「原本」というシートが有りますが、これは各担当シートの原本(レイアウトは出来ていてデータの無いもの)ならば、担当者のシートが存在しない場合は自動で追加する事ももちろん出来ます。

必要ですか?
この回答への補足あり
    • good
    • 0

エラー時に変数「元行」には何が入っていますか?


アポ一覧シートのその行のB列の値(担当者名)のシートは存在しますか?
存在しなければ、もちろんエラーします。
    • good
    • 0

もとの「For 元行 = 2 To Cells(Rows.Count, 1).End(xlUp).Row」が必要です。



出来れば聞くだけでなく、自分なりに何をやっているかを考えないと少しでも変わってしまうと判らなくて毎回聞かなければならなくなりますよ!
たとえば「Cells(Rows.Count, 1).End(xlUp).Row」何ですか?とかの質問ならば構いませんが、
「この行が不要ですか?」なんていうのを聞くと悲しくなってしまいます。
この回答への補足あり
    • good
    • 0

No.4 の回答への補足コメントで「デバッグ」ボタンを押したらどの行が黄色くなりますか?


その黄色い行の変数にカーソルを持って行ったときに表示される値も提示してください。
    • good
    • 0

まさかとは思いますが、


シート名の「アポ一覧」ですが「一」は漢数字の「一」でしょうか?
「ー」のような長音記号ではないですよね?
この回答への補足あり
    • good
    • 0

No.6 の修正



以下は不要です。
「For 元行 = 2 To Cells(Rows.Count, 1).End(xlUp).Row」も「For 元行 = 6 To Cells(Rows.Count, 1).End(xlUp).Row」に直して下さい。

※ アポ一覧シートと担当者名シートのレイアウトを見間違えていました。
    • good
    • 0

「For 元行 = 2 To Cells(Rows.Count, 1).End(xlUp).Row」も「For 元行 = 6 To Cells(Rows.Count, 1).End(xlUp).Row」に直して下さい。



また「【」と「】」は全角ですよね?
    • good
    • 0

あと1つ心配なのは、案件名の頭文字ですが「【A】」「【P】」「【H】」の3つですよね?


「A」「P」「H」ではないですよね?「A」「P」「H」ならば Select 文を以下のように直して下さい。
--------------------------------------------------------------------------------
Select Case Left(Cells(元行, 3).Value, 1)
Case "A"
.Cells(先行, 4).Value = 1
Case "P"
.Cells(先行, 5).Value = 1
Case "H"
.Cells(先行, 6).Value = 1
End Select
--------------------------------------------------------------------------------
この回答への補足あり
    • good
    • 0

最後に書きましたが


「Const 元データシート名 As String = "元データ"」を
「Const 元データシート名 As String = "アポ一覧"」してもダメですか?
この回答への補足あり
    • good
    • 0

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