こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

回答受付中の質問

EXCELのマクロについて

マクロについて質問させてください。

商品コード、商品名、ケース入数、ロケーション、WMS在庫数、実在庫数、在庫差異
の順でAからHまでデータがあります。
商品コード毎で1行ずつで全部で6000行程あります。
実在庫数と在庫差異以外は既にデータが入力されており棚卸を実施した後に実在庫数へ入力、関数を入れて在庫に差異があれば表示されるというようなものです。

但し、かなりのデータ量で1人での入力は時間が掛かりますので4名で入力業務を行うことになりました。
元のファイルをコピーし4名で入力し始めたのは良いのですが、入力し穴だらけになったらファイルを元のファイルに合算する方法がわかりません。
手作業では骨の折れる作業ですし、正確性に欠けます。
そこでマクロを使ってそれぞれの入力したファイルから元のファイルにデータが自動で移行するようにしたいのです。
以前、マクロを少しかじりましたが私の知識では作ることが出来ませんでした。
どなたかお力添え頂けると助かります。
宜しくお願い致します。

投稿日時 - 2017-09-08 00:48:45

QNo.9372125

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(6)

ANo.6

すみません。間違っていました。
最後の方、入れ替えて、
  Next IY
  ActiveWorkbook.Close
としてください。又は、
  ActiveWorkbook.Close
を削除してください。

もっとも、chie65535 さんのやり方のほうが優れているので、使わないかもしれませんが。

投稿日時 - 2017-09-17 01:50:10

ANo.5

訂正。


「結合結果」シートの「実在庫数」の先頭の行(実在庫数はG列になっていて、1行目が見出し、2行目が先頭だと仮定します)に、つまり、G2セルに、以下の式を入力します。


「結合結果」シートの「実在庫数」の先頭の行(実在庫数はG列になっていて、1~2行目が見出し、3行目が先頭だと仮定します)に、つまり、G3セルに、以下の式を入力します。

なお、先頭行が「G2」だったり「G1」だった場合は、式の「G3」の部分を合うように読み変えて下さい。

投稿日時 - 2017-09-08 13:34:53

ANo.4

マクロで結合する必要はありません。

まず

Aさんが入力したファイル
Bさんが入力したファイル
Cさんが入力したファイル
Dさんが入力したファイル
結合用のファイル

の5つのファイルを用意します。

「A~Dさんが入力したファイル」は「各人が実在庫数を入力し終わった、コピーして配布したファイル」です。

「結合用のファイル」は「実在庫数を入力してない、コピー前のファイル」です。

もし「結合用のファイル」が残ってないなら、各人用にコピーしたファイルの1つをコピーして、実在庫数の列をクリアして空欄にしたファイルを用意して下さい。

まず「結合用のファイル」を開きます。

「結合用のファイル」のSheet1は「すべて行の実在庫数が空欄」にしておき、Sheet1のシート名を「結合結果」に名前変更します。

次に、結合用のファイルに「シートの挿入」を2回行なって、Sheet4、Sheet5を増やします。

次に、結合用のファイルのSheet2~Sheet5のシート名を名前変更して「Aさん結果」「Bさん結果」「Cさん結果」「Dさん結果」にします。

次に「Aさんが入力したファイル」を開き、入力済みシート全体を範囲指定してコピーし、ウィンドウを「結合用のファイル」に切り替え、「Aさん結果」シートに貼り付けします。

貼り付けしたら「Aさんが入力したファイル」を閉じます。

同様に「Bさんが入力したファイル」を開き、入力済みシート全体を範囲指定してコピーし、ウィンドウを「結合用のファイル」に切り替え、「Bさん結果」シートに貼り付けします。

貼り付けしたら「Bさんが入力したファイル」を閉じます。

同様に、Cさん分、Dさん分も「Cさん結果」と「Dさん結果」に貼り付けます。

どのシートも「同じ行に、同じ商品のデータが入っている」ので、深く考える必要はありません。

「結合結果」シートの「実在庫数」の先頭の行(実在庫数はG列になっていて、1行目が見出し、2行目が先頭だと仮定します)に、つまり、G2セルに、以下の式を入力します。

