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

何をどうすればよいのか解らず。。お力を貸していただきたいです。

マスターのリストがあり、全部で36000行くらいあります。
カラムはA列~I列まであり、A~F列まではすでにデータが入っています。

各項目は
A列 B列 C列 D列 E列 F列 G列 H列 I列
フラグ1 フラグ2 フラグ3 No 商品 担当 結果 個数 注意事項

F列の担当者は全部で10名程度います。
担当者10名に36000行全てのデータが入ったリストを配布し、
自分の担当分の行を確認し内容に応じてG~I列を入力していきます。
(内容によっては何も入力しない場合もあります)

最終的に担当者ごとにブックが出来上がるのですが
配布前のリストの同じNoの行にG列~I列を上書きしてそれぞれの担当分の結果をマージして保存したいです。

VBAを作成するときに常に同じような内容を検索し、参考にさせていただき編集していたのですが
今回同じような内容のものが見当たらず、どのように記載すればよいのか解らず困ってしまいました。

添付は配布元のリストです。
どなたかお力添えいただけると嬉しいです。よろしくお願いいたします。

「【VBA】特定列に文字が入っていたらその」の質問画像

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

  • ご確認いただきありがとうございます。
    10名のファイルを1つのフォルダに集めて一度に処理する予定です。
    ファイル名は名前_mmddにする予定なので問題ないかと思います。

    本題部分ですが
    表組みの変更ななく固定ですが
    F列担当者部分は最初空欄で後から記入したりする場合があるため固定では無い想定です。
    肝心な情報が抜けており申し訳有りません。

    No.1の回答に寄せられた補足コメントです。 補足日時:2021/02/02 10:47

A 回答 (6件)

なるほどですね。


謝る必要はありません。
少なくとも私に対しては、(承知で回答しています)
設計や要件がしっかり出来ていてVBAの書き方が分らない。と、ご質問される方がいらっしゃいますが、よくここは、作成依頼する所ではありませんと言われているのを見ます。
私も同感です。解っていれば、検索や自身である程度出来ると思うからです。
仕様が纏らずどうすれば良いか、~のようなことは出来るのかと言うのは、全体のロジックが纏っていないので当然で、うまく説明できないと思っています。本題から離れてしまいました。。すみません。

担当者は、電話対応などで担当者名(又は要件)でフィルタを掛け対応するのですね。

>G列に値が入っている場合はそのセルの行全体をコピー元ファイルの同じ
NOのところに貼付け・・
これがシンプルで良さそうです。

ただ、36000行が引っ掛かります。

担当者変更データを配列に入れるのが良いのか、作業用シートを1枚作っておき担当者変更データ行範囲を一旦貼り付け、処理を進めるのが良いのか、、ですね。もちろん他にも良い方法があるかも知れません。

その他もまれに変更する場合があるとの事なので行範囲コピペですかね。
書式を含まないなら、代入式でも良いかもですが。

後から、フォルダ内すべてを対象に変更できるので、
まず、1つのファイルに対して処理をするのはどうでしょう。

参考になるか分かりませんが、実行コードをサンプルします。

条件は、マクロ実行ブックに作業用シートを追加してください。
処理は、開くファイルをダイアログで選びます。
そのシートにG列に値がある範囲をフィルタで
可視セルをコピーして、作業用シートに貼り付けます。

Sub Sample()
Dim TgtFilePath As String
Dim TgtBk As Workbook
Dim MyBk As Workbook
Dim wokSh As Worksheet
Set MyBk = ActiveWorkbook
Set wokSh = MyBk.Sheets("作業用")
wokSh.Activate
TgtFilePath = Application.GetOpenFilename("Excelファイル(*.xlsx),*xlsx")
If TgtFilePath = "False" Then Exit Sub
Application.ScreenUpdating = False
wokSh.Cells.ClearContents
With Workbooks.Open(TgtFilePath)
  With ActiveSheet
    If .AutoFilterMode Then .AutoFilterMode = False
    .Range("A1").AutoFilter Field:=7, Criteria1:="<>"
    .Range("A1").CurrentRegion.Copy wokSh.Range("A1")
    .AutoFilterMode = False
  End With
  .Close SaveChanges:=False
End With
Application.ScreenUpdating = True

'マスタファイルでの転記処理

End Sub
    • good
    • 0
この回答へのお礼

ありがとうございます。お礼がとても遅くなってしまいました。

丁寧に記載していただいたので、これを元に自分なりに色々工夫してみまし。

記載していただいた内容を自分で解読するのにこんなに時間がかかってしまうとは・・・・
とっても助かりました!!

ここは、ほんとに皆様親切でいつもいつも助けられています。
勉強不足の私にもとても優しく丁寧に教えてくださって本当にありがとうございました。

お礼日時:2021/02/07 19:09

