色彩検定1級を取得する魅力を紹介♪

こんにちは。
以前相談させていただいたものです
https://oshiete.goo.ne.jp/qa/12256176.html

大きく変更が入ったので再度相談させて頂きます…

内容は下記のようなものとなっております。
 ※コードの全体は長いのでこちらに乗せております(以前頂いたものになります)
  ⇒https://ideone.com/RAwon9

①設定シートからマクロを起動し、ダイアログを開きシート1の入ったファイルを開きます。
②開いたファイル内に【差分】シートを作成後、ダイアログを開きシート2の入ったファイルを開きます
③シート1とシート2のユニークキーが合致するものを検索し下記条件でレコードの書き換えを行います
 ・レコードがハイフンまたは空欄のもの
  ※シート2のレコードが空欄やハイフンの場合は転記処理をスキップ
 ・ステータスが【検討中】【設計OK】のもの
 ・設定シート内L列の検索ワードがユニークキーに含まれているもの
 
④上記条件で転記した行はDF列に【転記あり】と記載
⑤シート1のレコードに日付等の情報がある場合転記は行わずDE列に【変更有】と記載し、②にて作成した差分シートに転記
⑥シート1に存在するユニークキーがシート2に存在しなかった場合DE列に【レコード削除】と記載




こちらの内容に変更があり、まず
③の条件に
転記先、転記元のレコードにスペースが混ざっている場合、スペースは除去する
例:「2021/02/14 」→「2021/02/14」
※半角スペースが末尾に入っているので除去

また、変更や転記があった場合は「転記あり」、「変更あり」と言う文字をDE.DF列に入れてレコードに色付けをしていたのですが
こちらを変更のあった列名を記載
※複数変更があった場合スラッシュで区切る
例:出店開始日1/売上2
※重複する列名には何列目のものなのかわかるようにしたい


そして最後に大きいのが、
せっかく手動で編集できるようにしていただいたのですが、
列名に追加、変更、削除があった場合自動で修正されるようにしてほしいとのことでした…

最初からそう指示してくれって感じではありますが修正すらもしたくなくなったんですかね、困っちゃいます

申し訳ないのですがよろしくお願いします

「こんにちは。 以前相談させていただいたも」の質問画像
gooドクター

A 回答 (8件)

修正点を反映した結果を下記にアップしました。


https://ideone.com/0Pui71

変更点
1.シート2のセルに空白があった場合、両側の空白を削除した結果をシート1に反映する。
両端の空白を削除する場合、trim関数を使うが、その例です。
シート2のセルは変更していません。。シート1に以前にあるセルも変更していません。
もし、シート2のセル及びシート1に以前にあるセルの両端の空白を削除するなら、見直しが必要です。
この件は、要件定義も含めて再検討が必要と考えます。

2.ステータスの列を直接記述していたが、設定シートに記述された列を使うようにした。
(DE,DFはそのままにしています。これも設定シートに記述された列を使うようにする場合は、ステータスの列の処理を参考にしてください)

3.変更のあった列名をDE,DFに格納するようにした。(同じ列名は連番を振ること)
これの為、各Dictionaryの変数の持ち方を以下のように変更した。
Dim dicT1 As Object 右記のように変更   '項目管理(シート1)キー:列の値 内容:列名
Dim dicT2 As Object 右記のように変更   '項目管理(シート2)キー:列の値 内容:列名
Dim dicTw As Object 右記のように変更   '項目管理 キー:列名  内容:0又は1(0=列名重複なし、1=列名重複あり)
Dim dicTX As Object 新規追加       '項目管理(シート1)キー:列の値 内容:列名(但し同じ列名には連番を付加)
Dim dicN1 As Object 変更なし       '項目管理(シート1)キー:列名  内容:行番号
Dim dicN2 As Object 変更なし       '項目管理(シート2)キー:列名  内容:行番号
Dim dicR As Object 変更なし       '項目管理(シート1/2)キー:シート1の列の値  内容:シート2の列の値

dicT1,dicT2,dicTwのキーと内容の持ち方を変えたので、各列名のチェックの方法も変わっています。

