Excel VBA質問箱 IV

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

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


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

【71018】一つのファイル・シートから、日付でファイル分割・・・ hakemaru 12/1/26(木) 12:11 質問[未読]
【71019】Re:一つのファイル・シートから、日付でフ... kanabun 12/1/26(木) 12:35 質問[未読]
【71030】Re:一つのファイル・シートから、日付でフ... hakemaru 12/1/26(木) 20:53 質問[未読]
【71057】Re:一つのファイル・シートから、日付でフ... kanabun 12/1/27(金) 11:12 発言[未読]
【71020】Re:一つのファイル・シートから、日付でフ... UO3 12/1/26(木) 13:21 発言[未読]

【71018】一つのファイル・シートから、日付でファ...
質問  hakemaru  - 12/1/26(木) 12:11 -

引用なし
パスワード
   一つのexcelファイルから、ファイル分割、シート作成、A列に順にアルファベットをA、B、C、・・・と代入。ということをやりたいのですが、VBAがまだまだ初心者で困っています。
やりたいことは以下の処理です。

<元データ>
A B C D E F ・・・ S
1 文字列 文字列 日付1. 日付2. 日付3. 文字列 文字列
2 文字列 文字列 日付1. 日付2. 日付3. 文字列 文字列
3 文字列 文字列 日付1. 日付2. 日付3. 文字列 文字列
4 文字列 文字列 日付1. 日付2. 日付3. 文字列 文字列
5 文字列 文字列 日付1. 日付2. 日付3. 文字列 文字列
6 文字列 文字列 日付1. 日付2. 日付3. 文字列 文字列

※F列〜S列までは文字列です。
※C列〜E列は日付形式で、YYYY/MM/DDです。

これを、
1.C列の日付1.を元に日付ごとにファイル分割 ⇒2.B列から元データの形式のまま、Sheet1に張り付け ⇒3.元データの行数分、シート作成(シート内には何も入れず) ⇒4. 2.のA列に順にアルファベットをA、B、C、・・・と代入。

ということをやりたくて試行錯誤しています。。。

VBAは勉強し始めたばかりで、非常に困っています。
丸投げ質問で恐縮ですが、ご教授いただけますか。
宜しくお願いします。

【71019】Re:一つのファイル・シートから、日付で...
質問  kanabun  - 12/1/26(木) 12:35 -

引用なし
パスワード
   ▼hakemaru さん:

><元データ>
>  A    B   C    D   E    F ・・・ S
>1 文字列 文字列 日付1. 日付2. 日付3. 文字列 … 文字列
>2 文字列 文字列 日付1. 日付2. 日付3. 文字列 … 文字列
>3 文字列 文字列 日付1. 日付2. 日付3. 文字列 … 文字列
>4 文字列 文字列 日付1. 日付2. 日付3. 文字列 … 文字列
>5 文字列 文字列 日付1. 日付2. 日付3. 文字列 … 文字列
>6 文字列 文字列 日付1. 日付2. 日付3. 文字列 … 文字列
>
質問があります。
Q1.1行目からいきなりデータ? それとも、1行目は列見出し?

>これを、
>1.C列の日付1.を元に日付ごとにファイル分割
Q2.Excelの一般機能で(元データの1行目は列見出しがあるものと仮定して、)
 フィルタ- フィルタオプションの設定 を使って、
  C列1行目からデータ最終行までを選択して、
  C列の日付データの一覧(重複しない)を どこか空いている列に
  リストすることはできますか?

Q3. このあとの処理↓がよく分かりません。
> ⇒2.B列から元データの形式のまま、Sheet1に張り付け
  元データは何という名前のシートにあるのですか?
> ⇒3.元データの行数分、シート作成(シート内には何も入れず)
  「日付の数だけ」シートを作成 じゃなくって、ですか?
> ⇒4. 2.のA列に順にアルファベットをA、B、C、・・・と代入。

Q4.元データの表のC列の日付の種類だけ、シートを作って、
  それらのシートにその特定の日付のデータだけ、抽出転記
  を繰り返す処理なら、先ほどの「フィルタオプション」を
  VBAでくり返せば、けっこう簡単にできますけど、そういう
  処理でないのなら、今一度、具体的な処理手順を例を挙げて
  お願いします。

【71020】Re:一つのファイル・シートから、日付で...
発言  UO3  - 12/1/26(木) 13:21 -

引用なし
パスワード
   ▼hakemaru さん:

>一つのexcelファイルから、ファイル分割、シート作成、A列に順にアルファベットをA、B、C、・・・と代入。

いまいち、要件がクリアには理解しきっていないのですが、複数ファイルにわけたとして
それぞれのブックのシートのA列を「連番的」な列にするんでしょうね。
最初がA,以降、B,C・・・・、26件目がZ?
なんとなくわかりますが、27件目は、どうなりますか?

【71030】Re:一つのファイル・シートから、日付で...
質問  hakemaru  - 12/1/26(木) 20:53 -

引用なし
パスワード
   ▼kanabun さん:
>質問があります。
>Q1.1行目からいきなりデータ? それとも、1行目は列見出し?

そうでした。1行目は見出しです。。。

>Q2.Excelの一般機能で(元データの1行目は列見出しがあるものと仮定して、)
> フィルタ- フィルタオプションの設定 を使って、
>  C列1行目からデータ最終行までを選択して、
>  C列の日付データの一覧(重複しない)を どこか空いている列に
>  リストすることはできますか?

C列の日付は重複し、C列の日付は上から順に並んでいます。
例↓
 C
