[[20240606125051]] 『パワークエリで取り込んだデータに追記したい』(教えてください) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『パワークエリで取り込んだデータに追記したい』(教えてください)

いつもお世話になっております。

下記についてご教示頂けますと幸いです。

パワークエリで取り込んだ毎日の受注データをシートに抽出後、
テーブルの右端に列を追加して手入力にて納期を入力したいのですが、
更新をかけると消えてしまいます。

他の方法でも構いませんので、納期を後入れできる形にすることは出来るのでしょうか?

ご教示頂けますと幸いです。

< 使用 Excel:Excel2019、使用 OS:Windows10 >


一列空けて、テーブルと切り離して入力欄を作るのではNGなんですか?

(xyz) 2024/06/06(木) 14:07:36


出力後のテーブルに書き込むのではなく別テーブルに入力したものを クエリにマージして
から読み込めばいいです。

(d-q-t-p) 2024/06/06(木) 14:28:38


ご回答ありがとうございます!

受注データの列について、相手先、商品、受注日、とあるのですが、それぞれでソートをかけて並べ替えをすることがあります。
1列開けてテーブルと切り離して入力欄を設けた後、並べ替えをしたときに順番がぐちゃぐちゃにならない方法はナンバリングをしたら良いでしょうか?

また、クエリにマージするときもそのナンバーで紐づけたら良いのでしょうか?
(教えてください) 2024/06/06(木) 17:04:14


> また、クエリにマージするときもそのナンバーで紐づけたら良いのでしょうか?
何を基準にしてマージするかは条件が書かれていないので判断できかねます。

番号だけで何の納期か分かるのなら番号でいいんでしょうけど そんな訳はないのでは?
(d-q-t-p) 2024/06/06(木) 17:18:18


パワークエリで受注データに上から順にインデックスを付けて抽出後、
抽出したデータから1列空けて1から番号を割り振って納期入力欄を設けて、
その番号で紐付けたらマージしてもズレないのかなと安易に考えたのですが、この方法では理論的に難しいのでしょうか?
(教えてください) 2024/06/06(木) 20:32:52

 入力が最後の処理との前提で、そのような回答をしましたが、
 その後にソートだとか色々な処理を行うのであれば、別の話になります。

 d-q-t-pさんの回答(納期テーブルを持ってマージする)や、
 現在のテーブルに納期項目を設定する等の対応が本来の対応だと思われます。
 貴兄の案でもよいのかもしれません。いずれにしても、私の回答は前提が
 違うので採れません。

(xyz) 2024/06/06(木) 22:34:47


xyzさん

ご回答いただきましてありがとうございます。

ソートをかけるとなるとまた変わってきてしまうのですね…
並べ替えをしたときに別のテーブルに納期を入力すると納期テーブルは並べ替えされないので、
どうしたら良いものか…とまたこちらに戻ってきてしまいました。

納期テーブルにもナンバリングを、と言いましたが、ナンバー列と納期入力列の2列を設けて、
納期が入力されたらナンバー列にも自動的に連番が入るようにできないか、と考えました。

ROW関数だと並べ替えが発生した時にずれてしまうので、固定できる方法もしくは上記のように納期を入力したら自動的にナンバーが入り、並べ替えをしても動かない、ということはできるのでしょうか?
(教えてください) 2024/06/07(金) 09:54:02


以前質問した件について、解決策が未だ見つからずにいます。

例えばですが、パワークエリを使用して受注データを抽出後、別シートに値として貼り付けて積み上げていくといったやり方などは出来るのでしょうか?
別シートに値形式で積み上げが出来ればそちらに追記していけば問題解決するのでは...?と思ったのですが、
この場合はマクロになるのでしょうか?
(教えてください) 2024/06/26(水) 18:04:43


 毎日の受注データに、キーとなり得る情報が「在るか、作れるか」が肝じゃないですか。
 例えば「相手先、商品、受注日」でユニークなキーが合成できるとか。

 社外の人間は、そちらの事情を知らないですから、
 上記に関する説明がないとアイデアの出しようがないと思いますけど。

(半平太) 2024/06/26(水) 20:51:00


半平太さん

コメントありがとうございます。
ユニークなキーというのは、組み合わせて1つしかない数字を作るというような意味合いになりますでしょうか?

今回の材料?をきちんと説明いたします。。。!

まず受注データフォルダというものがあり、そこに1日2回午前と午後の受注データをCSVで落としてきて保存しています。保存名は20240625amと、20240625pmといった感じです。

