[[20220620223812]] 『名前の表示を人数に変更他』(愛子) ページの最後に飛ぶ

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

 

『名前の表示を人数に変更他』(愛子)

お世話になります。下記のまとめを短くしようと何回も修正しましたが、
うまく出来ません。長くなって申し訳ありません。

ボランティア活動のグループが100人程います。
連絡網を10のグループに分けて各グループの担当者がメール(翌月のエクセ
ルフォームを添付)で、A(1日10名迄募集)とB(1日7名迄募集)の2
つの場所の募集連絡をします。
毎月20日締めで、翌月の募集をします。活動日は、最大20日間です。
後で、ボランティアの方から応募されます。

応募者の名前を記載されたエクセルの表は、名前を含み項目は色々ありますが、各担当者には、名前を見ることが出来ますが、
一般のボランティアの人が見る場合には、名前は見せない代わりに、例えば1
日分の名前が6名あれば、“計6名”と表示をさせたいのです。
(ボランティアの人に再度応募をしてもらう為のものです。)

また、1日分の名前が10名になれば“募集済み”の表示を出したいのです。

そのためにの提案として、同じエクセルの表を開く時に、下記1、2、がマク
ロで作成できないでしょうか。
1、担当者が見る場合:
パスワード(nww)を入れるとエクセルを開いた時に名前を含み普通にデータが見れるようにします。

2、ボランティアの人が見る場合:
上記1、と違うパスワード(res)を入れるとデータは、名前以外は見れますが、名前のところは、名前は隠して、その代わりに、名前を人数に変わるよう
にしたいのです。

例えば、6人記載の名前があれば、人の文字を付けて“6人“の表示に変わる
ようにしたいのです。
  (名前を入力されたところは、前後に名前以外の文字が入り“午前田中ひ
とし”と記載されたり、“田中ひとし午前”と記載される場合に、隣のシート
名“名簿”(姓名を登録しています)と同じ名前(田中ひとし)を導いて人数
に変わるようにお願いしたいのです。

シート名:“名簿“の範囲は、B2〜D45迄登録しています。

●また、1日分の名前が10名になれば“募集済み”の表示を出したいのです。

下記は、エクセルの表の詳細です。
  
場所“A”の範囲は、1日目は、列、BCD と行、5678の4行を使用し
ます。
  B C D




・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

最後の20日目は、列、BCD、行、81〜84行までです。

●場所“B”の範囲は、1日目は、列はGH と行5678の4行を使用しま
す。
  G H




最後の20日目は、列GH、行、81〜84行までです。
以上です、よろしくお願いいたします。

< 使用 Excel:Excel2013、使用 OS:Windows8 >


 どこまでできているのでしょうか。
 そして詰まっているのはどの点なんですか?

 話の前提について確認します。
 (1)ボランティアのかたはどういう形で、自分の希望日を反映するんですか?
   メールで担当者宛に申し込みをするのですね?
 (2)
 | 一般のボランティアの人が見る場合には、名前は見せない代わりに、例えば1
 | 日分の名前が6名あれば、“計6名”と表示をさせたいのです。   
 「一般のボランティア」とは?100人のボランティアのことですね。
 (それ以外に別の人たちがいるということはないのですね?)

 (3)
 パスワードを2種類用意して、閲覧範囲なり、見えるものを変えるという仕組みは難しいでしょう。

 また、Excelのパスワードというのはかなり脆弱なものと聞いています。

 運用に工夫が必要でしょうけど、
 二つのファイル
   ・担当者用と
   ・担当者以外一般用
 に分けるのが安全だと思います。(もちろん、両者の間の連携が必要ですが)
 担当者用にはパスワードをかけます。

 (4)
 質問の重点が、人数への変換にあるようですので、それについて。
 普通に考えつくのは、
 ・姓名のテーブルも、入力もすべて空白(全半角とも)消去したうえで、
   (空白の有無で判定が狂うことがありうるので)
 ・姓名テーブルの文字列を中に含むかどうかを繰り返し判定し、
 ・含んでいたら、その姓名を dictionaryに保存
 とすればよいと思います。
 ・ひとつひとつのブロックごとに、登録されたdictionaryの個数がその人数になります。

 実例をひとつあげてもらって、それで議論するのが分かりやすいでしょう。

(γ) 2022/06/21(火) 06:33


γ 様
おはようございます。
早朝から色々考えて頂き質問の分析を丁寧にして頂き有難うございます。

下記の質問を1つ1つお答えをさせて頂きます。

話の前提について確認します。

 (1)ボランティアのかたはどういう形で、自分の希望日を反映するんですか?
   メールで担当者宛に申し込みをするのですね?

 私:その通りです。ボランティアの方は、グループ分け(20日分を5グループに分けます)した各担当者
   にメールで連絡します。
   (余分ですが各担当者は、総まとめをする制作者(一人)にメールで連絡します。
    製作者は、ボランティア全員の希望日を入力します。表が完成すれば、製作者は、グループ分けした    各担当者が担当する日の応募者をメールで添付して送ります。→当日、現地に行って活動を
    します。) 

 (2)
 | 一般のボランティアの人が見る場合には、名前は見せない代わりに、例えば1
 | 日分の名前が6名あれば、“計6名”と表示をさせたいのです。
 
  私:はい、その通りです。 

 「一般のボランティア」とは?100人のボランティアのことですね。
 (それ以外に別の人たちがいるということはないのですね?)
 
 私:はい、「一般のボランティア」とは、100人のボランティアのことです。
   (それ以外に別の人はいません。)担当と区別する為に一般のボランティアとしました。

 (3)
 パスワードを2種類用意して、閲覧範囲なり、見えるものを変えるという仕組みは難しいでしょう。
 
 私:名前を見える人と見えない人に区分する為には、パスワードで区別すればいいのでは、と思っただ
   けです。 特にこだわりは有りませんので、他にいい方法があればよろしくお願いします。

 また、Excelのパスワードというのはかなり脆弱なものと聞いています。

 運用に工夫が必要でしょうけど、
 二つのファイル
   ・担当者用と
   ・担当者以外一般用
 に分けるのが安全だと思います。

 私:はい、そのようにさせて頂きます。製作者に2つのファイル名を作ってもらうという事で
   よろしいですね。

 (もちろん、両者の間の連携が必要ですが)

  担当者用にはパスワードをかけます。

 私:担当者にパスワードをかけるのは、どういう意味があるのでしょうか?
 担当者宛には、製作者が名前が見える表を送りますのでパスワードをかけずとも問題はないように
 思われますが?

 (4)
 質問の重点が、人数への変換にあるようですので、それについて。
 普通に考えつくのは、
 ア)姓名のテーブルも、入力もすべて空白(全半角とも)消去したうえで、
   (空白の有無で判定が狂うことがありうるので)

 私:その通りで、質問の重点が名前から人数の変換にあります。
 
   シート名:名簿 をデリーとすればいいのですね。
   そうなれば、製作者は、担当者から届いた名前をコピペするという事ですね。

   元々、自動入力を使用していました。
  (例えば、応募者の入力欄に、山野と入力する時に、”や”と入力します。するとや”の候補が出ます。
   次に、”や”をクリックしますと”や”の漢字候補が出ます。そこで山野を選択、エンターで
   山野が自動で入力されます。 
   
   シート名:”名簿”では、あいうえお順に登録しています。

 イ)姓名テーブルの文字列を中に含むかどうかを繰り返し判定し、
 ・含んでいたら、その姓名を dictionaryに保存
 とすればよいと思います。

 私:上記4のア)では、消去したうえでとありましたが、4のイ)は姓名テーブルを利用、(実際には、
   シート名”名簿”)とありますが、ア)もしくはイ)のどちらかを使用するということですか?
   先程、ネットで、マクロ、dictionary 連想配列の作り方を調べましたが便利そうですが、私には
   実際の使い方が分かりません。

 ・ひとつひとつのブロックごとに、登録されたdictionaryの個数がその人数になります。
  
 私:便利そうですね。

 実例をひとつあげてもらって、それで議論するのが分かりやすいでしょう。

 私:実例とは、何をあげるのですか?
   こういうことですか?
   例えば、下記は、Aの場所(定員10名まで)です。入力欄1日目です。

  左は、名前の入力表示(担当者が見ます) 右は、同じ場所で人数に変換後。(ボランティアの方が
  見ます)   もう一つあります、表示はしていませんが、Bの場所(定員7名まで)は、各日の行は、
  同じです。列は、GとHです。 ちなみに、A列は、日(曜日)欄です。

                    
     B   C   D         B   C   D

 5行  天田  山本  徳田    5行   
 6行  木本  木田  坂本   →  6行  左記名前が8名の場合には、ここは”8名”の表示を
 7行  秋元   清水   末広    7行   左記が10名になった場合には、ここは、”“募集済み”の
 8行   津田             8行   表示になります。

  ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 

(愛子) 2022/06/21(火) 09:52


| 私:担当者にパスワードをかけるのは、どういう意味があるのでしょうか?
|  担当者宛には、製作者が名前が見える表を送りますのでパスワードをかけずとも問題はないように
|  思われますが?
何かの拍子に担当者以外の人の手にそのファイルが渡った時に、
内容をを見られてしまうじゃないですか?ということです。
パスワードを掛けるのは普通そういう目的でしょう?

実例をあげるとは、
田中ひとし午前 と 田中ひとし午後 が入っていたりするのかどうか、実際を知りたかったのです。
あなたのあげたのでは姓だけになっていますが、これが実際なんですか?
佐藤、鈴木なんていう姓の人は多いので、同姓の別人がいた場合に二人カウントできるんですか、ボランティアの一覧も姓だけならしかたないですね。

