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
- 回答日時:
>どのようにコードを組めばよいのかご教授いただけないでしょうか。
CSVは名前でフィルターしたら
そのまま一時的なシートにコピペしたらどうかな。
でその一時的シートの右方向のセルに関数で②の整形を
させておけば、それを各自のシートに貼るだけだから
名前の分フィルターをループさせながら
コピペを繰り返すだけで
そんな難しくないコードになるんじゃないでしょうか?
No.2
- 回答日時:
いくつか確認したいことが有ります
① 元データは「,」区切りでしょうか?
② 元データにはタイトル行はありますか?
③ 元データと反映ブックは同じフォルダーに有るのでしょうか?
④ 元データの指定はどうするのでしょうか?
⑤ VBAのコードは反映ブックに有るとして考えて良いのでしょうか?
⑥ 二重取り込んでしまったときは「日付」「案件名」「価格」をキーにして削除は可能でしょうか?
No.3
- 回答日時:
300件位ならば以下のようなもので良いかと…
--------------------------------------------------------------------------------
Sub Sample()
Const 元データシート名 As String = "元データ"
Dim 元行 As Long
Dim 先行 As Long
Sheets(元データシート名).Select
For 元行 = 2 To Cells(Rows.Count, 1).End(xlUp).Row
With Sheets(Cells(元行, 2).Value)
先行 = .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
--------------------------------------------------------------------------------
※ 元データの有るシート名に合わせて「Const 元データシート名 As String = "元データ"」を修正してください。
No.4
- 回答日時:
最後に書きましたが
「Const 元データシート名 As String = "元データ"」を
「Const 元データシート名 As String = "アポ一覧"」してもダメですか?
No.5
- 回答日時:
あと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
--------------------------------------------------------------------------------
No.6
- 回答日時:
「For 元行 = 2 To Cells(Rows.Count, 1).End(xlUp).Row」も「For 元行 = 6 To Cells(Rows.Count, 1).End(xlUp).Row」に直して下さい。
また「【」と「】」は全角ですよね?
No.7
- 回答日時:
No.6 の修正
以下は不要です。
「For 元行 = 2 To Cells(Rows.Count, 1).End(xlUp).Row」も「For 元行 = 6 To Cells(Rows.Count, 1).End(xlUp).Row」に直して下さい。
※ アポ一覧シートと担当者名シートのレイアウトを見間違えていました。
No.9
- 回答日時:
No.4 の回答への補足コメントで「デバッグ」ボタンを押したらどの行が黄色くなりますか?
その黄色い行の変数にカーソルを持って行ったときに表示される値も提示してください。
No.10
- 回答日時:
もとの「For 元行 = 2 To Cells(Rows.Count, 1).End(xlUp).Row」が必要です。
出来れば聞くだけでなく、自分なりに何をやっているかを考えないと少しでも変わってしまうと判らなくて毎回聞かなければならなくなりますよ!
たとえば「Cells(Rows.Count, 1).End(xlUp).Row」何ですか?とかの質問ならば構いませんが、
「この行が不要ですか?」なんていうのを聞くと悲しくなってしまいます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excel の複数シートの列幅を同...
-
文字の色も参照 VLOOKUP
-
エクセルの保護で、列の表示や...
-
VBAで繰り返しコピーしながら下...
-
エクセルの列の限界は255列以上...
-
ExcelのVlookup関数の制限について
-
Excelでの並べ替えを全シートま...
-
SUMPRODUCTにて別シートのデー...
-
Excelに自動で行の増減をしたい...
-
Excel VBA ピボットテーブルに...
-
エクセルで、チェックボックス...
-
エクセル マクロ 標準モジュー...
-
エクセル機能 オートフィルター
-
エクセルVBAでエラーがでます。
-
【マクロ】対象データを別シー...
-
Excel 複数シートから条件にあ...
-
Excelのセルの色を変えた行(す...
-
EXCEL VBAのコンボボックスに取...
-
別シートに成約をボタン1つで転...
-
エクセル複数シートのデータを...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ExcelのVlookup関数の制限について
-
エクセルの保護で、列の表示や...
-
文字の色も参照 VLOOKUP
-
Excel の複数シートの列幅を同...
-
VBAで繰り返しコピーしながら下...
-
【条件付き書式】countifsで複...
-
エクセル マクロ 標準モジュー...
-
エクセルの列の限界は255列以上...
-
Excelでの並べ替えを全シートま...
-
エクセルで、チェックボックス...
-
エクセルマクロを教えてほしい...
-
SUMPRODUCTにて別シートのデー...
-
Excel VBA ピボットテーブルに...
-
エクセルのブック分割マクロを...
-
【VBA】複数のシートの指定した...
-
excel 複数のシートの同じ場所...
-
Excelに自動で行の増減をしたい...
-
スプレッドシートでindexとIMPO...
-
エクセルで横並びの複数データ...
-
エクセル複数シートのデータを...
おすすめ情報
早速おしえてくださり、ありがとうございます。
ですが、現在教えていただいたフローとほぼ等しい作業を行っており工数的に負担ですため、簡略化したいと思っております。
ありがとうございます。
お答えいたします。
①〜④
元データのcsvを反映ブックのシートに貼り付けるまではマンパワーでもかまわないと思っています。
ですので、反映ブックにデータ用シート(仮)を用意してそこから自動抽出反映を行いたいです。
⑤ VBAのコードは反映ブックに有るとして考えて良いのでしょうか?
上記のルール決めにしたいのでコードは反映ブックにお願いいたします
⑥ 二重取り込んでしまったときは「日付」「案件名」「価格」をキーにして削除は可能でしょうか?
削除可能です。
何卒よろしくお願いいたします
お返事が遅くなり申し訳ございませんでした
教えてくださったcodeを使用しようと試みたのですが
私の説明不足できちんと動きませんでした
恐らく、反映させたいセルの位置が違うことや、実行ファイルが違っていたのかもしれません。
添付画像のようなシート内構成です
アポ一覧というシートが元データです。
反映したいシートは担当者の名前分あります。
こういった構成で、アポ一覧シートからマクロ実行を行いたいです。
何卒、宜しくお願い致します。
添付のように
インデックスエラーになってしまいます。
先ほどの添付ファイルのように
インデックスのセルが5行目だからでしょうか
何度も申し訳ございません。
実行時にエラーになるデバック表示は
添付のとおりです。
また
頭文字は【A】【P】【H】で間違いありません
お願いいたします
シートのタブ構成も添付します。
何卒、宜しくお願い致します。
No.6 の訂正はなしでよろしいでしょうか。
それとも、そもそもそのcodeは必要ないのでしょうか
アポ一覧の一は漢数字で間違いございません。
申し訳ございません。
デバックで反転されるコードは
With Sheets(Cells(元行, 2).Value)
上記の部分です
反映させるためのシート名に問題があるのでしょうか。
インデックスが有効範囲にありません (エラー 9)
という表示が、そもそもないものを参照して起きてしまっているのかなと思ったのですが・・・
>>アポ一覧シートのその行のB列の値(担当者名)のシートは存在しますか?
「元行=2」と表示され、その担当者名のシートはありませんでした。
>>担当者のシートが存在しない場合は自動で追加する事ももちろん出来ます。必要ですか?
はい、ぜひ追加をお願いしたいです。