添付画像のような時間の表があるとき
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で質問しましょう!
似たような質問が見つかりました
- Access(アクセス) アクセス 意図せずサブプロシージャを移動してしまうのを止めたい 1 2022/09/02 09:19
- Visual Basic(VBA) ActiveReportのdetailをデータセットの自動バインドを使って帳票を出力しています。 1 2023/08/16 07:16
- IT・エンジニアリング ActiveReportのdetailをデータセットの自動バインドを使って帳票を出力しています。 1 2023/08/16 07:17
- Word(ワード) 分かる方教えてください。 wordに図を差込して資料を作成してますが その図上の説明したい箇所に①と 3 2022/10/20 20:05
- Excel(エクセル) 勤務表の中抜け集計の関数を教えてほしいです。 1 2023/01/16 01:26
- その他(Microsoft Office) パワーポイントやワード、エクセルでのスライドショーやテキストの微調整について 1 2023/01/12 05:50
- Visual Basic(VBA) テキストボックス1の値に対するテキストボックス2に表示する値 1 2022/04/05 14:35
- Access(アクセス) アクセス IDが空白の時、メッセージボックスがでるようにするには 1 2022/08/04 11:06
- Visual Basic(VBA) Vba テキストボックスの文字列をボタンで入力するとテキストボックスの端の文字列が更新されない 2 2022/05/21 23:32
- その他(パソコン・スマホ・電化製品) ワードでテキストボックス内の文字を連動させない方法 2 2023/02/09 16:56
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
DoEvents関数って何?
-
COMBOBOXで日付入力
-
.netからexcel操作の処理速度が...
-
「単体テスト」に関する深刻な...
-
プログラム上のCPU稼働率低減に...
-
Excel VBA データ削除の高速化
-
絶対パスの取得について
-
スーパーコンピューター 2位で...
-
Excel(VBA)でSetTimer関数を使...
-
win10で、正確な待ち時間の作り方
-
小数点を含む数値かどうか判断...
-
PCの並列化
-
C言語:関数を使うメリットとデ...
-
C言語で、文字とか入力されなく...
-
gpuと並列処理を行うcpuの処理...
-
SQLの速度をあげるには・・・
-
VBでの簡易電卓の作成(減算方...
-
C言語のタイマー処理
-
c言語。 組み合わせ最適化問題...
-
ペンティアムとセレロン
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelでのセル内容の高速消去方法
-
DoEvents関数って何?
-
SQLの速度をあげるには・・・
-
小数点を含む数値かどうか判断...
-
win10で、正確な待ち時間の作り方
-
Excel(VBA)でSetTimer関数を使...
-
絶対パスの取得について
-
WebBrowserの読み込み待ちの処...
-
Excel VBAにて、2GB超の点群デ...
-
VBでの簡易電卓の作成(減算方...
-
テキストファイルの空行をスキ...
-
ノットイコールを教えて下さい
-
ナップザック問題?をエクセル...
-
If Not c Is Nothing Then ~延...
-
プログラム上のCPU稼働率低減に...
-
逆ポーランド記法における単項...
-
符号付きにすべきか、符号なし...
-
C言語 時刻差分の算出方法
-
C言語:関数を使うメリットとデ...
-
Excel VBA データ削除の高速化
おすすめ情報