賛同を得られないようでしたので、以下、Read Only Member になります。

(γ) 2022/06/21(火) 10:10


そんな難しい話じゃなくてCOUNTAを使えばいいだけの話。
人に作ってもらいたいだけなんだよ。
(通りすがり) 2022/06/21(火) 11:17

γ様
>パスワードを掛けるのは普通そういう目的でしょう?
その通りですね、勘違いしていました。すみませんでした。

>実例をあげるとは、

 田中ひとし午前 と 田中ひとし午後 が入っていたりするのかどうか、

最初に私が伝えていましたので、実例の意味がわかりませんでした。

>ボランティアの一覧も姓だけならしかたないですね。
>あなたのあげたのでは姓だけになっていますが、これが実際なんですか?
すみません、みよじだけ記載していました、実際は、最初に述べましたように姓名を記載しています。

>賛同を得られないようでしたので・・・
私の理解不足で、否定しているのでは有りませんので、申し訳けありませんが続いてお願いします。

(愛子) 2022/06/21(火) 11:50


記載忘れです。

>田中ひとし午前 と 田中ひとし午後 が入っていたりするのかどうか、実際を知りたかったのです。
その通りです。
(愛子) 2022/06/21(火) 11:54


今、実際に使用されている表の資料を見ていたのですが、名前を記載する枠内に、田中ひとし午前、
午前田中ひとし と名前に続き前後に文字が入っている場合(お伝えしましたが)がありましたが、

もう一つ、気づかなかったので誠に申し訳なかったのですが、名前を記載する枠内に、”xxを確認してください。”と記載している箇所がありました。

名前以外は、カウントをしませんので、よろしくお願いします。

実例をあげるところの意味が更にわかりました。焦って姓だけを入力したり名前以外を入力していたことを
気づかないままに再確認をしなかったり、情なさけないです。

もう一度機会をください、お願いします。
  

(愛子) 2022/06/21(火) 13:00


>”xxを確認してください。”と記載している箇所がありました。

と言う事は、すでに関数又はマクロで何かの条件で
その表示が出るようにされているの思われますが?

どうでも良いけどカウントする「名前の定義」も決めてないと
あれれ?的な事が起きそうです。

(ROM) 2022/06/21(火) 13:08


ROMさま
有難うございます。

>”xxを確認してください。”と記載している箇所がありました。
すみません、この表示は、製作者がまれに備忘として、手で入力しています。
従って、
関数、またはマクロで何かの条件で表示が出るようにしていません。

名前の定義は、名前:場所A 参照範囲=当月入力!$B$5:$D$84 
          
       名前:場所B 参照範囲=当月入力!$G$5:$H$84 です。

どうぞ、よろしくお願いします。

(愛子) 2022/06/21(火) 13:30


名前の定義は、当月入力シートの特定範囲にすでにあるとの事ですが
その話は、スレのどこにも出てきていませんよね?

初出しの事項で「名前の定義」がすでに決定していいるなら
何も手動で確認云々の表示を出さなくてもマクロで自動で出せます。

何か新しい事が色々出てきそうです。

(ROM) 2022/06/21(火) 14:04


先程、衝突しましたので、再度、先に送ります。

日々の名前入力の範囲は、ほとんど1日分は、4行ですが、ふと先月を見ますと、1日分が
5行にしている日があります。 製作者が、行の変更をした場合に、名前から人数に変換する為に
範囲が変わる場合があるという事をお知らせしたかったのです。

再度、報告が後になり申し訳ございませんでした。

(愛子) 2022/06/21(火) 14:15


ROMさま
有難うございます。

>名前の定義は、当月入力シートの特定範囲にすでにあるとの事ですが

 その話は、スレのどこにも出てきていませんよね? 

 ROMさんが「名前の定義を決めてないと・・」と言われてから定義を決めました。

>初出しの事項で「名前の定義」がすでに決定していいるなら
>何も手動で確認云々の表示を出さなくてもマクロで自動で出せます。

マクロで色々出されるのでしたら有り難いです。

私は、今から何をすればいいでしょうか?

(愛子) 2022/06/21(火) 14:21


 >ROMさんが「名前の定義を決めてないと・・」と言われてから定義を決めました。
 このぐらい元が定まっていないのであれば何をしても良かったりします?

 ___A__|_B_|_C_|_D_|  |___L___
1|2021/2/19 |佐藤 |田中 |高橋 |...|=COUNTA(B1:K1)
2|2021/3/10 |佐藤 |佐藤 |遠藤 |...|

 みたいな。
(.:*.ゆ ゅ) 2022/06/21(火) 14:56

今、衝突しましたので、先に送ります。

ふと思ったのですが、定義の範囲を 名前:場所A:参照範囲:1日から20日迄 しましたが、

日々の名前を人数に変換する時に、20日間を一つの範囲に名前を定義するのは、おかしいですね。

日々で定義の範囲を決めるのでしょうか?

おさらいですが、作成としては、

1、製作者が全員のデータを入力して表を作成します。その表は2つ作成、γ様が言われたように
  1つは、担当の方には、表にパスワードを付けて送ります。(特に問題なし)

2、もう1つは、ボランティアの方に送ります。日々の名前を人数に変換します。(ここをマクロで
  されるのですか)

  その時に、田中ひとし午前 と 午後田中ひとし 又は、名前の欄に、名前とは関係なく色々な文字が
  入るときに、名前以外は、カウントしません。

  ここで、シート名”名簿”を残して(ボランティアの名前を登録しています)利用しても良かったで
  しょうか?(自動入力に活用しています。)

 未だ足りない所があるかもしれませんが。・・・

 よろしくお願いします。

 
(愛子) 2022/06/21(火) 15:08


すみませんでした。
>このぐらい元が定まっていないのであれば何をしても良かったりします?
何をしてもという意味が私には、わからないのですが、
名前の定義をすることすら頭になかったのです。すみませんでした。

(愛子) 2022/06/21(火) 15:13


 名前の定義箇所を新しく作れるぐらいならフォーマットに決まりが無かったり自由にしていいのかなと思ったまでです。
 あなたの「やりたいこと」は沢山書いてくれているのですが、
 制約や逆にこれはできるという状況が整理されていないので適当にかいただけです。
 こちらはあなたのお友達でもお仲間でもないので、その辺を説明してくれないと伝わりませんよと遠回しに言ったつもりでした。
(.:*.ゆ ゅ) 2022/06/21(火) 15:38

 全貌を整理して置かないと、先に進みにくい。

 1.担当者送付用(名簿あり、パスワード付き)とボランティア用(名簿無し、人数変換表示)の2ブックを作る。
   これは確定。

 2.製作者は、名前入力を自動入力でやっていた。
   これは便利なハズですから、コピペ方式にするなんて受け入れられないと思われますが、
   そんなことないですか?

 3.ところで、製作者は愛子さんじゃないのですよね?
   愛子さんは、どんな立場でこの質問をしているのですか?
   製作者自身から質問するのが筋に思えるのですが・・

 私は、以下で進めたらどうかと思っているんですが。

 (1)製作者は今まで通りの方法で、担当者用ブック(今後は元ネタブックと呼ぶことになる)を完成させる。

 (2)元ネタブックにマクロを仕込む。
   マクロには、「担当者送付用」と「ボランティア用」の2つのブックを新規に作らせる。

(半平太) 2022/06/21(火) 16:18


今、衝突しましたので送った内容を先に再度送ります。

制約や逆にこれはできるという状況が整理されていないので適当にかいただけです。
 こちらはあなたのお友達でもお仲間でもないので、その辺を説明してくれないと伝わりませんよと遠回しに>
言ったつもりでした

自分では、そちらに理解していただけるようにと思いながら(でも、出来るだけ簡略しようと思いましたが)
沢山状況を説明してまとめたつもりでしたが、そちらから見れば整理されていないようにみれたの
ですね。(整理の仕方が分からないのです)そちらに伝わらないことは、申し訳ございませんでした。

改めてですが、上記で記載したものと同じですが、作成としては下記の通りですが、何が足りませんか、
教えてください。もう頭が疲れて来ましたが担当の方々が喜んで頂く為に諦めたくありませんので。

下記の説明にてマクロを利用しての方法を教えてください。そのために下記を読んで頂き、足らない事を教えてください。

1、製作者が全員のデータを入力して表を作成します。その表は2つ作成、γ様が言われたように
  1つは、担当の方には、表にパスワードを付けて送ります。

2、もう1つは、ボランティアの方に送ります。日々の名前を人数に変換します。
  マクロを使用する場合に、ここで、日々の定義はいりますか?

  その時に、田中ひとし午前 と 午後田中ひとし 又は、名前の欄に、名前とは関係なく色々な文字が
  入るときに、名前以外は、カウントしません。

  ここで、シート名”名簿”を残して(ボランティアの名前を登録しています)利用しても良かったで
  しょうか?(自動入力に活用しています。)

3、製作者が日々の行数を変更された時、(マクロの処理に参考事項としまして記載しました)

 未だ足りない所があるかもしれませんが。・・・

以上です、よろしくお願いします。