※PMに取り込むデータについては1日分の受注データが入っているため、AMに取り込んだデータが重複する形となります。これはパワークエリ内で番号が重複している行を削除して対応をしています。
なぜ重複するのに2回データの取り込みを行っているかというと、AMの受注状況を早い段階で確認したいという社員がいるためです…。

取り込むデータの中身は以下のようにパワークエリで変換しています。
テーブル名:受注データ

A   B      C     D     E     F    G     H    I J
No.  データ名  受注日  発注番号  受注先  納品先 商品コード 商品名  数量 備考
1   20240625am 20240624 123456789 ●●会社 東京  123456   バナナ  60  6/28着希望

やりたいこととしては、このように取り込んだパワークエリのデータにK列へ納期を手入力したい。手入力をして再度クエリを更新すると手入力した納期となぜか消えるまた、ずれるなどが発生するので、どうにか納期を後入れできる形にすることは出来るのか…という内容でした。

現時点では納期をK列へ手入力しており、下記のように別の列でテーブルに参照させて、クエリのマージをして更新ボタンを押したときに上書きされるようにしています。

AA  AB
No. 納期
1 =INDEX(受注データ,MATCH(AA1,受注データ[No.],0),10)

そうすると上記したように手入力した納期がずれてしまったりして、とても扱いにくかったため
有識者の方々にご助言いただきたく投稿しました。

知識がないがゆえにどんどん厄介な方法になっていっている気がしています。

そもそもクエリ自体が手入力する用ではないと思いますので、ほかに良い方法があればご教示いただきたく存じます。

クエリでの方法にこだわっているわけではございません...!

(教えてください) 2024/06/26(水) 21:58:22


 説明の整合性が微妙に取れていない気がしますが、
 いずれにしても今日は時間がないのでアイデアだけですけども、

 こんなレイアウトだとして、M列の納期はテーブルのNoを見て入力する。

 <Sheet1>
 行  _A_  _____B_____  ____C____  ____D____  ____E____  ___F___  _____G_____  ___H___  __I__  _____J_____  : ___M___  :   _AA_  ___AB___
  1  No.  データ名     受注日     発注番号   受注先     納品先   商品コード   商品名   数量   備考         : 納期     :   No.   納期    
  2    1  20240625am    20240624  123456789  ●●会社   東京          123456  バナナ      60  6/28着希望   : 6月28日  :      1   6月28日
  3    2  20240625am    20240624  123456789  ●●会社   東京          123456  バナナ      60  6/28着希望   :          :                 
  4    3  20240625am    20240624  123456789  ●●会社   東京          123456  バナナ      60  6/28着希望   :          :                 
  5    4  20240625am    20240624  123456789  ●●会社   東京          123456  バナナ      60  6/28着希望   :          :                 
  6    5  20240625am    20240624  123456789  ●●会社   青森          123456  リンゴ      60  1/1着希望    :          :                 

 1.納期を入力すると、AA列のNoに合わせてAB列に納期をマクロで上書きなどをする。
   AAに該当Noがなければ、マクロでAA〜AB列の末尾にNoと納期を追記する。

 2.さて、次のデータをダウンロードしたら、マクロを実行して、
   M列をクリア、AB列の納期を(更新された)A列のNoの並び順に合致する様にしてM列に転記する。

 3.AB列に納期が存在しない場合は当然その行のM列は空欄になるので、
   納期が確定次第、手入力する。→上記1のルーチンに戻る。

 今日はアイデアだけなのですが、何か思うところがあれば書き込んで置いてください。

(半平太) 2024/06/26(水) 23:53:33


 もし私がやらされるんなら、パワークエリと納期管理の為の表は分離して考えたいなぁ... ^^;

 受注データを更新
   ↓
 受注データの内容を別途ある[納期管理表]にコピー
   ↓
 納期管理表のK列に納期を入力
   ↓
 受注データを更新
   ↓
 受注データの内容をを納期管理表に継ぎ足し(納期管理表にまだ無いレコードだけ選んで追加)
   ↓
 納期管理表のK列に納期を入力
   ↓
 受注データを更新
   ・
   ・
   ・

 [発注番号]だけでレコードを一意に特定出来るなら割と楽そうですが、
 [発注番号]&[商品コード]くらいは必要なのかな...?

 (感想だけです。スンマセン ^^;)