>F列担当者部分は最初空欄で後から記入したりする場合があるため固定では無い想定です。


ということですが、
No1(2行目)は、田中さんの割り当てですが、
田中さんのファイルの処理を行うとき(マクロを実行したとき)、(各担当者からファイルが送られてきて、マスターにまとめるマクロを実行したとき)
1)田中さんのファイルの2行目のF列は空白なのですか、それとも、田中と記入記入されているのでしょうか。
2)同様にマスターの2行目のF列は空白なのですか、それとも、田中と記入記入されているのでしょうか。
    • good
    • 0

例えば、こんなやり方はいかがでしょうか?



担当Aさんのシートの全セルを選択し、コピーして、マスターシートにペーストします。ペーストする際、貼り付けのオプションで「空白を無視する」をチェックします。
これを担当Bさん以降、順次、同じ要領でペーストしていけば、ご希望のマージ結果になると思います。

マクロ化しなくてもマニュアル作業で十分、対応できる範囲だと思います。
    • good
    • 1

補足ありがとうございます。


#1の手順では問題が出てしまいますね。コピペの範囲も変わってしまうので、一意のキーワードがあれば、それを関数で探し代入とかになるのかなぁ? D列&E列F列みたいな、、、36000行、10ファイル、、スタックの可能性も出て来るかも。。
まだ、設計段階なのでしょうか、管理番号のような列を加えた方が良いかもしれませんね。(名前と管理番号、空白でない等で処理していく場合)

処理的にマスターを名前でソートするなどすれば、範囲が特定出来て処理速度が上がると思います。

担当者に渡すリスト表は、36000行(他の担当が)あるリストを渡すとは考えにくいのでは、また、担当者リストのフォーマットや繰り返し未入力リスト(未入力部分のみ)を担当者に渡し、マスターに追加するような追加処理があるのか、など決めていく必要がありそうですね。。

各担当に渡す表を出力するVBAを先に作った方が良さそう。。

よく考えず、ざっくり#1を回答してしまいましたが、まだ要件定義が必要な感じがします。後から変更や追加となるとVBAの改修も大変になるかなと思います。
    • good
    • 0
この回答へのお礼

つらい・・・

早々のご回答ありがとうございます。
>まだ要件定義が必要な感じがします。
おっしゃる通りです。

36000行全てを配布したいのは、業者から電話がかかってきた際に10名誰が電話に出ても入力対応ができるように他の担当者分のリストを全て配っておきたいという意図があります。
また、共有ファイルサーバが無いためメールで配布、メールで回収ということで皆が一斉に入力できるような環境が有りません。36000配っておくのが無難だろうという判断に至りました。

D列のNoを管理番号として割り振ってみました!

G列に値が入っている場合はそのセルの行全体をコピー
元ファイルの同じNOのところに貼付け

というのが理想でしたが、それで良いのか
また、何から検索すればよいのか・・・・と
親身に相談に乗っていただき、回答まで頂いているのに私の語彙力と説明力がなさすぎるため申し訳有りません。

お礼日時:2021/02/02 12:00

#1すいません抜けていました


>同様箇所に担当者名でフィルタを掛け、
担当者名は、
担当ファイルのG、H、I列のいずれかにある値(空白でない)を検索し同じ行のF列で担当者を特定して、
    • good
    • 0
この回答へのお礼

補足説明いただきありがとうございます!!
説明不足にもかかわらず丁寧にご回答いただき本当にありがとうございます!

お礼日時:2021/02/02 12:01

こんばんは、


方法は色々あると思いますが、ロジックでいくつか解らない点があります
10名程度のファイルを一度に処理するのでしょうか?1ファイルずつ行うのでしょうか。それで取得方法が変わります。また、同じフォルダに集める場合は同じファイル名が使えません。。少し脱線しました。
本題
渡したマスターのリストの表組は、変わらないと言う事でしょうか、
差分で検証する事は出来ますが、、ここは、重要。
絶対に変わらないのであれば、だれが入力した物でも変わらないので、元マスター表のF列担当者に担当者名でフィルタを掛け、担当ファイルの同様箇所に担当者名でフィルタを掛け、可視セルに対してコピペ、10名(ファイル)程度繰り返す。こんな感じで出来そうですが、、

フィルタ、可視セルコピーなどで探せばすぐに参考コードが見つかると思います。

表組が崩れるとなると一意のワードを見つけるか作る必要があり、36000行なら、少々大変ですね。
この回答への補足あり
    • good
    • 0
この回答へのお礼

ありがとう

確かにフィルタでできそうですね!!とても参考になりました!
ただ、元データ側で36000件F列に全て担当者名が入っているわけではなく、後から入力される場合があります。まれに変更も想定しております。

Noをキーにしたかったのですが、、、検索ワードも思いつかず。

お礼日時:2021/02/02 10:51

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

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A