プロが教える店舗&オフィスのセキュリティ対策術

お世話になります。

先程、「色付きのセルをカウントする方法について」という投稿させて頂いたのですが、それに付随する別のご質問をさせて頂ければと存じます。お忙しいところ、誠に恐縮ではございますが、お知恵をお貸し頂ければ、有り難いです。よろしくお願い致します。

添付資料をご覧ください。上の表から、VBAを使って自動的に、下の表を作成したいと考えております。現在、この作業は手作業で行っております。上の表から、条件に従って、下表に移動させます(※画面上、下の表になっていますが、実際は別シートです)。上の表の「1行目(101、102…)」のデータは必要なく、文字の色、特定の文字列(①から③)、曜日、といった条件の元、「左側に詰め」ながら、手作業でコピーペーストを繰り返すという作業です。

この作業を、なんとかVBAを使って実現できないものかと思っております。実際には、データの量も多く、また、上の表に修正が加えられると、下の表ももちろん変更が必要で、上の表の修正点のみ、下の表に反映をさせれば良いのですが、どうしても手作業で行うと、ミスも多く困っている次第です。

お忙しいところ、誠に恐縮ではございますが
お知恵をお貸しいただけないでしょうか。
ご教授を頂けると幸甚です。

何卒、よろしくお願い申し上げます。

「条件に従って、自動でデータの移動・並べ替」の質問画像

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

  • tatsumaru77さま

    お世話になっております。

    この度は、本当にお世話になりました。
    tatsumaru77さんのお陰で、今ところは、問題なく処理が行われております。ひとえに、tatsumaru77さんのお力添えのお陰です。心より、感謝申し上げます。本当に、ありがとうございました。

    そろそろ締め切られ、コメントも出来なくなるので、ベストアンサーに選ばせて頂きたいと存じます。現在は、少しずつですが、VBAの勉強もしております。また、Excelや、VBAでつまずくことがありましたら、恐縮ではございますが、また、お力をお貸し頂けると幸いです。

    今後とも、何卒、よろしくお願い申し上げます。

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

A 回答 (22件中1~10件)

こちらにアップしました。


https://ideone.com/SC1PFR
    • good
    • 0
この回答へのお礼

ありがとうございます。無事、動きました。
本当にありがとうございました。

何とお礼を申し上げて良いか、本当に分かりません。
感謝、感謝、感謝しかありません。心から、心から感謝申し上げます。

列数の増減が予想されますので、プログラム上で、列の設定を変更しても、きちんと動いてくれましたので、当分の間は問題は無いと思います。本当にありがとうございました。

将来的には、さらに細かい修正が入るかもしれませんが、その時までには、少しでもVBAのプログラムが理解できるように努力しようと思います(とりあえず、入門書を購入致しました)。

この度は、専門的な知識・技術をお貸し頂き、また、本当にお忙しい中、膨大な時間を私に割いて頂いたことを、深く深く感謝申し上げます。本当にありがとうございました。

今後とも、何卒、よろしくお願い申し上げます。

お礼日時:2021/02/07 17:52

了解しました。

    • good
    • 0

無事動いて何よりです。


余裕があれば、
色の追加、学年の追加もやってみてください。
colArr = Array(12611584, 255, 0) '集計先の列の並びは青,赤,黒の順
banArr = Array("1年", "2年", "3・4年") '集計先の列の並びは1年, 2年, 3・4年の順
に追加するだけで、他の変更は不要です。(Sheet2,Sheet3のレイアウトは変わりますが)

ほかにも、質問があれば、受け付けますので、当分締め切らないでこのままにしておいてください。
この回答への補足あり
    • good
    • 0
この回答へのお礼

お世話になっております。

時間的に余裕があれば、色・学年の追加も行ってみます。
ありがとうございます。

また、温かいご配慮のほど、感謝申し上げます。
しばらく、締め切らないでそままにさせて頂きたいと存じます。
ありがとうございます。

何卒、よろしくお願い申し上げます。

お礼日時:2021/02/08 11:09

>やはり、最後の行まで処理が行われていないような気がします。