(白茶) 2024/06/27(木) 10:03:14


 昨日は余り検討していなかったですが、
 K列に納期を記入する方式でもできそうな感じですけどねぇ。

 データ取り込みをした時点で、AA〜AB列から数式で納期をK列に引っ張ってきて、値化する。
 納期が埋まらなかったK列の空欄に、確定次第納期を手入力する。
 その手入力納期はAA〜ABに転記しておく。(昨日の構想通りに処理)

 確認するのを忘れましたが、A列とAA列の「No」は一対一の対応関係なんですよね?

(半平太) 2024/06/27(木) 10:15:35


先に「納期管理表」に転記してから納期を入力するか 出力表に直接書き込んでから別列に
転記するかの差でしかないので 手順間違いでのミスを防ぐ意味では前者にしておいたほう
がいいと思います。
(d-q-t-p) 2024/06/27(木) 10:58:13

 AMに手入力した納期が、PMでも保持されればいいという事だと解釈しました。
 であればAM用のクエリとPM用のクエリの2つ用意すれば、簡単だと思います。
 が、まず、前提として以下の情報が不足しています。

 (1)元ソースは「CSV」と書かれていますが、文字コードは何ですか?(Shift_JIS、UTF8等)
 (2)「CSV」の区切り文字は「,(カンマ)」ですか?「タブ」「半角スペース」「セミコロン」区切りのCSVもあります。
 (3)「CSV」の先頭行はヘッダー行ですか? それともすべてデータのみですか?
  他にも、データの両端がダブルクォーテーションで囲まれているかどうか等、不明点があるので、
    差し支えなければ先頭3行程度でいいのでCSVデータを示していただきたい。
 (4)PMのCSVにはAMのデータも含まれているとの事ですが、何をもってAMのデータと判断できるのですか?
    No.で判断すればいいんですか?

(まる2021) 2024/06/27(木) 13:03:27


>AMの受注状況を早い段階で確認したいという社員がいるためです…。
「保存名は20240625am」しているんだったらこれを見てもらった後に編集すればいいのでは。

(f@tgeta) 2024/06/27(木) 15:02:56


1)午前のファイルをインポート
2)納期を追記したら、上書き保存(別名の方がよりよい?)
3)新しくエクセルを開いて、
 午後のファイルと編集した午前のファイルをインポートして、
 午前のデータに午後のデータを追加
4)重複を削除
5)さらに納期を追記
  ・
  ・
  ・

ポイントは「更新」という機能を利用しないで、
編集したファイルを上書き保存(これも更新?)して使う。かな?
あと、重複の削除をするときは残って欲しいデータを
シートの上側に配置する。

う〜ん・・・上手く説明できない。。。
いろいろ試してみてください。。。。
(・・・・マクロ化したい。。。。^^;)
(まっつわん) 2024/06/27(木) 15:12:51


 納期をK列に入れたあと、そこまで含めてCSVファイルに保存しておいて、
 クエリではその、納期入りのCSVファイルも一緒にマージするようにすればいいと思います。

 納期列を含めてCSV書き出しをマクロ化しておくと楽だと思います。
 クエリ側で読み込む際にももちょっと工夫が必要になると思います
