Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


6529 / 13644 ツリー ←次へ | 前へ→

【44725】グループ分け 関西人 06/11/30(木) 10:43 質問[未読]
【44726】Re:グループ分け Jaka 06/11/30(木) 11:11 発言[未読]
【44731】訂正 Jaka 06/11/30(木) 14:11 発言[未読]
【44729】Re:グループ分け Kein 06/11/30(木) 13:53 回答[未読]
【44730】Re:グループ分け ハチ 06/11/30(木) 14:01 回答[未読]

【44725】グループ分け
質問  関西人  - 06/11/30(木) 10:43 -

引用なし
パスワード
   いつもお世話になっております。
早速ですが、質問です。
   A
  TEXT
   ・
   ・
   ・
   ・
   ・
   ・
  TEXT
   ・
   ・
   ・
   ・
  TEXT
   ・
   ・
   ・
   ・
といった感じに、「TEXT」
という文字で分けれらたデータの塊があります。
これを、「TEXT」で区切られた範囲データのかたまりを
それぞれ、B列、C列、D列・・・
といったように書き出したいのですが、どうすればよいでしょうか?
よろしくお願いいたします。

【44726】Re:グループ分け
発言  Jaka  - 06/11/30(木) 11:11 -

引用なし
パスワード
   質問の内容がよく解ったないけど。
因みに"TEXT"の文字は大文字小文字区別してません。
してないって言うか、オートフィルタだと区別できない。

Dim ARY As Range
With Sheets("Sheet1")
  With .Range("A1", .Range("A65536").End(xlUp))
    .AutoFilter Field:=1, Criteria1:="<>*text*", Operator:=xlAnd
    With .Resize(.Rows.Count).Offset(1)
      For Each ARY In .SpecialCells(xlCellTypeVisible).Areas
        With ARY.Offset(, 1).Resize(, 3)
          .FormulaR1C1 = "=R11C1" '"=RC[-1]"
          .Value = .Value
        End With
      Next
    End With
  End With
  .AutoFilterMode = False
End With

【44729】Re:グループ分け
回答  Kein  - 06/11/30(木) 13:53 -

引用なし
パスワード
   いろいろなロジックが考えられますが、私も一例を提示してみます。

Sub Test_Split_Data()
  Dim i As Long, Cnt As Long, MyCnt As Long
  Dim C As Range
 
  Application.ScreenUpdating = False
  With Range("A1", Range("A65536").End(xlUp))
   Cnt = WorksheetFunction.CountIf(.Cells, "TEXT")
   .Cells(1).Resize(, Cnt).Value = "TEXT"
   With .Offset(, 255)
     .Formula = "=IF($A1=""TEXT"","""",$A1)"
     .Value = .Value
     For Each C In .SpecialCells(2).Areas
      i = i + 1: If i = 1 Then MyCnt = C.Count + 1
      Cells(2, i).Resize(C.Count).Value = C.Value
     Next
     .ClearContents
   End With
  End With
  Range(Range("A1").Offset(MyCnt), Range("A65536").End(xlUp)) _
  .ClearContents
  Application.ScreenUpdating = True
End Sub

【44730】Re:グループ分け
回答  ハチ  - 06/11/30(木) 14:01 -

引用なし
パスワード
   自分も一案

Sub Test()
  Dim i As Long
  Dim r As Long
  Dim c As Integer
  r = 1: c = 1
  For i = 1 To Range("A65536").End(xlUp).Row
    If Cells(i, 1).Value = "TEXT" Then
      r = 1
      c = c + 1
    Else
      Cells(r, c).Value = Cells(i, 1).Value
      r = r + 1
    End If
  Next i
End Sub

【44731】訂正
発言  Jaka  - 06/11/30(木) 14:11 -

引用なし
パスワード
   ▼Jaka さん:
>質問の内容がよく解ったないけど。
  ↓
質問の内容がよく解ってないけど

>    With .Resize(.Rows.Count).Offset(1)
         ↓
    With .Resize(.Rows.Count - 1).Offset(1)

6529 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free