- ベストアンサー
日付と時刻を比較して一致した行を抜き出す。
【Sheet1】 【Sheet2】 A B A B 1 2008/1/2 00:00 1 2008/1/1 22:00 2 2008/1/2 01:00 2 2008/1/1 23:00 3 2008/1/2 02:00 3 2008/1/2 00:00 4 2008/1/2 02:00 4 2008/1/2 01:00 【Sheet1】のA行セルと【Sheet2】のA行セルの文字列を比較し、 一致しない場合は【Sheet2】のセルを一つずらしA3【一致】するセルと比較するまで ループを続ける。 ※ 上記例の場合だと日付一致は【Sheet1】A1 ⇔ 【Sheet2】A3 一致した時点で一致した【Sheet1】のAセルの隣B列と比較して、 【Sheet1】の日付、時刻が一致した列を検出する。 ※ 最終的に条件が一致して抜き出すのは 結果 : 【Sheet1】のA1行 そんなマクロを作っているのですが、 何かもっと簡潔に作れるやり方ってありますでしょうか? ヒントだけでもいいのでご教授していただけたら幸いです・・。 わかりにくくてすいません; ----------------------------------------------------------------------------------------------------- Dim Com As Integer Dim Com2 As Integer Dim Storage As String Dim i As Long ' Month関数を使う Do Until Month(Cells(i, 1).Value) = 11 For Com = 1 To 100 'Com = 日付 ' 【Sheet1】の指定されたAセルが【Sheet2】の指定されたAセルが一致しているかどうか If CDate(Worksheets(Sheet1).Range("A" & Com)) = CDate(Worksheets(Sheet2).Range("A" & Com)) Then ' 一致すれば【Sheet1】のAセルの文字列をStorage変数に格納 Storage = ActiveCell.Value Else ' Falseの場合、1行改行する ActiveCell.Offset(1, 0).Select End If Next Loop ----------------------------------------------------------------------------------------------------
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
日時を一緒に管理してはいかがでしょうか。 そうすれば、A行のみの比較ですむと思います。 何かの目的があって年月日はA行に、時刻はB行に表示していると思いますので、 yyyy/mm/dd hh:mmのデータ形式のうち、 A行はyyyy/mm/ddの表示にし、B行は「=A行」としhh:mmのみの表示にする。 解決になっていなかったらごめんなさい。
その他の回答 (1)
- tmsnk
- ベストアンサー率33% (1/3)
A行とB行のデーターを加算して、比較してどうですか? 日時1=CDate(Worksheets(Sheet1).Range("A" & Com)) +CDate(Worksheets(Sheet1).Range("B" & Com)) 日時2=CDate(Worksheets(Sheet2).Range("A" & Com)) +CDate(Worksheets(Sheet2).Range("B" & Com)) If 日時1=日時2 then ....... Next Next
補足
返答ありがとうございます。 ですが、日付と時間は分けないとダメでして、 日付だけを変数に入れてその一致した日付変数と時刻を照らし合わせればよかったんですが、うまく書けなくて;