- ベストアンサー
(excel VBA) データを一列にまとめる(マクロで一気に)
excel2003を使っています webページ全体を、テキスト形式でシートに貼り付けて その後必要な部分だけをマクロで抽出するという作業を行っています。 テキスト形式で貼り付けた際、ブックを開いた直後に(一度もマクロを実行してない状態)貼り付けを行うと、すべてのデータがうまくA列に貼り付けられるのですが、 一度マクロを実行させた後、同じように貼り付けを行うと、データがB列やC列に散らばってしまいます。(行の位置は変わりないです) この解決策が全く思いつかないので、次のマクロを組みました Range("A1").value = Range("A1").value & Range("B1").value まとめたい行が100行以上あるので、とりあえずDo~LoopかFor~nextを使って、この記述で1行ずつまとめていく感じです。ただ、一気に列全体をまとめれたほうがスピードが速いと思い、質問いたしました。 そこで (1)列全体を一気にまとめる方法はありますか? (2)そもそも貼り付けの段階で、ちゃんとA列にデータがまとまらないのはなぜ?(1回目はできるのに…) という質問に、お答えいただけないでしょうか? 質問を2つに分けようかとも思ったのですが、関連でしたので、まとめて質問させていただきました。 お力をお貸し願えないでしょうか?
- みんなの回答 (4)
- 専門家の回答
お礼
TextToColumns メソッドはテキストをある区切り文字でセルに 分解しますが、ここで行った区切り文字の設定はマクロ実行後も そのまま残ります。 なるほどです。 この設定を元に戻すにはどうしたらいいですか?
補足
確かにTextToColumns メソッドを使用しています。 コードは結構長いので、あえて提示しませんでした。 一部提示しますと Sub クチコミゲッター() Dim objSheet As Object Dim intLoop As Integer Dim copyLoop As Integer 'コピーデータの貼り付け Sheets("sheet1").Select Range("A1").Select ActiveSheet.PasteSpecial Format:="テキスト", _ Link:=False, _ DisplayAsIcon:=False '【質問の部分です。doLoopで処理しています】 copyLoop = 1 Do Range("A" & copyLoop).Value = Range("A" & copyLoop).Value & _ Range("B" & copyLoop).Value & _ Range("C" & copyLoop).Value & _ Range("D" & copyLoop).Value copyLoop = copyLoop + 1 Loop Until copyLoop = 150 '重複データ登録回避 Sheets("sheet2").Select If Range("D2").Value = 1 Then Sheets("sheet1").Select Columns("A:A").Select Selection.ClearContents MsgBox "データが重複しています、リストにはこの店舗は登録しません。", , "データの重複" Exit Sub Else Sheets("sheet1").Select '条件付書式の設定 Cells.Select Selection.FormatConditions.Delete Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _ "=COUNTIF(A1,""予算*"")" Selection.FormatConditions(1).Interior.ColorIndex = 39 'リスト整理 L = 0 Range("A1:A4").Select Selection.Cut Range("B1").Offset(L, 0).Select ActiveSheet.Paste L = L + 4 Range("A28:A30").Select Selection.Cut Range("B1").Offset(L, 0).Select ActiveSheet.Paste L = L + 3 'クチコミ回収 Do Sheets("sheet2").Select Y = Range("B1").Value G = Range("B2").Value Sheets("sheet1").Select Range("A" & Y & ":A" & G).Select Selection.Cut Range("B1").Offset(L, 0).Select ActiveSheet.Paste L = L + G - Y Range("B1").Offset(L, 0).Select Selection.ClearContents Sheets("sheet2").Select L = L + 1 Loop Until Range("D1").Value = 0 '不要データ削除 Sheets("sheet1").Select Columns("A:A").Select Selection.ClearContents '店名抽出 Range("B1").Select Selection.TextToColumns Destination:=Range("B1"), DataType:=xlDelimited, _ TextQualifier:=xlNone, ConsecutiveDelimiter:=True, Tab:=False, Semicolon _ :=False, Comma:=False, Space:=True, Other:=True, OtherChar:="[", _ FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 9), Array(4, 9)), _ TrailingMinusNumbers:=True