添付画像のような時間の表があるとき
8:40~17:05までの時間の中で
抜けている時間を取得したいです。
例
9:30~10:00までが抜けいる
ユーザーフォームのテキストバボックス1に9:30
テキストボックス2に10:00 といった感じです。
同じように13:30~14:45までが抜けている
テキストボックス3に13:30 テキストボックス4に14:45
同じように16:30~17:00までが抜けている
テキストボックス5に16:30 テキストボックス6に17:00
ただし、11:25~12:20は抜けていても取得の必要はありません(必ず抜ける部分)
もしこのような動作が可能であればご教示をお願いいたします。
No.2ベストアンサー
- 回答日時:
こんにちは
>もしこのような動作が可能であればご教示をお願いいたします
もちろん可能でしょう。
以下に、例として考え方を2つ挙げておきます。
(他にもいろいろあるとは思いますけれど…)
◇方法1 ごく簡単な方法として作業列を利用する方法
(あまりやる人はいないかも知れませんけれど、考える必要がないので簡単です)
単位時間(例えば1分)を1セルとして、作業列の各セルを8:40~17:05に対応させておきます。
(1分単位なら、505行分のセル)
ご提示の時間帯に相当するセルを、順にマーキングしてゆきます。
(マーキングは、「〇」などを記入しても良いし、色塗りとかでも良い)
全部の時間帯をマーキングしたら、空白セルで残っている時間帯が求める時間帯になっています。
(11:25~12:20を除くのなら、あらかじめそこにもマーキングしておけば良いです)
◇方法2 普通に時間帯を計算する方法
連続する時間帯を表すのに(開始時刻、終了時刻)の二つの時刻で表すものとします。
全体の時間帯(仮にAとする)から除きたい時間帯群B(=ご提示の表の時間帯群)を順に除いて行って、残った時間帯が求める時間帯になると考えられます。
時間帯Aとb(=時間帯群のうちの一つの時間帯)を比較した場合に起こり得る関係は以下の4種類です。
①Aとbには重複部分はない
②Aにbが完全に含まれる
③Aがbに完全に含まれる
④Aとbは一部分で重複する
それぞれの場合に、以下の処理を行うものとします。
①’なにもしない
②'Aからbを除いた2つの時間帯a1、a2にAを分ける
③'Aは(全部除かれるので)消滅する
④'Aを重複部分を除いた時間帯に再定義する
これをBの数だけループすれば、結果として求める時間帯が得られることがわかると思います。
②'の処理を考慮すると、あらかじめAの時間帯は可変の配列として考えておいた方が便利で、昼の時間を除くのなら、(8:40~11:25)、(12:20~17:05)の2つの時間帯からスタートすれば良いことになります。
(一つの時間帯で初めて、最後に、11:25~12:20を除いても同じ結果になるでしょう)
文章で書くと長いですけれど、基本的には上記の①~④を判定して、①'~④'の処理を記述できれば、後はそれをループさせれば良いだけになります。
Aの時間帯も複数で、Bの時間帯群も複数なので、それぞれを順に2重のループで処理すれば良いことになるでしょう。(数が変わる可能性のあるAのループを内側にしておいた方がよさそうに思います)
No.1
- 回答日時:
ごめんよ。
と、先に謝っておきます。
まずはどうやって、時間が連続していない事を確認するかという
アルゴリズム
を考えるようにしましょう。
VBAってプログラムなんです。
Visual Basic for Application という Vidual Basic 系 のプログラム言語なんですね。
そんなわけで、まずは問題を解くための手順を考える必要があります。
質問者さんが手作業でその処理を行うときの手順を1ステップずつ書き出してみましょう。
その手順をそっくりそのままプログラムにすれば良いのです。
そのうえで分からない点をピンポイントで質問すると良いでしょう。
例:
「手作業でもできないのでアルゴリズムなんて無理。手順を教えてください。」
「時間の比較のしかたが分かりません。1つ目のデータと他のデータを比較する方法を教えてください。」
…等。
・・・
「そんなことどうでも良いから、今すぐ使えるコードを寄こせ」
という事であれば、有料サイトで代価を支払って制作委託することをお勧めします。
ここは「代わりに作ってくれる」場所ではなく「自分で作るために必要なアドバイスを受ける」場所なんです。
・・・余談・・・
基本的な事を聞きたい人にはコードの例をあげて回答することもあります。
たまたまその例が質問に対する直接の回答であることもある。
たまたまですよ。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
あるあるbotに投稿したけど採用されなかったあるある募集
あるあるbotに投稿したけど採用されなかったあるあるをこちらに投稿してください
-
フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
あなたが普段思っている「これまだ誰も言ってなかったけど共感されるだろうな」というあるあるを教えてください
-
映画のエンドロール観る派?観ない派?
映画が終わった後、すぐに席を立って帰る方もちらほら見かけます。皆さんはエンドロールの最後まで観ていきますか?
-
海外旅行から帰ってきたら、まず何を食べる?
帰国して1番食べたくなるもの、食べたくなるだろうなと思うもの、皆さんはありますか?
-
天使と悪魔選手権
悪魔がこんなささやきをしていたら、天使のあなたはなんと言って止めますか?
-
歯抜けの時間を埋めて行の挿入
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語 再帰処理のメリットとデ...
-
C言語で、文字とか入力されなく...
-
基本情報技術者試験詳しい方へ...
-
SQLの速度をあげるには・・・
-
非同期プログラミングは必ずマ...
-
VBS でプログラムを先頭から再試行
-
抜け落ちた番号を取得する方法...
-
Macターミナルで実行中のプログ...
-
分を時間に変換するプログラム
-
アセンブラのタイマー割り込み
-
StrConvの使い方について教えて...
-
C++からCへのソース変換について
-
Windows10でDOSゲーム
-
Excel VBA で処理中断(DoEvents...
-
マイコンからプログラムを読み...
-
スーパーのレジで並んでいたら...
-
vba GetAsyncKeyState関数について
-
WriteFile()でのデータ送信がで...
-
PHPで、日本語からアルファベッ...
-
C++でシェルを起動
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelでのセル内容の高速消去方法
-
win10で、正確な待ち時間の作り方
-
DoEvents関数って何?
-
小数点を含む数値かどうか判断...
-
SQLの速度をあげるには・・・
-
ナップザック問題?をエクセル...
-
Excel VBAにて、2GB超の点群デ...
-
Excel(VBA)でSetTimer関数を使...
-
If Not c Is Nothing Then ~延...
-
ノットイコールを教えて下さい
-
基本情報技術者試験詳しい方へ...
-
絶対パスの取得について
-
Excel VBA データ削除の高速化
-
C言語で、文字とか入力されなく...
-
WebBrowserの読み込み待ちの処...
-
プログラム上のCPU稼働率低減に...
-
Excel VBA での処理時間計測結...
-
C言語 時刻差分の算出方法
-
.netからexcel操作の処理速度が...
-
WindowsMessage(ウィンドウメッ...
おすすめ情報