(愛子) 2022/06/21(火) 16:23


 >日々の名前入力の範囲は、ほとんど1日分は、4行ですが、ふと先月を見 ますと、1日分が		
 >5行にしている日があります。 製作者が、行の変更をした場合に、名前から人数に変換する為に		
 >範囲が変わる場合があるという事をお知らせしたかったのです。		

 (愛子) 2022/06/21(火) 14:15		

 行を増やす意図が...ちょっと、理解できないです。		

 >お世話になります。下記のまとめを短くしようと何回も修正しましたが、		
 >うまく出来ません。長くなって申し訳ありません。		

 (γ) さんの質問にもありますが		

 どこまでできているのでしょうか。		
 そして詰まっているのはどの点なんですか?		

 (γ) 2022/06/21(火) 06:33		

 具体的にどの部分が上手くいかないのでしょうか?		
 エクセルの表を開く時に、パスワード(nww)を入れると		
 とありますが、VBAでどのように作成されているのでしょうか?		

 インプットボックスで、パスワードを入力する方法ですか?		
 それとも、ユーザーフォーム上に、テキストボックスがあり		
 ログインフォームのように作成されているんですか?

 ◇参考意見として		

 (.:*.ゆ ゅ)さんと、多分同意見です。								

 まだ、表(テーブル)の作りこみが変更可能ならですが…私なら下記のようにしたいです。								
 最初に提示された、レイアウトでないと不都合があるのならNGですが管理するのに楽なのと、見やすいかなと思います。								

    |[A] |[B] |[C]   |[D]     |[E]      |[F]      |[G]        |[H]      |[I]        |[J]        |[K]        |[L]      |[M]      |[N]      										
 [1] |    |    |      |        |         |ボランティア活動A(1日10名迄募集)        										
 [2] |2022|年  |     6|月        										
 [3]         										
 [4] |日付|曜日|活動日|確定人数|        1|        2|          3|        4|          5|          6|          7|        8|        9|       10										
 [5] |1日 |(水)|  ○  |  7名   |織田 信長|上杉 謙信|真田 信繁  |豊臣 秀吉|武田 信玄  |黒田 官兵衛|竹中 半兵衛|-        |-        |-        										
 [6] |2日 |(木)|  ○  |  3名   |上杉 謙信|伊達 政宗|徳川 家康  |-        |-          |-          |-          |-        |-        |-        										
 [7] |3日 |(金)|  ○  |募集済み|伊達 政宗|織田 信長|上杉 謙信  |真田 信繁|豊臣 秀吉  |武田 信玄  |黒田 官兵衛|明智 光秀|今川 義元|北条 氏康										
 [8] |4日 |(土)|-     |-       |-        |-        |-          |-        |-          |-          |-          |-        |-        |-        										
 [9] |5日 |(日)|-     |-       |-        |-        |-          |-        |-          |-          |-          |-        |-        |-        										
 [10]|6日 |(月)|  ○  |  6名   |豊臣 秀吉|北条 氏康|竹中 半兵衛|武田 信玄|黒田 官兵衛|明智 光秀  |-          |-        |-        |-        										

(あみな) 2022/06/21(火) 16:50


衝突しましたので再度先に送ります。あなみ様、すみません、後で確認次第送ります。

半平太さま
有難うございます。

結論からですが、>私は、以下で進めたらどうかと思っているんですが。
(1)と(2)で進めて頂きましたら有り難いです。

・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
全貌の説明ですが、

上記1、はその通りです。

>2.製作者は、名前入力を自動入力でやっていた。

   これは便利なハズですから、コピペ方式にするなんて受け入れられないと思われますが、
>   そんなことないですか?

自動入力の方法は、名前を入力するセルの範囲内で、任意のセルに例えば”あ”と入力、→ 改行 →
”あ”行の漢字登録の候補が出ます。→任意の漢字、秋田 浩二 を選択 改行すれば自動的に入力されます。

>3.ところで、製作者は愛子さんじゃないのですよね?

   愛子さんは、どんな立場でこの質問をしているのですか?

>  製作者自身から質問するのが筋に思えるのですが・・
   
   製作者は、愛子ではありません。

私もボランティアの一員です。担当者から製作者までが、手入力をしているのを聞きまして、自動入力をされたら見間違いもなく早く入力出来ると思い提案を出しました。これは便利だと喜んで頂きました。

そしたら最近、他の担当者から私に、製作者がまとめた時点で、応募人数が足らない時に、xx日が応募人数が足りません、と製作者→担当者→ボランティアの人にメールで連絡をしているのです。

手間がかかりますので何かいい方法がないものでしょうか。と聞かれました。

応募者が足らない時にいちいち連絡せずに、皆が表を見て応募状況で人数が足るか足らないかわかるような
ものがあれば良いのですがと私に言われました。

更にボランティアの方には名前を伏せたいのです。と言われ考えたのが、当初ですが、各パスワードを使い
名前の入った表を担当者に、名前を変換して数字が入った表(xx名、又は”募集済み”)をボランティア
の人に送ることを考えました。

以上です、よろしくお願いします。

(愛子) 2022/06/21(火) 17:10


あなみ様
色々説明と考案して頂き、有難うございました。嬉しく思います。

>行を増やす意図が...ちょっと、理解できないです。

 製作者は、名前の欄を利用して時折、その日の備忘を記載しているのです。その為に 挿入しています。

パスワードは、VBAでの方法は分かりませんので提案させて頂いただけです。

>最初に提示された、レイアウトでないと不都合があるのならNGですが管理するのに楽なのと、見やすいかな>と思います。
管理するのにわかり易い表ですね。しかし最初に提案しましたレイアウトの変更が出来ないと前から言っておられました。すみませんでした。 私が違うフォームを作成する場合に参考にさせて頂きます。

結果、半平太さまの考案を取り入れたいと思います。

γ様、.:*.ゆ ゅ 様、あみな様(上記衝突のところで2022/06/21(火) 17:10に再送信しましたおり、
頭の文章でお名前の文字を間違えていました、申し訳ございませんでした。)へ

色々考えて頂き有難うございました。

私の理解不足と能力なさがご迷惑をおかけしましたことを深く謝ります。

(愛子) 2022/06/21(火) 17:37


 最後に一点お聞きします。

 A列は、4行(もしくは5行)全てに同じ日付が入っているんですか?
 それとも、各日の初行に1つだけですか?

(半平太) 2022/06/21(火) 17:40


日付は、各日の初行に1つだけ入っていますが、日付の行を見ましたら行を狭くして4行ほど結合しています。
その下に4行ほど結合して曜日が入っています。それが厄介なのです。

2週間ほど前に、ボランティアに回って来るフォームが、各日の下に曜日を手入力しているのを見て直属の担当に提案をしました。

「いちいち、曜日を手入力するのは、再確認をしなければなりませんから、時間の無駄です。
日付を手入力すれば曜日が自動的に入るようにしました」と添付で送りました。担当は、これはやり易いですね、と言ってはいましたが、

しかしいい案でも上の人にOKもらわないといけませんといいながら、いまだお返事がありませんので
たまたま当該フォームを作るうえで昨日催促をしましたが、お返事がありません。

もし現状で日付と曜日を4行若しくは、5行ほどを結合して、マクロを組めますならば進めて頂けますか?

もう一度催促しますが、後で日付、曜日(自動)のフォームが変更することが煩わしいのであれば現状で結構です。

すみません、今から、2時間弱席を外しますので。

よろしくお願いします。

(愛子) 2022/06/21(火) 18:10


 ちょっと状況が分からないです。

 何のセルがどう結合されていて、何が表示されているのか、具体的なセル名で説明してください。

 日付と曜日は同じA列なんですよね?

 >「日付を手入力すれば曜日が自動的に入るようにしました」
  それって、日付の入ったセルの書式設定で出来ることなんですけど。ちょっとよく分からないです。

(半平太) 2022/06/21(火) 19:16


半平太さま
日付と曜日は、同じA列です。

1日目は、4567行をセルの結合して日にちの数値のみを入力しています。その下、8、9、10、11
行に( )の中に曜日の月、火、水のみが入っています。続いて20日迄同じ形式で続いて行きます。

>「日付を手入力すれば曜日が自動的に入るようにしました」は、
次の関数を入れて曜日を自動的に入るようにしましたということです。(年、月を違うセルに記入して
おきます)

曜日のセルに=IF(ISNUMBER(O4),TEXT(O4,"aaa"),"")
これは、無視してください。
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

先程、やっと担当者に依頼していました、製作者のまとめての表が上司の了解のもとに送られてきました。

・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
それと同時に、追加依頼がありました。
それは、ボランティアの人から担当宛にくる依頼日の連絡が表のフォームにではなく、「xx日に
行きます」だけ。それを担当の人がメモをして、あとで表にまとめるそうです。
沢山の人がおられるので入力間違いがあるそうです。 その入力間違いの解決方法を考えてくれますか?
と依頼がありました。

そこで色々考えた末、ボランティアの人に1カ月の表(製作者と同じフォーム)を使って
記入して頂く。次にボランティアの人から各担当宛に、添付ファイルを送って頂く。
各担当は、その添付ファイルを確認後、製作者に同添付ファイルを送ります。

ここからですが、製作者に各担当から送られるボランティアの表を
1枚の表にまとめることが可能でしょうか?
何か、良い方法を教えて頂けますか。急なこととて、恐縮しています。

(愛子) 2022/06/21(火) 21:56


上記、入力間違いの解決方法の訂正です。

ボランティアの人に1カ月の表(製作者と同じフォーム)を使って
記入して頂く。次に各ボランティアの人から各担当宛に、添付ファイルを送って頂く。

各担当は、その添付ファイルを確認後、製作者に同添付ファイルを送ります。

ここからですが、各担当者にボランティアの方から別々に送られた表を担当者のところで、1枚の表に
まとめることは出来ないでしょうか? まとめれば、そのまとまった1枚の表を製作者に送ります。

製作者は、各担当から送られるボランティアの表をやはりまとめて、
1枚の表にまとめることが可能でしょうか?

(愛子) 2022/06/21(火) 22:13


半平太さま
上記 2022/06/21(火) 22:13の質問は、上記マクロが落ち着いてからで結構ですので。