2 2012/01/01
3 2012/01/02
4 2012/01/02
5 2012/01/03

>Q3. このあとの処理↓がよく分かりません。
>> ⇒2.B列から元データの形式のまま、Sheet1に張り付け
>  元データは何という名前のシートにあるのですか?

元データは"Sheet1"にあります。

>> ⇒3.元データの行数分、シート作成(シート内には何も入れず)
>  「日付の数だけ」シートを作成 じゃなくって、ですか?

はい。。。
C列の重複を含む違う日付毎に、新規ブックを作成、新規ブックの"Sheet1"に貼り付け。

例↓ ※C列が2012/01/02の日付は元データ3、4行目の2つ。
新規ブック作成して、新規ブックの"Sheet1"に元データ3、4行目が貼りつく。

>Q4.・・・今一度、具体的な処理手順を例を挙げ

わかりづらくて申し訳ございません。以下、補足して記載してみます。

1.C列の日付1.を元に日付ごとにファイル(ブック)分割。ファイル名はC列の日付1.を設定。
2.1.で作られた新規ブックのB列から、元データの形式のまま、Sheet1に張り付け。
3.元データの行数分、シート作成(シート内には何も入れず)。
4. 2.のA列に順にアルファベットをA、B、C、・・・と代入。
5.シート名に4.のA列に代入されたアルファベットを設定。


元データのC列が2012/01/02のを例にすると、一つの新規ブックのSheet1のイメージは、
A  B   C   D   E   F   G  …  S
1A 文字列 文字列 2012/01/02 日付2. 日付3. 文字列 … 文字列
2B 文字列 文字列 2012/01/02 日付2. 日付3. 文字列 … 文字列

※元データの行数、4.と5.のアルファベットですが、必ずA〜Zまでの26個以内です。

【71057】Re:一つのファイル・シートから、日付で...
発言  kanabun  - 12/1/27(金) 11:12 -

引用なし
パスワード
   ▼hakemaru さん:
すみません。頭が固いので、詳細が分かりません。
代わりに、こちらがイメージした処理方法を紹介しますので、
参考にしてください。
あたらしいBookを挿入してその Sheet1 に 以下のようなデータを書き込んで
標準モジュールに、下のモジュールコードをコピーして、いったんこのBookを
適当なフォルダーに「名前を付けて保存」してください。

Sheet1  (元データ)
A列 B列 日付1 日付2 日付3 F列 G列 H列 ・・・S列
あ  A  1/5  1/6  1/10 α  GGG H2     S2
い  B  1/5  1/6  1/10 β  GGG H3     S3
う  C  1/6  1/7  1/11 γ  GGG H4     S4
え  D  1/7  1/8  1/12 δ  GGG H5     S5
お  E  1/7  1/8  1/12 ε  GGG H6     S6
か  F  1/7  1/8  1/12 ζ  GGG H7     S7
き  G  1/10 1/11  1/15 η  GGG H8     S8
く  H  1/10 1/11  1/15 θ  GGG H9     S9
け  I  1/20 1/21  1/25 ι  GGG H10    S10
こ  J  1/20 1/21  1/25 κ  GGG H11    S11

このコードを実行するとき、処理したい元データのあるシートを
アクティブにして、実行してください(今回は、対象データが、この
マクロのあるBook=ThisWorkbook にありますが、元データは 必ずしも
マクロのあるBookである必要はありません)
'’───────────────────────── 標準モジュール
Option Explicit
Sub 表を日付別にBookに分ける()
  Dim Path As String
  Dim Sht1 As Worksheet
  Dim Sht2 As Worksheet
  Dim Rng1 As Range
  
  '元データのあるBookの保存先
  Path = ActiveWorkbook.Path & "\"
  '元データのあるシートを変数にセット
  Set Sht1 = ActiveWorkbook.Worksheets("Sheet1")
  '元データ表範囲を変数数にセット
  Set Rng1 = Sht1.Range("A1").CurrentRegion
  
  'C列の日付データの種類を 同じシートにリストアップ
  Rng1.Item(1, "AA").CurrentRegion.ClearContents 'リスト先クリア
  Rng1.Columns("C").AdvancedFilter xlFilterCopy, _
     CopyToRange:=Rng1(1, "AA"), Unique:=True
  
  '日付け別にdataを抽出、新規BookにCopy
  Dim newBook As Workbook
  Dim Rng2 As Range
  Dim c As Range
  Dim i As Long
  
  Set Rng2 = Rng1.Item(1, "AA").Resize(2) '抽出条件範囲
  Set Rng1 = Intersect(Rng1, Rng1.Offset(, 1)) 'A列を除外
  For i = 2 To Rng2.CurrentRegion.Count
    'シートが1枚のBookを作成
    Set newBook = Workbooks.Add(xlWBATWorksheet)
    Set Sht2 = newBook.Worksheets(1)
    'データ抽出転記
    Rng1.AdvancedFilter xlFilterCopy, _
          CriteriaRange:=Rng2, _
          CopyToRange:=Sht2.Range("B1")
    newBook.SaveAs Path & Format$(Rng2.Item(2), "mm-dd") & ".xls"
    Set newBook = Nothing
    
    '---次の抽出処理のために、日付リストを1つ上にシフトする
    Rng2.Item(2).Delete Shift:=xlShiftUp
    Set Rng2 = Rng2.Item(1).Resize(2)
  Next
  
  MsgBox "処理完了"
End Sub

A列に ABCを書き込む処理コードはご自分で考えてみてください。

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