現在、最終行をA列で判定しています。(全シート共通)
A列が、結合セルの為、最終行が、金曜日の1次元の行になってしまっています。
B列で、最終行を判断するようにします。B列には必ず、時限を設定しておいてください。
    • good
    • 0
この回答へのお礼

申し訳ありません。よろしくお願い致します。

お礼日時:2021/02/07 17:14

>Sheet2:

https://gyazo.com/fd03e4bf5e3c1156bd7aef918f6e62e9
>→ 時限が消えてしまっています。金曜日の2限以降は残っています。
>→ メニューが時限のところに入力されています。その分、一列ごと、ずれております。
>Sheet3:https://gyazo.com/dba912d1c34a1d3276ccb2379295d404
>→ こちらもよく似た状況だと思われます。

失礼しました。Sheet2,Sheet3の不具合、ともに修正しました。
下記にアップしました。
https://ideone.com/jjr2He
    • good
    • 0
この回答へのお礼

お忙しいところ、本当に申し訳ありません。
ありがとうございます。

Sheet1:https://gyazo.com/d35c025e5c184d3181d5a943e1ba1b17

Sheet2:https://gyazo.com/e82d11cfa31dae812c8314b64df250ae

Sheet3:https://gyazo.com/ea9b9e919f2a51ccc97f4ae5c085555b


処理が最後の行まで行われていないような気がしたので、Sheet1のすべての行を埋めて、プログラムを実行した結果です。

やはり、最後の行まで処理が行われていないような気がします。

お忙しいところ、恐縮ではございますが
ご確認の程、よろしくお願い致します。

何卒、よろしくお願い申し上げます。

お礼日時:2021/02/07 16:59

追伸


1年・2年を2年として扱う場合、
現状では、
banArr = Array("1年", "2年", "3・4年")
banAltArr = Array("", "", "3年|4年")
定義の為、最初に"1年"で判定するので、"1年・2年"は1年にマッチしてしまい、1年として扱われます。
これを2年として扱いたい場合は、以下のような工夫が必要になります。
①banArrを()つけて定義する。
banArr = Array("(1年)", "(2年)", "3・4年")・・・・3・4年は()を付けてもつけなくてもどちらでも良い。
②banAltArrの2年の位置に1年2年を追加します。
banAltArr = Array("", "(1年・2年)", "3年|4年")
のようにします。
上記で、1年・2年を2年として扱されます。
()を含めて比較すると、(1年・2年)は、どちらにもマッチしないので、代替学年側の検索が行われます。

これから出かけます。戻りは夕方になります。
    • good
    • 0

修正版です。

下記にアップしました。
https://ideone.com/yENzSs
環境をもとに戻して試験してください。
Sheet2のイメージ:https://gyazo.com/951b43feb5b25a7067428c4fe0be9059

Sheet3のイメージ:https://gyazo.com/51cf8a2d7f518b51e2d8b08f52f50175
この状態で試験可能です。
    • good
    • 0
この回答へのお礼

お忙しいところ、ご修正頂き、ありがとうございました。
感謝申し上げます。

申し訳ございませんが、以下、ご確認頂けると幸いです。

Sheet2:https://gyazo.com/fd03e4bf5e3c1156bd7aef918f6e62e9

→ 時限が消えてしまっています。金曜日の2限以降は残っています。
→ メニューが時限のところに入力されています。その分、一列ごと、ずれております。

Sheet3:https://gyazo.com/dba912d1c34a1d3276ccb2379295d404

→ こちらもよく似た状況だと思われます。

お忙しいところ、恐縮ではございますが、ご確認の程、よろしくお願い致します。

何卒、よろしくお願い申し上げます。

お礼日時:2021/02/07 14:10

すみません。

もう一点、問題がありました。
Sheet2は
1行目の結合セルは3セルを1つのセルに結合する前提です。
現在、9セルを1つのセルに結合しています。
これから、ここもマクロを修正しますが、
試験を続行する場合は3セルを1つのセルに結合して、試験していただけますか。

Sheet3は結合セルがない前提です。
こちらも試験する場合は、単独セルにして試験してください。
こちらも、これからマクロを修正します。
    • good
    • 0
