- ベストアンサー
Excelで抽出、書き出しを繰り返すマクロ
- ExcelのD列に記載された表を横一列に書き出すマクロの作成方法
- 書式が異なるセルを複数回繰り返し書き出す場合の対応方法
- 要求された条件に基づいてExcelマクロを作成する手順
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
ANo.1です。 Sub test() Dim RegExp As Object Dim r As Range Dim rr As Range, rs As Range Dim i As Integer, j As Integer Dim match, v ReDim v(1 To 1, 1 To 6) Set RegExp = CreateObject("VBScript.Regexp") RegExp.Pattern = "\d+" RegExp.Global = True i = 7 For Each r In Range("D1", Cells(Rows.Count, 4).End(xlUp)) If InStr(r.Value, "(") And rr Is Nothing Then Set rr = r.Resize(3) For j = 1 To 3 v(1, j) = Split(Replace(rr.Item(j).Value, ")", ""), "(")(0) v(1, j + 3) = Split(Replace(rr.Item(j).Value, ")", ""), "(")(1) Next rr.Item(1).Offset(, 1).Resize(, 6).Value = v ReDim v(1 To 1, 1 To 6) With rr.Resize(1).Offset(3) If RegExp.test(.Value) Then For Each match In RegExp.Execute(.Value) rr.Item(1).Offset(, i).Value = match.Value i = i + 1 Next End If End With ElseIf LenB(r.Value) < 1 Then Set rr = Nothing i = 7 End If Next Set RegExp = Nothing Set rr = Nothing Erase v End Sub ご参考程度に。
その他の回答 (3)
- n-jun
- ベストアンサー率33% (959/2873)
ANo.3です。 データの区切りとして空白セルが存在しない場合があり、且つ必ず”全角文字”で区切る事が出来るのであれば、 ElseIf LenB(r.Value) < 1 Then を ElseIf LenB(r.Value) < 1 Or (r.Value = StrConv(r.Value, vbWide)) Then としてみて下さい。 それ以外で不具合があれば提示願います。
- fujillin
- ベストアンサー率61% (1594/2576)
2段階に分ければよいのでは? 1)列→行への変換は「形式を選択して貼り付け」で可能ですから これをマクロの自動記録で行えば、ほぼ同等のコードができます 2)ANo1さんがご指摘のように()内を取り出す部分は、すでにわかってい るでしょうからこれを下の行に表示するようにする。 つなげたければ、そのままマクロをつなげればOKです。
- n-jun
- ベストアンサー率33% (959/2873)
直接の回答ではないですが。 Excelのマクロで()内の文字を抽出して書き出したい http://okwave.jp/qa4373238.html 前回ご質問のリンクを貼っておいた方がBetterな気がしますけど。 (類似したご質問と受け取りました)
お礼
補足ありがとうございました。
お礼
完璧に希望通りの動きでした! 面倒な事を何度もやっていただけて本当に感謝しております。 VBA入門サイトを見ても序盤のところから分からなくて 途方に暮れておりましたが、がんばって勉強してみたいと思います。 前回の質問に引き続き、本当にどうもありがとうございました。