(´・ω・`) 2024/06/27(木) 15:17:42

 なんか「船頭多くして〜」になりそなので、自分の考えだけ書いて撤退します。
 返信がないので、CSVの「文字コードはUTF8、カンマ区切り、先頭行はヘッダ」でやってます。
 又「AM/PM」のキーは「No.」列としてます。適時修正を...
 まず以下の「AM用/PM用」の2つのクエリを登録します。

 AM用クエリ:ReadCSV_AM(クエリ名はお好きに)
 (AM_FullPath as text)=>
 let
    AM_FullPath=Text.Trim(AM_FullPath,""""),
    ソース = Csv.Document(File.Contents(AM_FullPath),[Delimiter=",", Encoding=65001, QuoteStyle=QuoteStyle.None]),
    昇格されたヘッダ=Table.PromoteHeaders(ソース, [PromoteAllScalars=true]),
    納期列追加 = Table.AddColumn(昇格されたヘッダ, "納期", each null)
 in
    納期列追加

 PM用クエリ:ReadCSV_PM(クエリ名はお好きに)
 (PM_FullPath as text,AM_TableName as text)=>
 let
    PM_FullPath=Text.Trim(PM_FullPath,""""),
    TB1 = Excel.CurrentWorkbook(){[Name=AM_TableName]}[Content],
    TB2 = ReadCSV_AM(PM_FullPath),
    Combine=Table.Combine({TB1,TB2}),
    ret= Table.Distinct(Combine, {"No."})
 in
    ret

 作業手順

 ---------AMの作業---------------
 (1)AMのCSVをダウンロード(従来通り)
 (2)「クエリと接続」ウィンドウでAM用クエリをダブルクリック。
    表示される画面でダウンロードしたCSVのフルパスを入力
    フルパスはエクスプローラーからコピペすると簡単です。
https://pc-karuma.net/windows10-file-full-path-copy/
 (3)Power Queryエディタよりテーブルとして読み込む。
 (4)納期列に日付を手入力

 ---------PMの作業---------------
 (5)PMのCSVをダウンロード(従来通り)
 (6)「クエリと接続」ウィンドウでPM用クエリをダブルクリック。
    表示される画面でダウンロードしたCSVのフルパスとAMに作成したテーブル名を入力
 テーブル名は以下で確認できます。これをコピペ
https://www.officeisyours.com/entry/2020/10/11/145116
 (7)Power Queryエディタよりテーブルとして読み込む。

 以上

 <結果図AM>
      __A  __B_______  __C_____  __D______  __E_____  __F___  __G_______  __H___  __I_  __J_______  __K___
  1   No.  データ名    受注日    発注番号   受注先    納品先  商品コード  商品名  数量  備考        納期  
  2     1  20240625am  20240624  123456789  ●●会社  東京        123456  バナナ    60  6/28着希望  2月5日
  3     2  20240625am  20240624  123456789  ●●会社  大阪        123457  みかん    61  6/29着希望  3月4日
  4     3  20240625am  20240624  123456789  ●●会社  京都        123458  りんご    62  6/30着希望  8月8日

 <結果図PM>                                                                                                     
  7   No.  データ名    受注日    発注番号   受注先    納品先  商品コード  商品名  数量  備考        納期  
  8     1  20240625am  20240624  123456789  ●●会社  東京        123456  バナナ    60  6/28着希望  2月5日
  9     2  20240625am  20240624  123456789  ●●会社  大阪        123457  みかん    61  6/29着希望  3月4日
 10     3  20240625am  20240624  123456789  ●●会社  京都        123458  りんご    62  6/30着希望  8月8日
 11     4  20240625pm  20240624  123456789  ●●会社  東京        123456  バナナ    60  6/28着希望        
 12     5  20240625pm  20240624  123456789  ●●会社  大阪        123457  みかん    61  6/29着希望        
 13     6  20240625pm  20240624  123456789  ●●会社  京都        123458  りんご    62  6/30着希望        
(まる2021) 2024/06/27(木) 16:24:27

皆様たくさんコメントをしてくださり本当にありがとうございます...。

一つ一つ読みといてから回答したいのですが、まずはまる2021様のご質問について、
CSVの文字コードはJIF、コンマ切り、先頭行はヘッダとなっていました。

AM.PMの判断材料としましては、ソースネームで判断しておりました。

半平太様
A列とAA列のNo.についてですが、一対一の関係になっております。

今皆様からたくさん頂いた方法をまずは試してみたいと思います。

ちなみになのですが、白茶様の
受注データの内容をを納期管理表に継ぎ足し(納期管理表にまだ無いレコードだけ選んで追加)
という工程ですが、これはマクロでの処理になるのでしょうか?

初心者が変に色々やろうとした結果皆様にご迷惑をお掛けしてしまって非常に申し訳なく思っております。
ご丁寧に紳士に回答くださってありがとうございます。

(教えてください) 2024/06/27(木) 18:11:14


 船頭が多いようなので、私のレスは忘れてください。

 「解決策が未だ見つからずにいます」と
  また書き込まれるような事態になったらカンバックします。

(半平太) 2024/06/27(木) 18:57:03


 >これはマクロでの処理になるのでしょうか?
 いやまあ、そこまで考えての発言ではないです。ただの感想なんで ^^;
 少なくとも
 マクロじゃないと実現出来ない様な手法を考える局面と思ってる訳ではありません。

 マクロ無しで一旦形にして、
 実際に業務に使用してみて、
 もし「あかん、こりゃーやってらんないわ...」ってなったら
 じゃあ具体的にどの部分をマクロに頼るかを考えてみる。

 そんな感じでイイかなぁー、と。(これも感想ですけど ^^;)

(白茶) 2024/06/27(木) 19:02:43


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.