=IF(IF(ISBLANK(Aさん結果!G3),IF(ISBLANK(Bさん結果!G3),IF(ISBLANK(Cさん結果!G3),IF(ISBLANK(Dさん結果!G3),"",Dさん結果!G3),Cさん結果!G3),Bさん結果!G3),Aさん結果!G3)<>SUM(Aさん結果!G3,Bさん結果!G3,Cさん結果!G3,Dさん結果!G3),"エラー",SUM(Aさん結果!G3,Bさん結果!G3,Cさん結果!G3,Dさん結果!G3))

次に、G2セルをコピーして、G3セル~G6000セル(つまり、最終行のセル)に一括ペーストします。

これで「結合結果」シートの「実在庫数」の列が、4人分、結合された状態になります。

最後に「実在庫数」が「エラー」になったら「複数人で入力が重複している」か「誰も入力してない」かのエラー状態なので、各人が入力したデータを確認して下さい。

最後に「エラー」になっている行が無いのを確認したら「実在庫数」の列のみを範囲指定して、範囲指定を変更せず「形式を指定して貼り付け」「値」で貼り付けを行なって下さい。

これで「式で結合した結果」が「値」に変換され「普通に入力したのと同じ状態」になります。

投稿日時 - 2017-09-08 13:30:04

ANo.3

説明不足で判らないのですが、
商品コード、商品名、ケース入数、ロケーション、WMS在庫数、実在庫数、在庫差異…7個
AからH…8個
項目数に矛盾があります。勝手に
A:空き
B:商品コード
C:商品名
D:ケース入数
E:ロケーション
F:WMS在庫数
G:実在庫数
H:在庫差異
として、Gのデータが入っている所のみ結合する。としました。
それ以外の部分は触っていないものとしています。したがって、商品コードは見ないで、同じ場所にコピーします。

また、元データがあった場合上書きするようにしました。2人以上が同じ場所に入力したら、後から結合したものが有効になります。

結合するファイルはUsb に入れてあるとしました。
4人いるなら4回動かす必要があります。

変更点は、
FileName:=の所に正しいファイル名を入れる。
実在庫数がGでなければ変更する。
といったところですか。
'
Option Explicit
'
Sub Macro1()
'
  Dim IY As Long
  Dim Data As String
'
  Workbooks.Open FileName:="F:\Book1.xlsx"
'
  For IY = 2 To Cells(Rows.Count, "B").End(xlUp).Row
    Data = Cells(IY, "G")
'
    If Data > "" Then
      ThisWorkbook.ActiveSheet.Cells(IY, "G") = Data
    End If
    ActiveWorkbook.Close
  Next IY
End Sub

投稿日時 - 2017-09-08 10:57:30

ANo.2

>>どなたかお力添え頂けると助かります。

https://crowdworks.jp/
上記のような、クラウドワークスというようなサイトで、「プログラム作ってください」「プログラム作ります」などの仕事の受発注を行うことができます。

ここで、「○○のようなプログラムを××万円の予算以内で、××までに作れる方募集!」とすればいいと思いますよ。

投稿日時 - 2017-09-08 06:45:42

直接の回答ではありません…m(_ _)m
現職のころ、ワープロからExcelに変わったデターの打ち込みに悩みました。
当時は、オフイスプロフェッショナルには、必ずACCESSがついていたのです。
そこで、数名で個別のExcelファイルに打ち込み、フロッピーで持ち寄って
一旦ACCESSに読み込んで、一枚のExcelSheetに書き出しました。(o^-’)bm
各自のフロッピーは、各自で追記もできるので、分担意識がしっかりして好都合でした。

ACCESSはExcelのマクロをビジュアル化した様だと、今は思います。。

Excelのマクロ記述で、颯爽とプログラムを書き換え、処理できればすばらしいのですが、1~2行のバグが出た時には完全にお手上げです。
力量ある人の解析が必要です。⇔私達は投げ出しました。(笑…)

Accessなら、画像(昔はシェル?)を見ながら修正できるので、時間を置いても思い出しやすく、ダレでもこの作業は直ぐに覚えました。
どなたかのパソコンにAccess入っていたら、お試しください。
    お忙しい時に、お邪魔しました。

投稿日時 - 2017-09-08 06:01:46

あなたにオススメの質問