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.13ベストアンサー
- 回答日時:
自動追加バージョンです。
--------------------------------------------------------------------------------
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
--------------------------------------------------------------------------------
問題なくきちんと動作しました!
昨月のデータ6000件あまりもあっという間に全て処理できました。
本当に昨日からありがとう御座いました。
また、私の不毛な返答にもお付き合いいただき感謝します
今後はもっと勉強してまいります。
No.12
- 回答日時:
「原本」というシートが有りますが、これは各担当シートの原本(レイアウトは出来ていてデータの無いもの)ならば、担当者のシートが存在しない場合は自動で追加する事ももちろん出来ます。
必要ですか?No.10
- 回答日時:
もとの「For 元行 = 2 To Cells(Rows.Count, 1).End(xlUp).Row」が必要です。
出来れば聞くだけでなく、自分なりに何をやっているかを考えないと少しでも変わってしまうと判らなくて毎回聞かなければならなくなりますよ!
たとえば「Cells(Rows.Count, 1).End(xlUp).Row」何ですか?とかの質問ならば構いませんが、
「この行が不要ですか?」なんていうのを聞くと悲しくなってしまいます。
No.9
- 回答日時:
No.4 の回答への補足コメントで「デバッグ」ボタンを押したらどの行が黄色くなりますか?
その黄色い行の変数にカーソルを持って行ったときに表示される値も提示してください。
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.6
- 回答日時:
「For 元行 = 2 To Cells(Rows.Count, 1).End(xlUp).Row」も「For 元行 = 6 To Cells(Rows.Count, 1).End(xlUp).Row」に直して下さい。
また「【」と「】」は全角ですよね?
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.4
- 回答日時:
最後に書きましたが
「Const 元データシート名 As String = "元データ"」を
「Const 元データシート名 As String = "アポ一覧"」してもダメですか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 【困っています】VBA 追加処理の記述を教えてください。 1 2022/08/25 22:54
- Excel(エクセル) 【エクセル」 特定のセルで条件抽出した列を、別シートに上から詰めて表示したい。 8 2022/04/08 16:00
- Excel(エクセル) エクセルの条件付き書式 個人シートを参照して集計シートに色付けしたい 1 2023/06/22 00:39
- Visual Basic(VBA) EXCEL VBA 単語置き換え について質問です ブック名 ぶぶぶ シート名 ししし セル V3〜 3 2023/03/08 01:41
- Excel(エクセル) PowerQueryに詳しい方教えてください(Office365) 1 2022/07/24 21:11
- Visual Basic(VBA) エクセルについて教えてください。 3 2023/06/28 09:11
- Visual Basic(VBA) Excel VBA 最終行を取得しVlookup関数をコピーする方法をコーディングで教えてください。 3 2023/05/11 13:14
- Excel(エクセル) エクセルシートのデータを1列飛ばしで別ブックのシートに貼り付けるマクロが知りたい 2 2023/06/05 22:37
- Excel(エクセル) ある数値に対して、値を返す数式についてです 2 2022/09/13 22:06
- Visual Basic(VBA) 【困っています2】VBA 追加処理の記述を教えてください。 2 2022/08/26 11:42
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAで繰り返しコピーしながら下...
-
ExcelのVlookup関数の制限について
-
オートフィルタ使用時にCOUNTIF...
-
文字の色も参照 VLOOKUP
-
【条件付き書式】countifsで複...
-
Excel の複数シートの列幅を同...
-
エクセルで横並びの複数データ...
-
エクセルVBA 行追加時に自...
-
エクセルの列の限界は255列以上...
-
エクセルの保護で、列の表示や...
-
VLOOKアップ関数の結果の...
-
【VBA】ピボットテーブルを既存...
-
excel 複数のシートの同じ場所...
-
Excelでの並べ替えを全シートま...
-
エクセル マクロ 標準モジュー...
-
エクセル関数に詳しい方、教え...
-
Excel VBA ピボットテーブルに...
-
SUMPRODUCTにて別シートのデー...
-
スプレッドシートでindexとIMPO...
-
シートをまたぐ条件付き書式に...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ExcelのVlookup関数の制限について
-
文字の色も参照 VLOOKUP
-
オートフィルタ使用時にCOUNTIF...
-
エクセルの保護で、列の表示や...
-
VBAで繰り返しコピーしながら下...
-
Excel の複数シートの列幅を同...
-
【VBA】シート名と見出しが一致...
-
エクセルで横並びの複数データ...
-
エクセルの列の限界は255列以上...
-
Excelでの並べ替えを全シートま...
-
【条件付き書式】countifsで複...
-
VLOOKアップ関数の結果の...
-
Excel VBA ピボットテーブルに...
-
エクセル マクロ 標準モジュー...
-
Excelで、ファイル名、シート名...
-
エクセルで、チェックボックス...
-
【VBA】複数のシートの指定した...
-
エクセルVBAで、ある文字を含ん...
-
スプレッドシートでindexとIMPO...
-
SUMPRODUCTにて別シートのデー...
おすすめ情報
早速おしえてくださり、ありがとうございます。
ですが、現在教えていただいたフローとほぼ等しい作業を行っており工数的に負担ですため、簡略化したいと思っております。
ありがとうございます。
お答えいたします。
①〜④
元データのcsvを反映ブックのシートに貼り付けるまではマンパワーでもかまわないと思っています。
ですので、反映ブックにデータ用シート(仮)を用意してそこから自動抽出反映を行いたいです。
⑤ VBAのコードは反映ブックに有るとして考えて良いのでしょうか?
上記のルール決めにしたいのでコードは反映ブックにお願いいたします
⑥ 二重取り込んでしまったときは「日付」「案件名」「価格」をキーにして削除は可能でしょうか?
削除可能です。
何卒よろしくお願いいたします
お返事が遅くなり申し訳ございませんでした
教えてくださったcodeを使用しようと試みたのですが
私の説明不足できちんと動きませんでした
恐らく、反映させたいセルの位置が違うことや、実行ファイルが違っていたのかもしれません。
添付画像のようなシート内構成です
アポ一覧というシートが元データです。
反映したいシートは担当者の名前分あります。
こういった構成で、アポ一覧シートからマクロ実行を行いたいです。
何卒、宜しくお願い致します。
添付のように
インデックスエラーになってしまいます。
先ほどの添付ファイルのように
インデックスのセルが5行目だからでしょうか
何度も申し訳ございません。
実行時にエラーになるデバック表示は
添付のとおりです。
また
頭文字は【A】【P】【H】で間違いありません
お願いいたします
シートのタブ構成も添付します。
何卒、宜しくお願い致します。
No.6 の訂正はなしでよろしいでしょうか。
それとも、そもそもそのcodeは必要ないのでしょうか
アポ一覧の一は漢数字で間違いございません。
申し訳ございません。
デバックで反転されるコードは
With Sheets(Cells(元行, 2).Value)
上記の部分です
反映させるためのシート名に問題があるのでしょうか。
インデックスが有効範囲にありません (エラー 9)
という表示が、そもそもないものを参照して起きてしまっているのかなと思ったのですが・・・
>>アポ一覧シートのその行のB列の値(担当者名)のシートは存在しますか?
「元行=2」と表示され、その担当者名のシートはありませんでした。
>>担当者のシートが存在しない場合は自動で追加する事ももちろん出来ます。必要ですか?
はい、ぜひ追加をお願いしたいです。