Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


31039 / 76732 ←次へ | 前へ→

【50950】Re:期間が重複していないか確認する方法 訂正
発言  ichinose  - 07/8/23(木) 9:33 -

引用なし
パスワード
   >標準モジュールに
>
>'========================================================
>Option Explicit
>Sub main()
>  Dim rng As Range
>  Dim g0 As Long
>  Dim g1 As Long
>  Dim c_carray As Variant
>  Dim st1 As Long, ed1 As Long
>  Dim ret As Boolean
>  Cells.Interior.ColorIndex = xlNone
>  Set rng = Range("a2", Cells(Rows.Count, 1).End(xlUp))
>  If rng.Row > 1 Then
>    init_ovl_chk_tbl
>    For g0 = 1 To rng.Count
>     c_carray = get_ovl_chk_tbl(rng(g0).Value)
>     If TypeName(c_carray) = "Boolean" Then
>       Call add_ovl_chk_tbl(rng(g0).Value, CLng(rng(g0, 3).Value), CLng(rng(g0, 4).Value))
>     Else
>       st1 = CLng(rng(g0, 3).Value)
>       ed1 = CLng(rng(g0, 4).Value)
>       ret = True
>       For g1 = LBound(c_carray) To UBound(c_carray) Step 2
>         If chk_ovl(st1, ed1, c_carray(g1), c_carray(g1 + 1)) Then
>          rng(g0).Resize(, 4).Interior.ColorIndex = 3
>          ret = False
>          Exit For
>          End If
>         Next g1
>       If ret = True Then
>        Call add_ovl_chk_tbl(rng(g0).Value, st1, ed1)
>        End If
>       End If
>     Next g0
>    term_ovl_chk_tbl
>    End If
>   
>End Sub
>'========================================================================
>Function chk_ovl(ByVal st1 As Long, ByVal ed1 As Long, ByVal st2 As Long, ByVal ed2 As Long) As Boolean
>'機能 : st1からed1の範囲とst2からed2の範囲で重なりの有無をチェックする
>'input : st1 ed1 st2 ed2 開始値及び、終了値
>'output: chk_ovl true 重なりあり  False 重なりなし
>' 例
>'  st1 10 ed1 20 st2 5 ed2 16の場合、chk_ovl True
>'  st1 10 ed1 20 st2 11 ed2 16の場合、chk_ovl True
>'  st1 10 ed1 20 st2 16 ed2 30の場合、chk_ovl True
>'  st1 10 ed1 20 st2 5 ed2 9の場合、chk_ovl false
>'  st1 10 ed1 20 st2 22 ed2 32の場合、chk_ovl false
>  Dim myarray As Variant
>  myarray = Application.Frequency(Array(st1, ed1), Array(st2, ed2))
>  If myarray(1, 1) < 2 And myarray(3, 1) < 2 Then
>    chk_ovl = True
>  Else
>    chk_ovl = False
>    End If
>  Erase myarray
>End Function
>
>別の標準モジュールに
>'=================================================================
>Option Explicit
Private dic As object '←これに訂正してください そうしないと
'            参照設定が必要になってしまうので
>'=================================================================
>Sub init_ovl_chk_tbl()
>'重なりチェックリストテーブルの初期化
>  Set dic = CreateObject("scripting.dictionary")
>End Sub
>'=================================================================
>Sub term_ovl_chk_tbl()
>'重なりチェックリストテーブルの終了処理
>  Set dic = Nothing
>End Sub
>'=================================================================
>Sub add_ovl_chk_tbl(c_key As Variant, st As Long, ed As Long)
>'重なりチェックリストテーブルへのチェックデータの追加
>  Dim ans As Variant
>  If dic.Exists(c_key) Then
>    ans = dic(c_key)
>    ReDim Preserve ans(1 To UBound(ans) + 2)
>    ans(UBound(ans) - 1) = st
>    ans(UBound(ans)) = ed
>    dic(c_key) = ans
>  Else
>    ReDim ans(1 To 2)
>    ans(1) = st
>    ans(2) = ed
>    dic.Add c_key, ans
>    End If
>End Sub
>'=================================================================
>Function get_ovl_chk_tbl(c_key As Variant) As Variant
>'重なりチェックリストテーブルへからチェックデータの取得
>  If dic.Exists(c_key) Then
>    get_ovl_chk_tbl = dic(c_key)
>  Else
>    get_ovl_chk_tbl = False
>    End If
>End Function


0 hits

【50935】期間が重複していないか確認する方法 やました 07/8/22(水) 21:00 質問
【50937】Re:期間が重複していないか確認する方法 neptune 07/8/22(水) 21:28 発言
【50943】Re:期間が重複していないか確認する方法 やました 07/8/22(水) 23:36 お礼
【50944】Re:期間が重複していないか確認する方法 ssc 07/8/23(木) 0:23 発言
【50946】Re:期間が重複していないか確認する方法 じゅんじゅん 07/8/23(木) 6:51 発言
【50947】Re:期間が重複していないか確認する方法 ichinose 07/8/23(木) 7:47 発言
【50950】Re:期間が重複していないか確認する方法 訂... ichinose 07/8/23(木) 9:33 発言
【50951】Re:期間が重複していないか確認する方法 じゅんじゅん 07/8/23(木) 9:37 発言
【50953】Re:期間が重複していないか確認する方法 neptune 07/8/23(木) 9:54 回答
【50957】Re:期間が重複していないか確認する方法 じゅんじゅん 07/8/23(木) 10:40 発言
【50955】Re:期間が重複していないか確認する方法 Lindy 07/8/23(木) 10:24 発言
【50962】Re:期間が重複していないか確認する方法 ssc 07/8/23(木) 14:22 質問
【50963】すみませんでした。 Jaka 07/8/23(木) 15:04 発言
【51008】Re:期間が重複していないか確認する方法 ssc 07/8/24(金) 17:50 質問
【51012】Re:期間が重複していないか確認する方法 ichinose 07/8/25(土) 7:31 発言
【51013】Re:期間が重複していないか確認する方法 ssc 07/8/25(土) 12:37 質問
【51014】Re:期間が重複していないか確認する方法 ichinose 07/8/25(土) 14:45 発言
【51016】Re:期間が重複していないか確認する方法 ssc 07/8/25(土) 16:23 発言
【51017】Re:期間が重複していないか確認する方法 ssc 07/8/25(土) 16:38 お礼
【51025】Re:期間が重複していないか確認する方法 ssc 07/8/26(日) 0:10 質問
【51026】Re:期間が重複していないか確認する方法 ichinose 07/8/26(日) 0:19 発言
【51027】Re:期間が重複していないか確認する方法 ssc 07/8/26(日) 0:34 質問
【51028】Re:期間が重複していないか確認する方法 ichinose 07/8/26(日) 0:45 発言
【51030】Re:期間が重複していないか確認する方法 ssc 07/8/26(日) 1:55 質問
【51050】Re:期間が重複していないか確認する方法 ichinose 07/8/26(日) 22:18 発言
【51052】Re:期間が重複していないか確認する方法 ssc 07/8/26(日) 22:54 質問
【51053】Re:期間が重複していないか確認する方法 ssc 07/8/26(日) 23:15 質問
【51054】Re:期間が重複していないか確認する方法 ichinose 07/8/27(月) 8:04 発言
【51059】Re:期間が重複していないか確認する方法 ssc 07/8/27(月) 9:45 お礼

31039 / 76732 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free