Excel VBA質問箱 IV

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

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


3314 / 13645 ツリー ←次へ | 前へ→

【62951】アルファベット毎に仕分をし、其々を別シートに貼り付ける方法 レイモンド 09/9/25(金) 15:00 質問[未読]
【62953】Re:アルファベット毎に仕分をし、其々を別... Yuki 09/9/25(金) 15:24 発言[未読]
【62956】Re:アルファベット毎に仕分をし、其々を別... Hirofumi 09/9/25(金) 20:06 回答[未読]

【62951】アルファベット毎に仕分をし、其々を別シ...
質問  レイモンド  - 09/9/25(金) 15:00 -

引用なし
パスワード
   VBAが全くの初心者ですが、以下の内容についてご教示頂ければ幸いです。

あるシートのAの列には昇順でアルファベットが並んでます。
アルファベットはA〜Zで、それぞれ行数は異なります。
例えばAは1〜5行目まで、Bは6〜20行目まで、Cは21〜25行目までといった具合です。
これを各アルファベット毎にシートを別にして貼り付けしなおす方法を模索しています。

例えばAである5行はシート2へ、Bの15行はシート3へコピーペーストして貼り付けたいと考えております。


もしVBAで解決できるようであればゼヒその方法ご教示下さい。
宜しくお願いします。

【62953】Re:アルファベット毎に仕分をし、其々を...
発言  Yuki  - 09/9/25(金) 15:24 -

引用なし
パスワード
   ▼レイモンド さん:
>あるシートのAの列には昇順でアルファベットが並んでます。
>アルファベットはA〜Zで、それぞれ行数は異なります。
>例えばAは1〜5行目まで、Bは6〜20行目まで、Cは21〜25行目までといった具合です。
>これを各アルファベット毎にシートを別にして貼り付けしなおす方法を模索しています。
>
>例えばAである5行はシート2へ、Bの15行はシート3へコピーペーストして貼り付けたいと考えております。

こんにちは。
シート数が27あるとして
又、1行目がタイトル行として

Sub AZFilter()
  Dim i  As Long
  With Worksheets("Sheet1")
    For i = 1 To 26
      .AutoFilterMode = False
      With .Range("A1").CurrentRegion
        .AutoFilter Field:=1, Criteria1:=Chr(i + 64)
        .SpecialCells(xlCellTypeVisible).Copy _
        Worksheets(i + 1).Range("A1")
      End With
    Next
    .AutoFilterMode = False
  End With
End Sub

【62956】Re:アルファベット毎に仕分をし、其々を...
回答  Hirofumi  - 09/9/25(金) 20:06 -

引用なし
パスワード
   Sheet1には、列見出しが有る物とします
データは、A列〜L列の12列とし、転記するグループは、A列に有るとします
A列を上から見て行って、値が変わった所で同じ値の範囲を転記していきます
転記は、シートが追加され其処に行われます

Option Explicit

Public Sub Sample()

  '元々のデータ列数(A列〜L列)
  Const clngColumns As Long = 12
  'グループの有る列(A列のA列からの列Offset)
  Const clngGroup As Long = 0
  '結果出力の先頭位置
  Const cstrTop As String = "A1"
  
  Dim i As Long
  Dim lngRows As Long
  Dim lngTop As Long
  Dim lngCount As Long
  Dim rngList As Range
  Dim rngResult As Range
  Dim rngHeader As Range
  Dim vntGroup As Variant
  Dim strProm As String

  '画面更新を停止
  Application.ScreenUpdating = False
  
  'Listの先頭セル位置を基準とする(A列の列見出しのセル位置)
  Set rngList = Worksheets("Sheet1").Cells(1, "A")

  With rngList
    '行数の取得
    lngRows = .Offset(Rows.Count - .Row, clngGroup).End(xlUp).Row - .Row
    If lngRows <= 0 Then
      strProm = "データが有りません"
      GoTo Wayout
    End If
    'A列データを配列に取得
    vntGroup = .Offset(1, clngGroup).Resize(lngRows + 1).Value
    '列見出し範囲を取得
    Set rngHeader = .Resize(, clngColumns)
  End With
  
  '仮に結果と元表を同じにして置く
  Set rngResult = rngList
  '注目値の位置を記録
  lngTop = 1
  'データ行数のカウント初期値
  lngCount = 1
  For i = 2 To lngRows + 1
    '注目値と現在値が違った場合
    If vntGroup(lngTop, 1) <> vntGroup(i, 1) Then
      '出力シートを追加し、A1出力基準とする
      Set rngResult = Worksheets.Add(After:=rngResult.Parent).Range(cstrTop)
      With rngResult
        '列見出しを出力
        rngHeader.Copy Destination:=.Item(1)
        'データを転記
        rngList.Offset(lngTop).Resize(lngCount, _
              clngColumns).Copy Destination:=.Offset(1)
      End With
      '注目値の位置を記録
      lngTop = i
      'データ行数のカウント初期値に
      lngCount = 1
    Else
      'データ行数のカウントを更新
      lngCount = lngCount + 1
    End If
  Next i
  
  strProm = "処理が完了しました"
   
Wayout:

  '画面更新を再開
  Application.ScreenUpdating = True
   
  Set rngList = Nothing
  Set rngResult = Nothing
  Set rngHeader = Nothing
   
  MsgBox strProm, vbInformation
     
End Sub

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