4.シート1の見出しは4行目、データは5行目以降の前提で作成しています。

5.シート2の見出しは3行目、データは4行目以降の前提で作成しています。

6.「ユニークキー中にA又はBの文字が含まれていること、かつ、ステータスが"設計OK"又は"検討中"であること」
この判定を、重複して行っているが、最初のIF文で1回のみ行うように変更した。

不明点は補足してください。
    • good
    • 0
この回答へのお礼

ログインできなくなりお礼が送れました…
ありがとうございます!
無事に使わせて頂いております…

お礼日時:2021/04/02 11:57

>いま問い合わせしてるのですが、自分もアルファベット表示のほうがわかりやすいと思います


>が、今まで手動でやっていた形式を変えたがらない人が多いので多分列名で表示してほしいと言われると思います…

結果が判りましたら、補足してください。
    • good
    • 0
この回答へのお礼

こんばんは、遅くなりましたが返信がありました
一応列名は表示してほしいとの事でした
理由としては名称で見れたほうがあそことあそこに変更があったんだなとすぐわかるようにしたいとのことでした
アルファベットだと毎度確認しなければならないと言うことで列名にしてほしいみたいです…

お礼日時:2021/03/25 19:32

修正列の表示は、列(アルファベット)が、良いと考えますがいかがでしょうか。


列を1/2/10のように表示した場合、10がどの列なのかが即座にわかりにくかと思います。

A/B/Jのように表示すれば、その列が簡単にわかるかと思います。

支店名①/売上1/売上2
のようにすると、列の幅が長くなりすぎます。
    • good
    • 0
この回答へのお礼

いま問い合わせしてるのですが、自分もアルファベット表示のほうがわかりやすいと思います
が、今まで手動でやっていた形式を変えたがらない人が多いので多分列名で表示してほしいと言われると思います…

お礼日時:2021/03/23 12:18

直接な回答のないジジィですが。



Pythonを導入するってのなら、そもそもの最初の目的が質問の削除で忘れましたけど、スタンドアローンだったか社内ネットワークでの共有なのかわからないですが、PHPなどとデータベースを組ませてブラウザ表示にするのは如何ですか?

仮に今やっている事をPythonに移植するって事ですとあちらの連想配列は確か取り込んだ順番は保証されなかったかと。

ま、今この問題がベテラン回答者様でクリアできれば構わないってなら、それでも良いのでしょうけど、先々は社内メンテできる人材確保の検討も会社に対して話しておく必要はあると思います。
    • good
    • 0

>最後の処理はなんとか説明して断念してもらおうかと思います!



それが、良いと思います。


>2つ目の変更ありや転記ありをスラッシュで区切る件は一旦転記処理内に
>msh.Cells(wrow,wcols).value = msh.Cells(wrow, "DF") & "/" & wrow
>で変更のあった列を抽出して乗り切ってますが、アルファベットではなく列目にして書き出す方法を模索してます!

上記の問題点です。
1.出力先は、DE又はDFの列と解釈しましたが誤ってますか。
msh.Cells(wrow,wcols).value = msh.Cells(wrow, "DF") & "/" & wrow
の意味が分かりません。
msh.Cells(wrow, "DF").value = 列情報を/で区切ったもの
になると思いますが誤ってますか。

2.msh.Cells(wrow, "DF") & "/" & wrow についてですが、
msh.Cells(wrow, "DF")の内容は、最初は空です。
従って、最初に/がつきますが、それで良いでしょうか。
/10/12
ではなく
10/12
のような結果を期待されると思いますがいかがでしょうか。


3.msh.Cells(wrow, "DF") & "/" & wrow についてですが
wrowは、行番号です。行番号は、出力する意味がありますか、出力すべきは
列名、又は列(アルファベット)、列番号(1,2,3)の何れかと思いますが、いかがでしょうか。
列(アルファベット)ならwcolsに格納されています。
列番号なら、msh.Cells(wrow, wcols)の列番号は
msh.Cells(wrow, wcols).Column
で求まります。