(愛子) 2022/06/21(火) 22:42


 >1日目は、4567行をセルの結合して日にちの数値のみを入力しています。その下、8、9、10、11
 >行に( )の中に曜日の月、火、水のみが入っています。続いて20日迄同じ形式で続いて行きます。

 ちょっと、当初のレイアウトと違い過ぎないですか?
        ↓
 >場所“A”の範囲は、1日目は、列、BCD と行、5678の4行を使用し
 >ます。
 >  B C D
 >5
 >6
 >7
 >8
 >・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
 >最後の20日目は、列、BCD、行、81〜84行までです。

 つまり、1日は基本4行でしょう?
 今の説明だと、1日8行なのですか?

 >沢山の人がおられるので入力間違いがあるそうです。 
 >その入力間違いの解決方法を考えてくれますか?と依頼がありました。
 随分と人頼みの人たちなんだなぁーと言う気がします。
 いずれにしても、全然別のトピックですね。

 あとで、今回の話に繋がってくるのかも知れないですが、気が遠くなります。
 私は気が乗らないです。

(半平太) 2022/06/21(火) 22:57


 >製作者は、各担当から送られるボランティアの表をやはりまとめて、 
 >1枚の表にまとめることが可能でしょうか?
 どのようにまとめるんですか。
 こちらからその表は見えませんよ。
 1カ月の表(製作者と同じフォーム)の表を提示して説明したら。

 貴方はどういう立場にあるんですか。
 製作者から、各担当からの依頼ですか。
 そしてこのサイトで依頼するのですか。
 あほで馬鹿みたい。

(ロムル) 2022/06/21(火) 23:13


半平太さま

>ちょっと、当初のレイアウトと違い過ぎないですか?
>つまり、1日は基本4行でしょう?

その通りです。当初、ボランティアの人が受け取る表は、1日、基本4行でしたので
場所“A”の範囲は、1日目は、列、BCD と行、5678の4行を使用しています。と答えました。

ところが、半平太様がセルを具体的にと言われ調べた時にちょうど、製作者のまとめての表が送られてきましたところだったので、その表のセルの行を読みました。
1日は、日と曜日で計8行です。4行と8行の違いに気づかなかったのです。すみませんでした。

すみませんが、1日8行でお願いします。

・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
>その入力間違いの解決方法を考えてくれますか?と依頼がありました。
>あとで、今回の話に繋がってくるのかも知れないですが、気が遠くなります。
>私は気が乗らないです。
私も親切に教えて頂いている方へ申し訳なく思い、気が重たかったです。
これ以上ご迷惑はかけられません。この件の作業は、忘れてください。
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

>私は、以下で進めたらどうかと思っているんですが。
すみませんが、これだけは、お願いします。
(1)製作者は今まで通りの方法で、担当者用ブック(今後は元ネタブックと呼ぶことになる)を完成
   させる。
(2)元ネタブックにマクロを仕込む。
    マクロには、「担当者送付用」と「ボランティア用」の2つのブックを新規に作らせる。

(半平太) 2022/06/21(火) 16:18

・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
製作者の表を提示します。

場所“A”の範囲は、(列Aは、日と曜日)
1日分は、列、BCD とA列5678行は、セルを結合して日を表示・A列910、11、12行は、
セルを結合して(曜日)を表示しています。1日分は、計8行を使用します。1行の高さは、
6.75ポイントで細くしています。名前を入れるところは、2行分を結合しています。

 A B  C  D 
 5  姓名 姓名 姓名 
 6 (5,6結合)
 7 姓名 姓名 姓名
 8  (7,8結合)
 9 姓名 姓名 姓名 
10(9,10結合)
11 姓名 姓名 姓名
12(11、12結合)
最後の20日目は、列は、BCD、行は、157〜164行までです。 

●場所“B”の範囲は、1日目は、列はGH と行5678910、11、12の8行を使用します。

    G  H 
 5  姓名 姓名
 6 (5,6結合)
 7  以下、同じ
 8 
 9
10
11
12
最後の20日目は、列は、GH、行は、157〜164行までです。

>貴方はどういう立場にあるんですか。
ボランティアです。

> 製作者から、各担当からの依頼ですか。
製作者が了解の元で、担当からの依頼です。

> そしてこのサイトで依頼するのですか。
少しでも煩雑な事務作業を簡便的に行いたいと思うのですが、私にはどうすることも出来ませんから
お知恵を借りたいと思いまして。

>あほで馬鹿みたい。
 そうかもしれません、

(愛子) 2022/06/22(水) 01:22


 >製作者は、各担当から送られるボランティアの表をやはりまとめて、 
 >1枚の表にまとめることが可能でしょうか? 
 あほ馬鹿さん、この件についてはどうなんだ。
 気が変わったのかな。
(ロムル) 2022/06/22(水) 01:46

今、ちょうどその件を記載して送ろうと思ったら衝突しました。
再度、送ります。

以下を忘れていました。

1枚の表にまとめることが可能でしょうか?
 どのようにまとめるんですか。
 こちらからその表は見えませんよ。

各ボランティアの人から、行く日を製作者と同じ表(一応、S表にしていおきます)に記入して各担当にS表を送ります。各担当のところでは、S表のブランクフォームに、1人のボランティアの人から個別に送られ
たS表を横並びに置いてマクロでS表のブランクフォームに自動で移す方法があればと思っていましたが、
1人の人の場合には、任意の日にちの欄は、ブランクですから行けますが、2人、3人と重なってくると
同じ日でも名前が入っていない所に名前を自動で移す事は、難しいと思って悩んでいます。

(愛子) 2022/06/22(水) 01:54


云われるように、本当に私は、あほばかですね。

皆さんに、ドジばかりしまして、
貴重な時間を費やしてご迷惑をかけまして
申し訳なく思っています。
(愛子) 2022/06/22(水) 02:15


 そんな説明必要ないんだよ。
 だったらS表にデータを入れて説明しなよ。
 いつまでたっても鼬ごっこだよ。
(ロムル) 2022/06/22(水) 02:33

>ボランティアです。
ボランティアでこのような状態のあなたがやることになったのは
押しつけられたのですか。
(ax) 2022/06/22(水) 08:30

あなたがエクセルを結構使えるとまわりの人が思っている。
その誤解をまず正さないと。

(ax) 2022/06/22(水) 08:34


 >行に( )の中に曜日の月、火、水のみが入っています
 >・ ・ ・ ・
 >曜日のセルに=IF(ISNUMBER(O4),TEXT(O4,"aaa"),"")
 >これは、無視してください。

 「無視してください」と言うことですが、気になりますね。

 (1)なぜ 月火水 だけなんですか? 
   1週間で、その3つの曜日しか活動しないのですか?(今だけは?)

 (2)なぜ 04セル なのですか?   
   普通は、A5セルを見ると思うのですが?

 ※あと、失礼な言葉使いの書き込みにいちいち反応する必要はないですよ。

 以下、取り敢えず、たたき台コード(元ネタブックの標準モジュールへ貼り付ける)

 [前提]
  1.配布用のブック名とシート名を以下とします。
   (1)担当者用ブック名     :担当者用.xlsx
   (2)ボランティア用ブック名 :Volunteer用.xlsx
   (3)予定表シート名     :予定表

  2.配布用ブックの保存先は、デスクトップとします。

  3.担当者用ブックのパスワードは「otsukare」

 Sub Sample1()
     Const ManagerFL As String = "担当者用.xlsx"
     Const VolunteerFL As String = "Volunteer用.xlsx"
     Const schedule As String = "予定表"

     Dim wbManager As Workbook
     Dim wbVolunteer As Workbook
     Dim DeskTopPath As String
     Dim dicT As Object
     Dim v As Variant
     Dim startRowCell As Range
     Dim i As Long
     Dim finalRow As Long
     Dim state As String
     Dim targetWs As Worksheet

     Application.ScreenUpdating = False

     With CreateObject("WScript.Shell")   'デスクトップへ保存の場合
         DeskTopPath = .SpecialFolders("Desktop") & "\"
     End With

     'もし、配布用ブックが開いていたら閉じる.その後削除しておく
     On Error Resume Next
         Workbooks(ManagerFL).Close False
         Workbooks(VolunteerFL).Close False
         If Dir(DeskTopPath & ManagerFL) Then Kill DeskTopPath & ManagerFL
         If Dir(DeskTopPath & VolunteerFL) Then Kill DeskTopPath & VolunteerFL
     On Error GoTo 0

     '担当者用ブックの作成
     ThisWorkbook.Sheets(Array(schedule, "名簿")).Copy
     Set wbManager = Workbooks(Workbooks.Count)
     wbManager.SaveAs Filename:=DeskTopPath & ManagerFL, FileFormat:=xlOpenXMLWorkbook, Password:="otsukare"

     'ボランティア用ブックの作成
     ThisWorkbook.Sheets(schedule).Copy
     Set wbVolunteer = Workbooks(Workbooks.Count)
     wbVolunteer.SaveAs Filename:=DeskTopPath & VolunteerFL, FileFormat:=xlOpenXMLWorkbook

     Set targetWs = wbVolunteer.Sheets(schedule) '書き出し先シートをセット
     targetWs.Range("B5:D10000,G5:H10000").Value = Empty

     Set dicT = CreateObject("Scripting.Dictionary") '全ボランティア名を格納

     For Each v In wbManager.Worksheets("名簿").Range("B2:D45").Value
         If v <> "" Then
             v = Replace(Replace(v, " ", ""), " ", "")
             dicT(v) = Empty
         End If
     Next

     With wbManager.Worksheets(schedule) '応募人数確認処理
         Set startRowCell = .Cells(5, "A")

         finalRow = .UsedRange.SpecialCells(xlLastCell).Row

         For i = 5 To finalRow

             If (IsDate(.Cells(i + 1, "A")) And .Cells(i + 1, "A") <> startRowCell) Or i = finalRow Then
                 '人数打ち出し
                 state = countVolunteerNum(.Range(startRowCell(1, "B"), .Cells(i, "D")), dicT, 10)
                 targetWs.Cells(startRowCell.Row, "B") = state

                 state = countVolunteerNum(.Range(startRowCell(1, "G"), .Cells(i, "H")), dicT, 7)
                 targetWs.Cells(startRowCell.Row, "G") = state

                 Set startRowCell = .Cells(i + 1, "A")
             End If
         Next i
     End With

     Application.ScreenUpdating = True
     dicT.RemoveAll

     Workbooks(ManagerFL).Save
     Workbooks(VolunteerFL).Save
 End Sub

 Private Function countVolunteerNum(rNames As Range, dicT As Object, fullNum As Long) As String
     Dim strNames As String
     Dim aCell As Range
     Dim testingNameFromDict As Variant
     Dim cnt As Long

     For Each aCell In rNames
         If aCell <> "" Then
             strNames = strNames & "♪" & Replace(Replace(aCell.Value, " ", ""), " ", "")
         End If
     Next aCell

     strNames = strNames & "♪"

     For Each testingNameFromDict In dicT.keys
         If strNames Like "*♪" & testingNameFromDict & "♪*" Then
             cnt = cnt + 1
         End If
     Next

     Select Case cnt
         Case Is > fullNum: countVolunteerNum = Format(cnt, "超過(総数0人)")
         Case fullNum:  countVolunteerNum = "募集済み"
         Case Is < fullNum: countVolunteerNum = Format(cnt, "0名")
     End Select
 End Function 

