プロが教える店舗&オフィスのセキュリティ対策術

Exelのマクロで
ご教授お願いします。


AABB 2012 0219 1111
2222 3333 4444 5555

AABB 2012 0220 1111
2222 3333 4444 5555
6666 7777

AABB 2012 0221 1111
2222

このような、空欄1行を挟んだデータが数十件あります。すべてA列です。
これを・・・

AABB 2012 0219 1111 2222 3333 4444 5555 END

AABB 2012 0220 1111 2222 3333 4444 5555 6666 7777 END

AABB 2012 0221 1111 2222 END

このようにマクロで一行にまとめ,末尾に”END”を追加したいのです。
1つのデータの行数は2行だったり、6行だったりと変則です。
よろしくお願いします。m(__)m

A 回答 (3件)

作ってみました。



Sub test()
 Dim shSrc As Worksheet, shDst As Worksheet
 
 Set shSrc = Sheets("sheet1") ' 元データのあるシート名
 Set shDst = Sheets("sheet2") ' 連結データを作るシート名
 
 yDst = 1
 
 For ySrc = 1 To 10000
  ' 空行の場合
  If shSrc.Cells(ySrc, 1).Text = "" Then
   ' 2行続けて空行だったら終了
   If shDst.Cells(yDst, 1).Text = "" Then End
   ' 末尾に END を追加
   shDst.Cells(yDst, 1).Value = shDst.Cells(yDst, 1).Text & " END"
   yDst = yDst + 2
  Else ' データがある場合
   ' 1つ目ならそのまま、2つ目以降ならスペースをはさんで結合
   If shDst.Cells(yDst, 1).Text = "" Then
    shDst.Cells(yDst, 1).Value = shSrc.Cells(ySrc, 1).Text
   Else
    shDst.Cells(yDst, 1).Value = shDst.Cells(yDst, 1).Text & " " & shSrc.Cells(ySrc, 1).Text
   End If
  End If
 Next
End Sub
    • good
    • 0
この回答へのお礼

試してみたところ希望通りでした。
回答の速さに驚きました、ありがとうございましたm(__)m

お礼日時:2012/02/29 20:22

No.2です!


たびたびごめんなさい。
>すべてA列です。
の部分を見逃していました。

前回のコードは無視してください。
もう一度コードを載せておきます。
Sheet1のデータは1行目からあるとします。

Sub test()
Dim i As Long
Dim ws1, ws2 As Worksheet
Set ws1 = Worksheets("sheet1")
Set ws2 = Worksheets("sheet2")
Application.ScreenUpdating = False
ws1.Cells.Copy Destination:=ws2.Cells(1, 1)
For i = ws2.Cells(Rows.Count, 1).End(xlUp).Row To 2 Step -1
If ws2.Cells(i, 1) <> "" And ws2.Cells(i - 1, 1) <> "" Then
ws2.Cells(i - 1, 1) = ws2.Cells(i - 1, 1) & ws2.Cells(i, 1)
ws2.Cells(i, 1).Delete (xlUp)
End If
Next i
For i = 1 To ws2.Cells(Rows.Count, 1).End(xlUp).Row
If ws2.Cells(i, 1) <> "" Then
ws2.Cells(i, 1) = ws2.Cells(i, 1) & "END"
End If
Next i
ws2.Columns(1).AutoFit
Application.ScreenUpdating = True
End Sub

何度も失礼しました。m(_ _)m
    • good
    • 0
この回答へのお礼

ありがとうございます。
大変勉強になりましたm(__)m

お礼日時:2012/02/29 21:33

こんばんは!


一例です。
Sheet1のデータをSheet2に表示するようにしてみました。
標準モジュールにコピー&ペーストしてマクロを試してみてください。

Sub test()
Dim i, j As Long
Dim ws1, ws2 As Worksheet
Set ws1 = Worksheets("Sheet1")
Set ws2 = Worksheets("Sheet2")
Application.ScreenUpdating = False
ws1.Cells.Copy Destination:=ws2.Cells(1, 1)
For i = ws2.Cells(Rows.Count, 1).End(xlUp).Row To 2 Step -1
If ws2.Cells(i, 1) <> "" And ws2.Cells(i - 1, 1) <> "" Then
j = ws2.Cells(i, Columns.Count).End(xlToLeft).Column
Range(ws2.Cells(i, 1), ws2.Cells(i, j)).Copy Destination:= _
ws2.Cells(i - 1, Columns.Count).End(xlToLeft).Offset(, 1)
ws2.Rows(i).Delete
End If
Next i
For i = 1 To ws2.Cells(Rows.Count, 1).End(xlUp).Row
If ws2.Cells(i, 1) <> "" Then
ws2.Cells(i, Columns.Count).End(xlToLeft).Offset(, 1) = "END"
End If
Next i
ws2.Columns.AutoFit
Application.ScreenUpdating = True
End Sub

こんな感じではどうでしょうか?
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!