列名は、かなり修正が必要です。(同じ列名には連番を振る前提)
    • good
    • 0

>そして最後に大きいのが、


>せっかく手動で編集できるようにしていただいたのですが、
>列名に追加、変更、削除があった場合自動で修正されるようにしてほしいと>のことでした…
この意味は
①列名に追加、変更、削除があった場合に、
設定シートの変更を行わず、かつマクロの変更も行わずに、対応できるようなマクロを作れと。

②もしくは、列名に追加、変更、削除があった場合に、
自動的に、設定シートの変更が行われるか、自動的にマクロが修正されるような、仕組みを作れ。

のどちらかと解釈できます。
①は原理的に不可能です。
②は原理的には可能ですが、VBAで行う範疇を超えています。

唯一可能性のあるものとしては、
各シートの以前のレイアウトと新しいレイアウトを比較し、それを解析し、
その結果を設定シートに反映するようなマクロを作る。
ということが考えられますが、労多くして得る結果が少ないと考えます。
(レイアウト自体が誤った情報の場合もありうるため、正しい結果が得られる可能性はかなり低くなることも予想されます)
そもそも、列名に追加、変更、削除は、頻繁におこるものなのでしょうか。
    • good
    • 0
この回答へのお礼

向こうのニュアンス的には①となります
やはり難しいですよね…

そんなに頻繁に起こるものではないと思いますが、変更が集中するときは時折あるそうです

pythonの導入を検討しているようですがそれもしばらく先になりそうです……
(python使ったことないのでどの程度のことが可能か曖昧ですが)

最後の処理はなんとか説明して断念してもらおうかと思います!

2つ目の変更ありや転記ありをスラッシュで区切る件は一旦転記処理内に
msh.Cells(wrow,wcols).value = msh.Cells(wrow, "DF") & "/" & wrow
で変更のあった列を抽出して乗り切ってますが、アルファベットではなく列目にして書き出す方法を模索してます!

お礼日時:2021/03/23 10:39

No.1です。



職場の状況としては類似した会社にいた事は2000年頃にありました。
当時はISO認証取得を掲げて取り組み始めた物の、手書きの書類をファイル化するのに殆どの人が出来ずしわ寄せが来ました。
しかし取引先顧客から指名されて呼ばれる立場でもあったので手が付けられない事から、Word・Excelが扱える派遣社員を採用しました。
その人は社内の正社員でも思いつかない高度スキルを持っていて、ドンドン電子化を進められましたね。

と言う方法も検討課題としてはあるのかなと。
今はクラウドソーシングでプロジェクト1件での業務契約も可能でしょうし。
    • good
    • 1

初級レベルなジジィですから回答されてきたベテラン様なら問題にもしないかもですが気になった点で。


一番最後の要望について対応させるとなると相当変更が必要なのは質問者さんは気付いておられると思います。
なので『指示されたから』で自身でどうやるかと模索するのは社内評価の対象にもなるでしょうから良い事だとは思います。

でも模索した結果として『厳しい』と判断をされたのでしょう。
その結果としてまずは指示を出した方に『これは厳しい条件です』と相談したにもかかわらず、聞いては貰えなかったのでしょうか?
まず以前頂いた回答もですが模索して躓いているコードを提示し、どのように改良すべきかとピンポイントで質問を挙げるべきではないかなと思います。

私みたいな初級者レベルが言えるのはここまでで、あとはベテラン様の判断になるでしょうし『この程度問題にもならない』のかも知れませんね。
    • good
    • 1
この回答へのお礼

マスターデータにセルの結合を使用したり、パソコンの起動から教えなきゃいけないような職場でして、一応難しいですとは言うんですけどなんとかしてくれの一点張りで…

変更ありなどのところは上書きされていくものしか思いつかず、ほとんどなにも思いつかなかったような状況です

おっしゃられてることはほんとそのとおりなので、自分の不甲斐なさに赤面しながら投稿して頂いてます泣

お礼日時:2021/03/22 04:00

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

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

gooドクター

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

人気Q&Aランキング