(半平太) 2022/06/22(水) 11:00


半平太さま
色々、有難うございます。

> (1)なぜ 月火水 だけなんですか?

   1週間で、その3つの曜日しか活動しないのですか?(今だけは?)

  月火水と記載しましたのは、( )内には、曜日の漢字は無くて月、火、水 等の漢字のみです と
  お伝えしたかったのです。勿論1週間ありますが。説明不足ですみませんでした。

>「日付を手入力すれば曜日が自動的に入るようにしました」

  それって、日付の入ったセルの書式設定で出来ることなんですけど。ちょっとよく分からないです。
(半平太) 2022/06/21(火)

日付の入ったセルの書式設定で出来ることが私にはわからなくて(聞こうと思った
くらいでした)私自身、以前に、日を入れたら曜日が自動的に表示される別の表を作っていましたので、
曜日を手入力するよりこの方が確実ですよと参考にして頂こうと担当にお伝えしたかったのです。
半平太さまには、下記のような関数を使っていますと言いたかったのです。質問のo4?は、その表の”年”
記載のセル番地です。色々項目があり少し離れたセルになってしまいました。

曜日の自動セルに=IF(ISNUMBER(O4),TEXT(O4,"aaa"),"")

>無視してください」と言うことですが、気になりますね。
私が上記の事柄で、不要な事を書きました故に時間を取らせましたので、忘れてくださいという
意味です。すみません。

今からコードを作成しまして試みます。

本当に有難うございました。

(愛子) 2022/06/22(水) 12:44


 判定ロジックを間違えてしまった。m(__)m

 ただ、それを解消すると、また別の問題が生じます。

 例えば、中林一郎と林一(はじめ)の区別がつかなくなると言うことです。
 中林しかいないのに、林もカウントされてしまう。

 今のボランティア名同士にそんなめぐり合わせになる可能性は
 低いでしょうが、確実性がないことは確かです。

 それでも良ければ以下の一文を修正してください。

 >'     If strNames Like "*♪" & testingNameFromDict & "♪*" Then

         ↓(修正後、♪を消去))
         If strNames Like "*" & testingNameFromDict & "*" Then

 ダメなら、今のところ旨いロジックが考えつきませんので、私はしばらくドロップアウトします。

(半平太) 2022/06/22(水) 14:12


 判定ロジックですが・・・

 名前の長い方から照合し、合致したらその名前を全然別の文字に変えてしまえば良さそう。

 あとで、修正版をアップします。

(半平太) 2022/06/22(水) 14:58


 修正版です。

 Sub Sample2()
     Const ManagerFL As String = "担当者用.xlsx"
     Const VolunteerFL As String = "Volunteer用.xlsx"
     Const schedule As String = "予定表"

     Dim wbManager As Workbook
     Dim wbVolunteer As Workbook
     Dim DeskTopPath As String
     Dim dicT As Object
     Dim v As Variant
     Dim startRowCell As Range
     Dim i As Long
     Dim finalRow As Long
     Dim state As String
     Dim targetWs As Worksheet

     Application.ScreenUpdating = False

     With CreateObject("WScript.Shell")   'デスクトップへ保存の場合
         DeskTopPath = .SpecialFolders("Desktop") & "\"
     End With

     'もし、配布用ブックが開いていたら閉じる.その後削除しておく
     On Error Resume Next
         Workbooks(ManagerFL).Close False
         Workbooks(VolunteerFL).Close False
         If Dir(DeskTopPath & ManagerFL) Then Kill DeskTopPath & ManagerFL
         If Dir(DeskTopPath & VolunteerFL) Then Kill DeskTopPath & VolunteerFL
     On Error GoTo 0

     '担当者用ブックの作成
     ThisWorkbook.Sheets(Array(schedule, "名簿")).Copy
     Set wbManager = Workbooks(Workbooks.Count)
     wbManager.SaveAs Filename:=DeskTopPath & ManagerFL, FileFormat:=xlOpenXMLWorkbook, Password:="otsukare"

     'ボランティア用ブックの作成
     ThisWorkbook.Sheets(schedule).Copy
     Set wbVolunteer = Workbooks(Workbooks.Count)
     wbVolunteer.SaveAs Filename:=DeskTopPath & VolunteerFL, FileFormat:=xlOpenXMLWorkbook

     Set targetWs = wbVolunteer.Sheets(schedule) '書き出し先シートをセット
     targetWs.Range("B5:D10000,G5:H10000").Value = Empty

     Set dicT = CreateObject("Scripting.Dictionary") '全ボランティア名を格納

     For Each v In wbManager.Worksheets("名簿").Range("B2:D45").Value
         If v <> "" Then
             v = Replace(Replace(v, " ", ""), " ", "")
             dicT(v) = Array(v, Len(v))
         End If
     Next

     With targetWs.Range("B1001").Resize(dicT.Count, 2)
         .Value = Application.Index(dicT.items, 0, 0)
         .Parent.Sort.SortFields.Clear
         .Parent.Sort.SortFields.Add Key:=Range("C1001"), SortOn:=xlSortOnValues, Order:=xlDescending
         .Parent.Sort.SetRange .Cells
         .Parent.Sort.Header = xlNo
         .Parent.Sort.Apply

         dicT.RemoveAll '氏名の再取得
         For Each v In .Columns(1).Value
             dicT(v) = Empty
         Next v

         .Cells.Clear '後始末
     End With

     With wbManager.Worksheets(schedule) '応募人数確認処理
         Set startRowCell = .Cells(5, "A")

         finalRow = .UsedRange.SpecialCells(xlLastCell).Row

         For i = 5 To finalRow

             If (IsDate(.Cells(i + 1, "A")) And .Cells(i + 1, "A") <> startRowCell) Or i = finalRow Then
                 '人数打ち出し
                 state = countVolunteerNum(.Range(startRowCell(1, "B"), .Cells(i, "D")), dicT, 10)
                 targetWs.Cells(startRowCell.Row, "B") = state

                 state = countVolunteerNum(.Range(startRowCell(1, "G"), .Cells(i, "H")), dicT, 7)
                 targetWs.Cells(startRowCell.Row, "G") = state

                 Set startRowCell = .Cells(i + 1, "A")
             End If
         Next i
     End With

     Application.ScreenUpdating = True
     dicT.RemoveAll

     Workbooks(ManagerFL).Save
     Workbooks(VolunteerFL).Save
 End Sub

 Private Function countVolunteerNum(rNames As Range, dicT As Object, fullNum As Long) As String
     Dim strNames As String
     Dim aCell As Range
     Dim testingNameFromDict As Variant
     Dim cnt As Long

     For Each aCell In rNames
         If aCell <> "" Then
             strNames = strNames & "♪" & Replace(Replace(aCell.Value, " ", ""), " ", "")
         End If
     Next aCell

     strNames = strNames & "♪"

     For Each testingNameFromDict In dicT.keys

         If strNames Like "*" & testingNameFromDict & "*" Then
             cnt = cnt + 1
             strNames = Replace(strNames, testingNameFromDict, "♪")
         End If
     Next

     Select Case cnt
         Case Is > fullNum: countVolunteerNum = Format(cnt, "超過(総数0人)")
         Case fullNum:  countVolunteerNum = "募集済み"
         Case Is < fullNum: countVolunteerNum = Format(cnt, "0名")
     End Select
 End Function