この回答へのお礼

承知致しました。

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

>上記の環境で、頂いたプログラムを実行すると、下記のエラーが出ました。


>エラー:https://gyazo.com/1952be2d5a7190c72d5759d23a6f69b2
当初、あなたから提示された集計先のシートにはB列の時限がありませんでしたが、今回それが、追加されています。

これから、マクロをそれにあわせて修正しますが、それまでのあいだ、
Sheet2,Sheet3のB列を暫定的に削除して試験していただけますでしょうか。(後で戻すのでSheet2,Sheet3のコピーはとっておいてください)
    • good
    • 0
この回答へのお礼

こちらの不手際で、ご迷惑をお掛け致しまして、誠に申し訳ございませんでした。

何卒、よろしくお願い致します。

お礼日時:2021/02/07 13:04

1.Sheet1の検査対象となる列について


Private Sub setup_col_ban()の
columnArr = Array("C", "E", "G", "I", "L", "O", "U")
で定義しています。
もし、C列をD列に変えたいなら
columnArr = Array("D", "E", "G", "I", "L", "O", "U")
もし、AB列を追加したいなら
columnArr = Array("C", "E", "G", "I", "L", "O", "U","AB")
のようにしてください。


2.学年の判定について
banArr = Array("1年", "2年", "3・4年")
banAltArr = Array("", "", "3年|4年")
以下の順番で検査します。
①検査対象のセルの文字が1年を含んでいるか判定します。(含んでいれば1年に決定)
②含んでいなければ、同じ並びのbanAltArrの内容をみます。この場合、空白なので次の学年に移ります。
③検査対象のセルの文字が2年を含んでいるか判定します。(含んでいれば2年に決定)
④含んでいなければ、同じ並びのbanAltArrの内容をみます。この場合、空白なので次の学年に移ります。
⑤検査対象のセルの文字が3・4年を含んでいるか判定します。(含んでいれば3・4年に決定)
⑥含んでいなければ、同じ並びのbanAltArrの内容をみます。この場合、3年|4年なので⑦以降の処理に移ります。
⑦まず、検査対象のセルの文字が3年を含んでいるか判定します。(含んでいれば3・4年として決定)
⑧含んでいなければ、検査対象のセルの文字が4年を含んでいるか判定します。(含んでいれば3・4年として決定)
⑨含んでいなければ、結局どれにもマッチしないのでエラーメッセージを表示して終わり。

3.代替学年の追加について
banAltArr = Array("", "", "3年|4年")
を代替学年とここでは呼ぶことにします。
3・4年の代替学年は3年と4年です。2つ以上の場合は|で区切って登録します。|は半角です。
1つなら、"3年"
2つなら、"3年|4年"
3つなら、"3年|4年|5年"
のように登録します。
""の場合は、代替学年がないことを示します。

4.学年の追加について
もし、5年を追加の学年として管理することになった場合は、
banArr = Array("1年", "2年", "3・4年","5年")
なりますが、代替学年も、追加しておきます。
5年に対応する代替学年がないので
banAltArr = Array("", "", "3年|4年","")
のようにします。
banArrの要素の数(カンマで区切った数)とbanAltArrの要素の数が一致しないと異常停止しますので注意してください。
    • good
    • 0
この回答へのお礼

お世話になっております。

Sheet1のイメージ:https://gyazo.com/b083d5d3c99b96edd2c71b1c58b74def

Sheet2のイメージ:https://gyazo.com/951b43feb5b25a7067428c4fe0be9059

Sheet3のイメージ:https://gyazo.com/51cf8a2d7f518b51e2d8b08f52f50175

上記の環境で、頂いたプログラムを実行すると、下記のエラーが出ました。

エラー:https://gyazo.com/1952be2d5a7190c72d5759d23a6f69b2

私の方で、また何かしらミスを犯してしまっていたら、本当に申し訳ございません。何度も、ご迷惑をお掛け致しまして、誠に申し訳ございません。

何卒、よろしくお願い申し上げます。

お礼日時:2021/02/07 12:39

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