▽1
●
きゃづみぃ ●250ポイント ベストアンサー |
Sub 実行() Dim b As Long Dim c As Long 元シート = "Sheet1" 作成先シート = "Sheet2" a = Sheets(元シート).Cells(Rows.Count, "A").End(xlUp).Row k = 1 c = 1 For b = 1 To a d = Sheets(元シート).Cells(b, "A") If d <> "" Then If InStr(d, "住所") > 0 Then For bb = b - 1 To 1 Step -1 If Left(Sheets(元シート).Cells(bb, "A"), 1) <> "○" Then If Sheets(元シート).Cells(bb, "A") <> "" Then d2 = Sheets(元シート).Cells(bb, "A") Exit For End If End If Next bb Sheets(作成先シート).Cells(c, 1) = d2 e = Sheets(元シート).Cells(b, "B") e1 = InStr(e, " ") e2 = Replace(Left(e, e1), "〒", "") e3 = Right(e, Len(e) - e1) Sheets(作成先シート).Cells(c, 2) = e2 Sheets(作成先シート).Cells(c, 3) = e3 Sheets(作成先シート).Cells(c, 4) = Sheets(元シート).Cells(b + 1, "B") c = c + 1 e0 = "" End If End If Next b End Sub
データがあるシートを 元シートとしていますので そこにそのシート名、
新規に作成するのを 作成先シートとしていますので そこに 新規で作成する側のシート名を入れてください。
シートは 作成しておいてください。
また、作成先シートは 上書きされます。
元シート = "Sheet1"
作成先シート = "Sheet2"
「この○○は、無いものもあります」という条件を見落としていました。
プログラムを修正したので、お試しください。
変換元のシートは変数 sour に、変換先のシートは変数 dest に指定してください。
Sub main() Dim v As Variant Dim sour, dest As String Dim i, j, n, ln As Long sour = "Sheet1" dest = "Sheet2" ln = Worksheets(sour).Cells(Rows.Count, "A").End(xlUp).row i = 1 j = 1 While (i <= ln) '空白スキップ Do v = Worksheets(sour).Cells(i, 1).Value i = i + 1 Loop While (v = "" And i <= ln) '会社名 Worksheets(dest).Cells(j, 1).Value = v '空白スキップ Do v = Worksheets(sour).Cells(i, 1).Value i = i + 1 Loop While (v = "" And i <= ln) '郵便番号 n = InStr(v, "〒") if (n = 0) Then v = Worksheets(sour).Cells(i, 1).Value End If Worksheets(dest).Cells(j, 2).Value = "<" & Mid(v, n + 1, 8) & ">" '住所 Worksheets(dest).Cells(j, 3).Value = "<" & Mid(v, n + 10) i = i + 1 v = Worksheets(sour).Cells(i, 1).Value '電話番号 Worksheets(dest).Cells(j, 4).Value = Mid(v, 6) i = i + 1 '空白スキップ Do v = Worksheets(sour).Cells(i, 1).Value i = i + 1 Loop While (v = "" And i <= ln) 'HP 'Worksheets(dest).Cells(j, 5).Value = v '空白スキップ Do v = Worksheets(sour).Cells(i, 1).Value i = i + 1 Loop While (v = "" And i <= ln) 'E-mail 'Worksheets(dest).Cells(j, 6).Value = v '空白スキップ Do v = Worksheets(sour).Cells(i, 1).Value i = i + 1 Loop While (v = "" And i <= ln) '備考1 'Worksheets(dest).Cells(j, 7).Value = v '空白スキップ Do v = Worksheets(sour).Cells(i, 1).Value i = i + 1 Loop While (v = "" And i <= ln) '備考2 'Worksheets(dest).Cells(j, 8).Value = v j = j + 1 Wend End Sub
人にいちいちきくより、sedをマスターしてください。