(半平太) 2022/06/22(水) 15:38


 こんにちは。
 お疲れさまです。

 # 15:38の投稿を見ずに以下コメント作成しましたので、既に解決済みなら失礼します。

 上記の判定ロジックの改定案ですが、
 複数の日に活動することを考えると、全然別の文字に変えてしまうのも穴がありそうです。

 正規表現で、
 ・文字列の先頭を表す "^" や
 ・文字列の末尾を表す "$" などを使って、
 "^林一|林一$|^山田太郎|山田太郎$" のようなパターンパッチを与えたとしても、
 林一郎なんてのがいると、林一と同一とみなしてしまいます。
 こんなのは林一の書き間違いだろうと思って前に進むしかないかも。

 「名前以外の文字列の記入を認めた」その時点で、
 正確な名前判別は不可能になってしまっている、という気がします。

 ま、しかしそれは理論上のことであって、
 ・担当者が責任者に報告する時点で、名前との突合せはしてもらうとか、
 ・名前以外の記入はやめてもらう、"検討中"などなんだという気がする。
 ・必要なら別枠に備考を追加する、
 とかいった運用でカバーすればよいのかもしれません。

 極端な話をすれば、
 名前とのマッチングはあきらめて、なんでも文字列が入っていればカウントしてしまう
 といったことでも機能するかもしれませんよ。
 そのために担当者なりがいらっしゃるわけで、その人たちが調整すれば済む話でしょう。
 余り複雑なものにしてしまわないほうが全体最適になるかもしれません。

 ==============
 まあ、ほかにも色々感ずるところはあります。
 ・どのグループからの応募者なのかといった情報も元ネタデータには必要でしょうし、
 ・結合セルを持ち込むことは、あとあとの処理でこれを常に念頭におかないといけないので、
   できれば避けたほうがよいと思います。
   たぶん方針を決める人は軽い気持ちで変更していると思いますよ。そうしたこと知らないんだから。

 ボランティアの方からのリクエストと言っても、
 それなりに検討する時間は必要になるものと思います。
 普通であれば、それなりの対価が必要かもしれません。

 半平太さんのご尽力で、既に大方を作成していただいていますが、
 メインテナンスしていけるかという問題もあるでしょう。
 こまごまとした希望もこれから出てくるでしょう。
 こちらのほうが実はもっと問題を含むものになるリスクがあります。

 プロジェクトとしての今後の対応方針のようなものを、
 このプロジェクトの責任者のかたを交えてきちんと議論する必要があると思います。

 # 「製作者」という名称は、ちょっと見には、マクロを製作する人かと思ったらそうではなく、
 # プロジェクトの責任者というような意味なんですね。
 # マクロなどをメンテナンスしていく人は誰なんですかねえ。

 なお、私はRead Only Memberになりますと申し上げたが、
 それに関係したHNで発言される方がいます。
 私とは一切関係がないことを念のため申し添えます。
 今回の発言の意図は実はここにあります。ちょっとひどい発言ではないですか。

(γ) 2022/06/22(水) 16:21


半平太さま
有難うございました。

お昼頃、半平太さまのコードをコピーしている時に、緊急事態が発生しましたので、すぐに外出、
先程、戻って来ました。 今から確認をします。

(愛子) 2022/06/22(水) 18:33


半平太さま
名前から人数の割り出しがうまく行きました。本当に嬉しかったです。

そこで、少しご要望がありますので、出来ましたらで結構ですが、ご配慮頂けますか?
その前に何回かマクロを走らせていましたが、エラーが初めて出ました。

1、マクロのエラー
今まで、色々確認をするためにマクロを走らせてもエラーはなかったのですが、
先程、走らせましたら、
●実行時エラー
“インデックスが有効範囲にありません”
デバッグのボタンを押すと
'担当者用ブックの作成 のところに黄色の斑点が付きます。

  ThisWorkbook.Sheets(Array(schedule, "名簿")).Copy

ここからは、確認しましたことと、要望です。

2、名前の前後に名前と違う文字を付けても名前をカウント出来ました。

   (担当者用で入力された名前の件数と、ボランティアの表での人数が一致したことを確認しました。)
3、パスワード要求が出ませんが。

4、マクロが走った時にファイルが出ますのは、担当者用.xlsx とvolunteer用.xlsx
  担当者用.xlsm(マクロ)と そのコピーのvolunteer用xlsmと
VBAのコードが、画面の下に横1列になって出ています。

拡張子が.xlsm で各担当者とボランティアの人に送るファイルだけが残るように
して頂けると製作者が見易いので有り難いです。

下記のコードは、関係しますか?
'もし、配布用ブックが開いていたら閉じる.その後削除しておく

     On Error Resume Next
         Workbooks(ManagerFL).Close False
         Workbooks(VolunteerFL).Close False
         If Dir(DeskTopPath & ManagerFL) Then Kill DeskTopPath & ManagerFL
         If Dir(DeskTopPath & VolunteerFL) Then Kill DeskTopPath & VolunteerFL
     On Error GoTo 0

5、volunteer用.xlsmのファイル名をボランティア用.xlsmに変更出来ますか?
  (ファイルを作成し直す時があった場合に、作って頂きやすいかと思っただけです)

6、担当者用.xlsx とvolunteer用.xlsx (配布用の名前を担当者へ配布、volunteerへ配布、
 とファイル名を変更出来ますか?製作者がわかり易いかと思いまして)
元の各xlsmのコピーを取って拡張子をxlsxとしているのでしょうか?
お手間を掛けるのでしたら結構です。

以上です。

よろしくお願いします。

(愛子) 2022/06/22(水) 22:24


追伸:
私が遅くなってしまいましたので、明日にしてください。

(愛子) 2022/06/22(水) 22:28


今、ファイルを閉じたのですが、もう一度トライしよとしましたら、
マクロがうまく走りました。何故かわかりませんが、良かったと思います。
明日、マクロを再度確認をします。

マクロに時間をおかけしてはいけませんので、取り急ぎ報告しました。
(愛子) 2022/06/22(水) 22:36


パスワードは、うまく出来ました。

(愛子) 2022/06/22(水) 23:03


 >2、名前の前後に名前と違う文字を付けても名前をカウント出来ました。
 >   (担当者用で入力された名前の件数と、ボランティアの表での人数が一致したことを確認しました。)
 そうなるように作ってあります。

 >4、マクロが走った時にファイルが出ますのは、担当者用.xlsx とvolunteer用.xlsx
 >VBAのコードが、画面の下に横1列になって出ています。
 >拡張子が.xlsm で各担当者とボランティアの人に送るファイルだけが残るように
 >して頂けると製作者が見易いので有り難いです。
 新規作成する2つのエクセルファイルは「.xlsx」のみです。
 4つのブックがあると言うのはちょっと理解できません。

 担当者用.xlsm(マクロ)と そのコピーのvolunteer用xlsmに関しては、
 私は関知しておりません。

 今回の構想は、こうですよ。(3つのブックしか関係しません)
         ↓
 >(1)製作者は今まで通りの方法で、担当者用ブック(今後は元ネタブックと呼ぶことになる)を完成させる。
 >(2)元ネタブックにマクロを仕込む。
 >    マクロには、「担当者送付用」と「ボランティア用」の2つのブックを新規に作らせる。

 >下記のコードは、関係しますか?
 >'もし、配布用ブックが開いていたら閉じる.その後削除しておく
 >     On Error Resume Next
 >         Workbooks(ManagerFL).Close False
 >    ・ ・ ・ ・ ・
 >     On Error GoTo 0
 多分関係しないと思います。
 古い「担当者送付用」と「ボランティア用」は、上記構想を実行する過程で邪魔になるので、
 処理に先だって、消えていただくようにしてあります。

 >5、volunteer用.xlsmのファイル名をボランティア用.xlsmに変更出来ますか?
 >  (ファイルを作成し直す時があった場合に、作って頂きやすいかと思っただけです)
 なぜ「.xlsm」なんですか?
 こちらは人に渡すブックは「.xlsx」しか想定していないのですが、
 何かマクロを利用させることがあるのでしょうか?

 これについては、そちらの回答を得てから、考えます。

 >6、担当者用.xlsx とvolunteer用.xlsx (配布用の名前を担当者へ配布、volunteerへ配布、
 > とファイル名を変更出来ますか?製作者がわかり易いかと思いまして)

 ここを変えれば名前は変わります。
      ↓
     Const ManagerFL As String = "担当者用.xlsx"      '→担当者へ配布.xlsx
     Const VolunteerFL As String = "Volunteer用.xlsx"  ’→volunteerへ配布,xksx

 >元の各xlsmのコピーを取って拡張子をxlsxとしているのでしょうか?
 うーん、シートのコピーを取ると、新規ブックが出来るんですけど、答えになっていますか?

(半平太) 2022/06/22(水) 23:20


計、3つのファイルがあること、改めて理解しました。

>(1)製作者は今まで通りの方法で、担当者用ブック(今後は元ネタブックと呼ぶことになる)を完成
    させる。
>(2)元ネタブックにマクロを仕込む。
>    マクロには、「担当者送付用」と「ボランティア用」の2つのブックを新規に作らせる。

古い「担当者送付用」と「ボランティア用」は、上記構想を実行する過程で邪魔になるので、 処理に先だって、消えていただくようにしてあります。

理解出来ました。

>こちらは人に渡すブックは「.xlsx」しか想定していないのですが、
>何かマクロを利用させることがあるのでしょうか?

