お世話になります


Excel2007での質問です

A列にA2以降結合セルで日付が入っています
B列にはB2以降時刻が入っています(結合セルではありません)

C列に日付時刻のデータを入れたいです。

※A列2011/1/1とあり
B列の時刻ですが25:00などのデータがあるのでその場合は
2011/1/2 1:00としたいです

日付を結合解除してセルに入れるのに
標準モジュール
========================
Sub Test()
MyLastR = Selection.Row + Selection.Rows.Count - 1
Selection.UnMerge
For Each c In Selection
If c.Offset(1, 0).Row > MyLastR Then Exit Sub
If c.Offset(1, 0).Value = "" Then
c.Offset(1, 0).Value = c.Value
End If
Next c
End Sub
========================
をA列で実行したところデータの入っていない下の行すべてに日付が入りました

よろしくお願いします。

回答の条件
  • 1人3回まで
  • 登録:
  • 終了:2011/06/09 07:47:53
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:windofjuly No.1

回答回数2625ベストアンサー獲得回数1149

ポイント200pt

A列の結合を解除せずともMergeAreaというプロパティを参照すればデータを取得することが出来、下記のように計算することが出来ます

・下記の結果C列が40545.0416666667といったような数値になっている場合はC列のセルの書式で日時型に設定してください

・WITHは使っても使わなくてもかまいませんが、使っておくと使いまわしが楽になる場合があります

Option Explicit

Sub Macro1()
    Dim lastRow As Long
    Dim i As Long
    
    With ActiveSheet
        lastRow = .Cells(.Rows.Count, "A").End(xlUp).Row
        lastRow = lastRow + .Cells(lastRow, "A").MergeArea.Count - 1
        For i = 2 To lastRow
            .Cells(i, "C") = .Cells(i, "A").MergeArea.Item(1).Value + .Cells(i, "B")
        Next i
    End With
End Sub

B列に必ず値が入っている場合には下記のようにも出来ます


Sub Macro2()
    Dim lastRow As Long
    Dim i As Long
    
    With ActiveSheet
        lastRow = .Cells(.Rows.Count, "B").End(xlUp).Row
        For i = 2 To lastRow
            .Cells(i, "C") = .Cells(i, "A").MergeArea.Item(1).Value + .Cells(i, "B")
        Next i
    End With
End Sub
  • id:taknt
    ほかはどこも変更しなくてもいいですよ。
  • id:windofjuly
    うぃんど 2011/06/09 07:25:02
    「間にデータがある」の間というのが「C列とD列には既存のものがあって、本当に書き出したい先はE列」という意味であれば、その式でOKです
     
    その式でNGだったということであれば、日付の入っているセル、時刻の入っているセル、結果を書き出すセルの相対的な位置関係に狂いを生じているのではないかと思いますが、どのように狂いが生じているのかについては、もっと具体的に位置関係を示していただく必要があります
    (例)日付/時刻の入っているのはシート1のA2とB2から下に続き、結果を書き出すのはシート2のE2からとする
  • id:breakthrough1
    すいませんできたと思ったのですが

    実行時エラー'13':
    型が一致しません

    となります
    デバックで反転するのは

    .Cells(i, "C") = .Cells(i, "A").MergeArea.Item(1).Value + .Cells(i, "B")

    です

    今現在同一シート内にA2以降の日付B2以降に時間
    書き出しをC2以降にしようとしています

    いとどできたと思ったのですが
    やり方が悪いのか

    上のようなエラーが返ってきます。

    どこを見直せばいいでしょうか
  • id:breakthrough1
    Macro2だとうまくいきました
    ありがとうございます
  • id:windofjuly
    うぃんど 2011/06/09 07:48:20
    >型が一致しません
    >Macro2だとうまくいきました
     
    Macro1でダメだったということはA列に日付以外の文字列が入っている部分があったということになると思います
  • id:breakthrough1
    Macro2でもできるシートと出来ないシートがありました。

    A列は日付ですが B列の 27:00 が 文字列だったのを気づきませんでした

    普通に27:00と打ち込むと3:00になってしまうのですが
    何かいい方法のヒントでもいただけないでしょうか
  • id:windofjuly
    うぃんど 2011/06/09 08:15:13
    >27:00と打ち込むと3:00になってしまう
    セルの書式設定で下記のように時刻部分を角括弧で括ると27:00のような表記が可能となります
    [h]:mm
  • id:breakthrough1
    お騒がせしました
    VALUE
    を使って解決しました

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません