5倍速!メールマガジン
外部アカウントで登録
受講生の声
新着の講座投稿
新着の講座コメント
新着のノート投稿
投稿一覧へ新着のノートコメント
表示できる投稿はありません。
サイト運営者紹介
小川 慶一講師/教材/システム開発者紹介
この学習サイトの教材制作、サポート、システム開発をすべてやっています。
表示できる投稿はありません。
この学習サイトの教材制作、サポート、システム開発をすべてやっています。
きういさんの投稿
(投稿ID: 5537) 添付ファイルのダウンロード権限がありません
素晴らしい講座を提供していただきありがとうございます!質問があります。
こちらで勉強したコードを早速仕事で使おうと思い、
Select Caseでによって列に表示される内容を変えるものを書きましたが、日付の認識?がおかしいものがあります。
GW前に職場でひっそりと撮ったスクリーンショットで恐縮です。(Tabで見やすくする癖を定着できておらず反省しています)
書いたコードの内容は、
指定のセルにある日付の年月によって、その隣の2列に条件に合った該当の内容を表示するものです。
指定のセルの日付が「前月以前」「当月」「翌月」「翌々月以降」であるかを表示する列と、
指定のセルの年月が「前月以前」とであれば「前月以前」と表示し、当月以降であればそのまま指定のセルの日付を表示する列です。
そこで本題の質問ですが、
「今年の10月、11月、12月」に限って、過去の日付と認識されてしまいます。
過去の日付、今年の9月まで、来年以降については問題なく動作します(月や年、確認するセルの位置を変えて確認)。
月が2桁であることが問題そうかなと思ったのですが、そこからどうしたらいいかわからず行き詰まっています。
お知恵を拝借できたら幸いです。どうかよろしくお願いします。
追伸
以前からネットで拾ってきたコードをなんとなく修正していくつもコードを書いていたのですが、自分で更から書くことはできませんでした。今回こちらで基礎の基礎から勉強させていただき、今までなんとなくやっていた点がつながってきています。毎回学びがあり、気付きがあり、何より楽しいです。本当にありがとうございます!
きういさんのコメント
(コメントID: 8340) 添付ファイルのダウンロード権限がありません
問題の部分で説明が不足しておりました。
「今年の10月、11月、12月」に限って、過去の日付と認識され、「前月以前」と両方の列に表示されてしまう、という意味です。
本来は、「翌々月以降」「セルの日付そのまま」が表示されるはずのものです。
小川 慶一さんのコメント
(コメントID: 8341)
おー、お役に立てているようでうれしく思います (^^*
日付の文字列化は Format 関数を使うのが良いかと思います。
以下の2つのマクロを実行してみてください。
どういう問題が生じているか、そして、 Format 関数を使うことによってその問題をどのように回避しているかが分かるかと思います。
小川 慶一さんのコメント
(コメントID: 8342)
小川 慶一さんのコメント
(コメントID: 8343)
以下でどうでしょうか。(月最終日を求めるのが面倒くさいのは仕方ないです)
きういさんのコメント
(コメントID: 8344)
早速ありがとうございます!!できました!!!何日も格闘していたので冗談抜きでうれしくて泣きそうです。本当にありがとうございます!!
日付は文字列に変換して桁数を合わせないといけないのですね。データ型の理解がよくできていなかったのだなと実感しました。小川先生にアドバイスいただいたように、以下のように日付を文字列にする段階を入れたことで解決しました!どこかの誰かの参考になるかもわかりませんので残しておきます。
GW明けに早速職場のデータを修正するのにわくわくしています。まだまだ講座の序盤ですが、もっと先に進んでいろいろできるようになるのが楽しみです!ありがとうございました!!
きういさんのコメント
(コメントID: 8345)
きういさんのコメント
(コメントID: 8346)
文字列にして解決して喜んでいたのですが、月初と最終日を求める方法はスマートですね!
自分の知識では到底思いつかない書き方なので、こういった方法があるのだなと感動しました。ご記載いただいたものをしっかりと自分で理解して書けるように勉強させていただきます!
小川 慶一さんのコメント
(コメントID: 8347)
その後、月末日を算出する必要もなく、もっとシンプルなコードを書けることに気づきました。
ということで、以下のコードを示します。これなら、マネしてみたいと思えるのではないでしょうか。
「"202404" とか "202310" とかいう文字列を作ってこれらの大小を比較する」ということでもいちおう動きますが...。
「文字列を作り、それを数値とみなして演算する(大小を比較する)」というのは、あまりスマートではないです。
その方法であっても解決できればまずは十分ですが、「日付のまま比較する」という選択肢も選べるように練習に取り組んでいただければとも思います (^^*
きういさんのコメント
(コメントID: 8349)
またもやありがとうございます!!目指しているものは同じなのに、そういった考え方をするのかととても勉強になりました。自分が最初に考えたものを実現させるというので留まってしまっておりましたが、そもそもこの道筋でいいのかと考えることの大切さを実感しました。もちろん最初にお返事をいただき、なんとかそれで動作するようにした過程で学んだこと(なぜ特定の年月についてだけうまく動作しなかったのか)も計り知れません。また、自分は今あるデータをどうするかといった「エクセルの関数でやるようなことをマクロ化したらどうなのか」的発想だったのですが、最初から変数に基準となる日付を入れるという方法を拝見して視界が開けたような気分です。また、Select Caseでは結果を表示するとこまではいれないといったところなど、細かいところまで学びが多くとてもうれしいです。感謝の念に堪えません・・・
これからも練習し、発想の引き出しを増やせるようにしていきたいです!
ありがとうございました!
小川 慶一さんのコメント
(コメントID: 8350)
お役に立てたようでよかったです (^^
> そもそもこの道筋でいいのかと
そこは、抽象的な理解が進むことと、具体的な実装と多く関わることで、次第にいろいろ見えてくるようになるかと思います。
>Select Caseでは結果を表示するとこまではいれないといったところなど、細かいところまで学びが多くとてもうれしいです。
講座でもいちおう扱ってはいます。
ですが、最初は見逃してしまいますよね。(復習大事です。初見のときには見落としていたこと、ピンとこなかったことなど、バシバシ入ってくるようになります)
ひきつづき、エクセルマクロでの成果をお楽しみください (^^*