マクロを利用させることはありません。ただ2つのファイル(担当者とvolunteerのファイル名を
作るときにカタカナの方が製作者の人が入力しやすいのではと思っただけです。volunteerで行きます(笑)

>ここを変えれば名前は変わります。

      ↓
     Const ManagerFL As String = "担当者用.xlsx"      '→担当者へ配布.xlsx
>     Const VolunteerFL As String = "Volunteer用.xlsx"  ’→volunteerへ配布,xksx
有難うございます。

>シートのコピーを取ると、新規ブックが出来るんですけど、答えになっていますか?
シート名のところで右クリック→移動またはコピーをクリック、移動先ブック名、コピーを作成に✔を入れる
ようなものですね。

もし、将来、項目の列が増減することがあれば、名前を入れる列の範囲は、
下記の( )内を変更するだけで良いのですか?

  targetWs.Range("B5:D10000,G5:H10000").Value = Empty							

最後に、募集済み、超過(総数xx人)もわかり易いので有り難いです。(そのように作ったといわれそうですが(笑)感謝です。)

以上です。

最後に、製作者が作成する表は、色々付属的なものがありますが、今回、作成して頂いたフォームを基準に
付属的なものを解消して行き、各ボランティアの人→各担当者→世作者までのプロセスを
再検討して、半平太様、他の方々にご迷惑をかけないようにします。

(愛子) 2022/06/23(木) 01:20


一度に思いつかずにすみません。

下記は、どういう(”♪”を含めて)意味ですか?
ネットで調べましたがヒットしませんでした。

 strNames = strNames & "♪" & Replace(Replace(aCell.Value, " ", ""), " ", "")

下記のコードで数値5は、何を表しているのでしょうか? 

現在、日と曜日で各日の行数は、8行です。
先で、もし行数を変更される場合を想定しましたら、どこを修正すれば宜しいか教えて頂けますか?
(出来る限り、8行で済みますように上のかたにはお伝えしますが)

 With wbManager.Worksheets(schedule) '応募人数確認処理					
         Set startRowCell = .Cells(5, "A")					

         finalRow = .UsedRange.SpecialCells(xlLastCell).Row					

         For i = 5 To finalRow		

よろしくお願いします。

(愛子) 2022/06/23(木) 09:45


1、今、色々確認をしている時に、担当者用.xlsmと 担当者用.xlsx とvolunteer用.xlsxとVBAのコードの  4画面が下に表れてます。?

  流れ:
  マクロを走らせ、展開を見ていますとまず、画面表示は、
  担当者へ配布.xlsm(担当者用から変更しました。)のVBAコードのユーザフォームの実行ボタンを
  クリック、(まだボタンは作っていませんので。)→担当者へ配布.xlsmの画面 →再度VBAのコード
  表示→担当者へ配布.xlsx、で止まります。

2、一旦閉じて再度開いた、担当者用xlsx と Volunteer用.xlsx ですが、担当者用xlsxにつきましては、
  名前が出た後で、パスワードが出ます。Volunteer用.xlsxにつきましては、名前が出た後で、人数に
  変換されます。? 

  経過:
  担当者用xlsx の画面を×印して消しました。デスクトップから再度、担当者用xlsx を開きました。
  そしたらパスワードが出る前に名前が出ました。その後で画面の下にあるエクセルのマークが点滅して
  クリックするとパスワードの画面が表示されました。当然、パスワードを入力すれば名前が見えます。

  Volunteer用.xlsx も一旦閉じた後で再度開くとやはり一旦名前が出た後で、すぐに人数に変わりま
  した。

  よろしくお願いいたします。

 

(愛子) 2022/06/23(木) 13:05


上記2、一旦閉じて再度開いた、担当者用xlsx と Volunteer用.xlsx ですが、担当者用xlsxにつきまし  ては、名前が出た後で、パスワードが出ます。Volunteer用.xlsxにつきましては、名前が出た後で、
 人数に変換されます。? 

2、について、当初うまく行っていたのですが(Volunteer用.xlsx 名前が表示されずに人数の変換、
担当者用xlsx 開いた時に名前が見えず、パスワードで名前が見えます)、

何回しても2、の状態に
なりますので、それで、半平太さまの作られたコードを入れ替えました。しかし2・3回繰り返しても
同じ状態だったのですが、

結果:その次から5回くらい繰り返しましたが、当初と同じようにうまく行きました。(コード等、何もいじっていません)

もうこれで上記2、にならなければ良いのですが。
(愛子) 2022/06/23(木) 14:49


  >>シートのコピーを取ると、新規ブックが出来るんですけど、答えになっていますか?
  >シート名のところで右クリック→移動またはコピーをクリック、移動先ブック名、コピーを作成に?を入れる
  >ようなものですね。
  そうなります。

  >もし、将来、項目の列が増減することがあれば、名前を入れる列の範囲は、
  >下記の( )内を変更するだけで良いのですか?
  >targetWs.Range("B5:D10000,G5:H10000").Value = Empty
  今回、拡張性はほとんど考慮していないです。
  列の増減(+定員の変更)、場所の増減、ボランティア名簿の増減くらいが直ぐに思いつきますね。

  下記の様に変更があったと想定した例を示しますので、応用してください。
  ※こちらではテストしておりません。あしからず。

   ボランティア名簿 → B2:E50
   場所Aの列     → B〜E列 定員14
   場所Bの列     → H〜J列 定員12
   場所Cの列     → M〜N列 定員6

  1.ボランティア名簿の範囲の修正
  >  For Each v In wbManager.Worksheets("名簿").Range("B2:D45").Value
     ↓
    For Each v In wbManager.Worksheets("名簿").Range("B2:E50").Value

  2.クリア先の修正
  > Set targetWs = wbVolunteer.Sheets(schedule) '書き出し先シートをセット
  > targetWs.Range("B5:D10000,G5:H10000").Value = Empty
    ↓
     Set targetWs = wbVolunteer.Sheets(schedule) '書き出し先シートをセット
     targetWs.Range("B5:E10000,H5:J10000,M5:N10000").Value = Empty

  3.人数への変換処理の修正
  >   '人数打ち出し
  >   state = countVolunteerNum(.Range(startRowCell(1, "B"), .Cells(i, "D")), dicT, 10)
  >   targetWs.Cells(startRowCell.Row, "B") = state
  >   
  >   state = countVolunteerNum(.Range(startRowCell(1, "G"), .Cells(i, "H")), dicT, 7)
  >   targetWs.Cells(startRowCell.Row, "G") = state
     ↓
       '人数打ち出し
       state = countVolunteerNum(.Range(startRowCell(1, "B"), .Cells(i, "E")), dicT, 14)
       targetWs.Cells(startRowCell.Row, "B") = state

       state = countVolunteerNum(.Range(startRowCell(1, "H"), .Cells(i, "J")), dicT, 12)
       targetWs.Cells(startRowCell.Row, "H") = state

       state = countVolunteerNum(.Range(startRowCell(1, "M"), .Cells(i, "N")), dicT, 6)
       targetWs.Cells(startRowCell.Row, "M") = state

 >下記は、どういう(”♪”を含めて)意味ですか?
 > strNames = strNames & "♪" & Replace(Replace(aCell.Value, " ", ""), " ", "")
 応募者の名前を連結しているのですが、
 その際、姓名の中間にあるかも知れないスペース(全角、半角)を除いているのと、
 名前同士がくっつかない様に♪印で区切るものです。
 例:山田広大と森一郎を単にくっつけると、山田広大森一郎となってしまい、
 大森一郎さんが別にいるとミスヒットするので、

 >下記のコードで数値5は、何を表しているのでしょうか? 
 最初の日付はA5セルと決まっているので、それをスタート行セルとして認識させています。
 ※次の日のスタートは多分A13セルでしょうが、
  それはForNextループの中で動的に認識させています。
         ↓
 >          Set startRowCell = .Cells(i + 1, "A")
 >       End If
 -------------------------------

 >1、今、色々確認をしている時に、担当者用.xlsmと 担当者用.xlsx とvolunteer用.xlsxとVBAのコードの  4画面が下に表れてます。?
 >  流れ:
 >  マクロを走らせ、展開を見ていますとまず、画面表示は、
 >  担当者へ配布.xlsm(担当者用から変更しました。)のVBAコードのユーザフォームの実行ボタンを
 >  クリック、(まだボタンは作っていませんので。)→担当者へ配布.xlsmの画面 →再度VBAのコード
 >  表示→担当者へ配布.xlsx、で止まります。
 ちょっと、よく分かりません。
  元ネタブックは何というファイル名ですか?
  担当者へ配布するブックは何というファイル名ですか?
  ボランティアへ配布するブックは何というファイル名ですか?

 >2、一旦閉じて再度開いた、担当者用xlsx と Volunteer用.xlsx ですが、担当者用xlsxにつきましては、
 >  名前が出た後で、パスワードが出ます。Volunteer用.xlsxにつきましては、名前が出た後で、人数に
 >  変換されます。?
 ちょっと、よく分かりません。
 全部閉じてから、担当者用xlsx と Volunteer用.xlsxを開いてみてください。

 >何回しても2、の状態になりますので、
 >それで、半平太さまの作られたコードを入れ替えました。
 「入れ替えた」???
  では、入れ替える前は、何のコードだったんですか?(ちょっと事情が呑み込めないのですが)

(半平太) 2022/06/23(木) 17:05


下記の質問までは、わかり易い説明で理解できました、そして変更時の修正、有難うございました。

元ネタブックは何というファイル名ですか? 担当者用.xlsmです。

担当者へ配布するブックは何というファイル名ですか? 担当者用.xlsxです。 ボランティアへ配布するブックは何というファイル名ですか? Volunteer用.xlsxです。

>2、一旦閉じて再度開いた、担当者用xlsx と Volunteer用.xlsx ですが、担当者用xlsxにつきましては、

 >  名前が出た後で、パスワードが出ます。Volunteer用.xlsxにつきましては、名前が出た後で、人数に
 >  変換されます。?
 ちょっと、よく分かりません。
全部閉じてから、担当者用xlsx と Volunteer用.xlsxを開いてみてください おっしゃるように、全部閉じて担当者用xlsx と Volunteer用.xlsxを開きました結果がそういう事です。

>それで、半平太さまの作られたコードを入れ替えました。

 「入れ替えた」???
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
>ここを変えれば名前は変わります。と教えて頂いたので、半平太さんのコードに入れ替える前は、
下記のコード(名前の変更のみ)を変更しただけです。               
              ↓
     Const ManagerFL As String = "担当者用.xlsx"      '→担当者へ配布.xlsx
     Const VolunteerFL As String = "Volunteer用.xlsx"  ’→volunteerへ配布,xksx

以上です、よろしくお願いします。

(愛子) 2022/06/23(木) 18:27


 >元ネタブックは何というファイル名ですか? 担当者用.xlsmです。
 >担当者へ配布するブックは何というファイル名ですか? 担当者用.xlsxです。 

 そんな紛らわしい名前を付けるのはミスの元です。
 元ネタブックは製作者用.xlsmに変更してください。

 >全部閉じてから、担当者用xlsx と Volunteer用.xlsxを開いてみてください 
 >おっしゃるように、全部閉じて担当者用xlsx と Volunteer用.xlsxを開きました結果がそういう事です。

 パスワードを聞いてきて、それに答える前にシートの内容が見えるなんてことが起きるハズはありません。
 本当に全部のエクセルブックを閉じましたか?
 (製作者用のブックも閉じましたか?)

(半平太) 2022/06/23(木) 19:37


>そんな紛らわしい名前を付けるのはミスの元です。
私も紛らわしいと思いましたので、半平様に名前の変更方法ををお伺いしました。

ここを変えれば名前は変わります。

      ↓
     Const ManagerFL As String = "担当者用.xlsx"      '→担当者へ配布.xlsx
     Const VolunteerFL As String = "Volunteer用.xlsx"  ’→volunteerへ配布,xksx
  
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

>担当者へ配布するブックは何というファイル名ですか? 担当者用.xlsxです。上記を見て入力しました。 私の記載ミスです。正しくは、担当者送付用.xlsxです。 すみませんでした。 コードも元々そのように
 なっています。

 元ネタブックは何というファイル名ですか? 担当者用.xlsmです。(ここは、正しいです)

・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

>元ネタブックは製作者用.xlsmに変更してください。
 はい、そのように変更します。
 *制作者用.xlsmは、ファイル名であって、マクロのコードで関連修正するものはないですね。

・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

>本当に全部のエクセルブックを閉じましたか?
> (製作者用のブックも閉じましたか?)
はい。全部、閉じました。 
今は、担当者送付用は、名前が出る前にパスワードの問い合わせが出ます。
Volunteer用は、名前が出なく人数が出ます。

・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
後(重複しますが)、マクロを走った後、
担当者用xlsm、担当者送付用xlsx、VBAのコード、Volunteer用.xlsxの表は、PCデスクトップの一番
下にワードのW、エクセルのX、その他、アイコン が並んでいるところの、エクセルのXに重なって
ます。

マウスポインターをそこに持って行きますと4つ別れて表が出ています。
今でも出ます。半平太様はそれは、おかしいとおっしゃっていますのに、申し訳ないのですが、

コードの中でマクロが終われば、全部閉じる(当然、今まで通り担当者用送付用xlsx と Volunteer用.xlsx
は、自動的に作られていますから)ように出来ませんか?

よろしくお願いします。

(愛子) 2022/06/23(木) 23:49


質問をすることを忘れていました。

前に5と言うのは行の最初です、と教えてもらったのですが、
1日分は、日にちと曜日で8行使いますが、下記のコード(違うかもしれませんが)のどこで1日の人数を
計算しているのでしょうか?

    With wbManager.Worksheets(schedule) '応募人数確認処理	
         Set startRowCell = .Cells(5, "A")	

         finalRow = .UsedRange.SpecialCells(xlLastCell).Row	

         For i = 5 To finalRow	

             If (IsDate(.Cells(i + 1, "A")) And .Cells(i + 1, "A") <> startRowCell) Or i = finalRow Then	
                 '人数打ち出し	
                 state = countVolunteerNum(.Range(startRowCell(1, "B"), .Cells(i, "D")), dicT, 10)	
                 targetWs.Cells(startRowCell.Row, "B") = state	

                 state = countVolunteerNum(.Range(startRowCell(1, "G"), .Cells(i, "H")), dicT, 7)	
                 targetWs.Cells(startRowCell.Row, "G") = state	

                 Set startRowCell = .Cells(i + 1, "A")	
             End If	
         Next i	

(愛子) 2022/06/24(金) 00:02


 >*制作者用.xlsmは、ファイル名であって、マクロのコードで関連修正するものはないですね。
 その通りです。

 >マウスポインターをそこに持って行きますと4つ別れて表が出ています。 
 申し訳ないです。私の勘違いです。
 何を言っているのかよく分からなかったので、4つのブックがあるのかと思ってしまいました。
 その状況で問題はありません。

 >コードの中でマクロが終われば、全部閉じる(当然、今まで通り担当者用送付用xlsx と Volunteer用.xlsx
 >は、自動的に作られていますから)ように出来ませんか?

 以下に変更してください。製作者用は残します。

  >     Workbooks(ManagerFL).Save
  >     Workbooks(VolunteerFL).Save
  > End Sub
         ↓ 
        Workbooks(ManagerFL).Close True
         Workbooks(VolunteerFL).Close True
        ThisWorkbook.Save
         MsgBox "所要ブック作成完了"
     End Sub

 >1日分は、日にちと曜日で8行使いますが、下記のコード(違うかもしれませんが)のどこで1日の人数を
 >計算しているのでしょうか?

 (1)1日分の行数の判定に関する話ですかね?

  > For i = 5 To finalRow	
  >    If (IsDate(.Cells(i + 1, "A")) And .Cells(i + 1, "A") <> startRowCell) Or i = finalRow Then

  スタート行(最初は5行目)から順に下を見て、i行の一つ先が「日付セル、且つスタート日と違う」場合、
  iが計算すべき当日の最終行となる。(必ずしも8行とは決まってないので、動的に判別しています)

 (2)本当に1日分の人数の計算に関する話ですか?

  >  '人数打ち出し	
  >  state = countVolunteerNum(.Range(startRowCell(1, "B"), .Cells(i, "D")), dicT, 10)	
  >  targetWs.Cells(startRowCell.Row, "B") = state

  上記(1)で求めた1日分の募集名範囲、つまり「スタートセル(startRowCell)の一つ右のセル〜i行のD列まで」の範囲を
  引数として Function countVolunteerNum() に渡して計算させています。

   > Function countVolunteerNum(rNames As Range,・・
   > ・ ・ ・ ・
  >    For Each testingNameFromDict In dicT.keys
  >    
  >        If strNames Like "*" & testingNameFromDict & "*" Then
  >            cnt = cnt + 1
  >            strNames = Replace(strNames, testingNameFromDict, "♪")
  >        End If
  >    Next

    応募名範囲のデータには名前以外の書き込みもあるので、
    あらかじめ strNames に応募名範囲のデータを全て連結して、
    そのstrNames の中に名簿シートの名前が含まれているか調べる(※)。

    ※dicTから名前の長い順に一つずつ取り出して、Like演算子で存在確認をする。(Trueが返れば「1人見っけ」となる。)
     見つけたら cnt をカウントアップして、見つけた名前はstrNamesから消去する。
     消去して置かなければならない理由は以前書きました。
                     ↓
    >『例えば、中林一郎と林一(はじめ)の区別がつかなくなると言うことです。 中林しかいないのに、林もカウントされてしまう。』

(半平太) 2022/06/24(金) 09:07


こんな事言ったら身も蓋もないのですが
本当に簡単なコード(range,for-next等)も分からない人に
コードの内容を説明してもどれほど理解しているか?

完全にコード作成の丸投げ依頼状態で
後で変更箇所が出てきても自前で変更できるとは到底思えません。

無駄とは言いませんが
いつまで経ってもこのスレの終了が見えません。

(ROMながら) 2022/06/24(金) 11:24


半平太様
こんにちは、
色々、有難うございます。

>コードの中でマクロが終われば、全部閉じる(当然、今まで通り担当者用送付用xlsx と Volunteer用.xlsx
>は、自動的に作られていますから)ように出来ませんか?
> 以下に変更してください。製作者用は残します。

変更しましてうまく行きました。有難うございます。

>スタート行(最初は5行目)から順に下を見て、i行の一つ先が「日付セル、且つスタート日と違う」場合、

  iが計算すべき当日の最終行となる。(必ずしも8行とは決まってないので、動的に判別しています)

>応募名範囲のデータには名前以外の書き込みもあるので、

    あらかじめ strNames に応募名範囲のデータを全て連結して、
    そのstrNames の中に名簿シートの名前が含まれているか調べる(※)。

> ※dicTから名前の長い順に一つずつ取り出して、Like演算子で存在確認をする。(Trueが返れば
 「1人見っけ」となる。)

   見つけたら cnt をカウントアップして、見つけた名前はstrNamesから消去する。
> 消去して置かなければならない理由は以前書きました。

今までの、私のコードの質問に対して、半平太様の答えを何回も読み直し、そのコードを何回も
見ながら理解しようとしました。コードは書けませんが、わかり易い説明でしたので、何回も読み直し
意味を理解しました。

・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
以上ですが、当該「名前の表示を人数に変更他」は、これで、終わります。

半平太様には、多大な尽力とお時間を費やして頂き有難うございました。と同時に申し訳ございませんで
した。
これから暑くなりますので、ご自愛ください。

そして当該質疑応答に関係して頂いた皆様、そして答えは出さずともお読みくださってお考えをして頂いた
方々、私に注意を与えて頂いた方々に、お礼を申し上げます。

どうぞ、ご自愛ください。

(愛子) 2022/06/24(金) 16:29


コメント返信:

[ 一覧(最新更新順) ]


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