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列で実行したところデータの入っていない下の行すべてに日付が入りました
よろしくお願いします。
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
コメント(8件)
その式でNGだったということであれば、日付の入っているセル、時刻の入っているセル、結果を書き出すセルの相対的な位置関係に狂いを生じているのではないかと思いますが、どのように狂いが生じているのかについては、もっと具体的に位置関係を示していただく必要があります
(例)日付/時刻の入っているのはシート1のA2とB2から下に続き、結果を書き出すのはシート2のE2からとする
実行時エラー'13':
型が一致しません
となります
デバックで反転するのは
.Cells(i, "C") = .Cells(i, "A").MergeArea.Item(1).Value + .Cells(i, "B")
です
今現在同一シート内にA2以降の日付B2以降に時間
書き出しをC2以降にしようとしています
いとどできたと思ったのですが
やり方が悪いのか
上のようなエラーが返ってきます。
どこを見直せばいいでしょうか
ありがとうございます
>Macro2だとうまくいきました
Macro1でダメだったということはA列に日付以外の文字列が入っている部分があったということになると思います
A列は日付ですが B列の 27:00 が 文字列だったのを気づきませんでした
普通に27:00と打ち込むと3:00になってしまうのですが
何かいい方法のヒントでもいただけないでしょうか
セルの書式設定で下記のように時刻部分を角括弧で括ると27:00のような表記が可能となります
[h]:mm
VALUE
を使って解決しました