Excel VBA質問箱 IV

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

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


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

【11282】オートフィルターで項目別にシートに保存 みかん 04/3/4(木) 16:49 質問
【11284】Re:オートフィルターで項目別にシートに保存 IROC 04/3/4(木) 17:07 回答
【11288】Re:オートフィルターで項目別にシートに... みかん 04/3/4(木) 17:19 発言
【11290】Re:オートフィルターで項目別にシートに... IROC 04/3/4(木) 17:33 回答
【11303】Re:オートフィルターで項目別にシートに... みかん 04/3/5(金) 9:05 発言
【11305】Re:オートフィルターで項目別にシートに... Jaka 04/3/5(金) 9:10 回答
【11307】Re:オートフィルターで項目別にシートに... みかん 04/3/5(金) 9:45 質問
【11308】Re:オートフィルターで項目別にシートに... IROC 04/3/5(金) 9:51 回答
【11317】Re:オートフィルターで項目別にシートに... みかん 04/3/5(金) 12:15 質問
【11318】Re:オートフィルターで項目別にシートに... みかん 04/3/5(金) 12:17 発言
【11321】Re:オートフィルターで項目別にシートに... Jaka 04/3/5(金) 12:54 回答
【11327】Re:オートフィルターで項目別にシートに... みかん 04/3/5(金) 13:58 質問
【11328】Re:オートフィルターで項目別にシートに... Jaka 04/3/5(金) 14:18 回答
【11335】Re:オートフィルターで項目別にシートに... みかん 04/3/5(金) 15:04 お礼

【11282】オートフィルターで項目別にシートに保存
質問  みかん  - 04/3/4(木) 16:49 -

引用なし
パスワード
   OS XP
EXCEL 2002
そして初心者です。

1.A列でオートフィルターをかけて、その項目ごとに抽出し、同じファイルにSheetを追加したい。
2.Sheetの名前はその項目ごとにつけたい。

ということをしたいのですが
よろしくお願いします。

【11284】Re:オートフィルターで項目別にシートに...
回答  IROC  - 04/3/4(木) 17:07 -

引用なし
パスワード
   具体的に例を挙げて説明していただけませんか?

【11288】Re:オートフィルターで項目別にシートに...
発言  みかん  - 04/3/4(木) 17:19 -

引用なし
パスワード
   すみません。説明がわかりづらかったようです。

項目   金額  場所
あああ  300  東京
いいい  200  大阪
あああ  100  福岡
ううう   300  東京
ううう   100  東京
いいい  100  神奈川
いいい  200  名古屋

というような表が1つのシートに入っています。

これを「あああ」だけのものを抽出してSheet名を「あああ」としたいのです。
項目   金額  場所
あああ  300  東京
あああ  100  福岡

同じく「いいい」のものはSheet名「いいい」にしたいのです。
項目   金額  場所
いいい  200  大阪
いいい  100  神奈川
いいい  200  名古屋

これを同じファイルの中で行いたいのです。
よろしくお願いします。

【11290】Re:オートフィルターで項目別にシートに...
回答  IROC  - 04/3/4(木) 17:33 -

引用なし
パスワード
   オートフィルターを使った方法でないとダメですか?

A列をフィルタオプションの重複無視して、
抽出された名前でいっきに新規シートを追加して

A列を並べ替えして、
for〜next でループさせれば、
フィルタより時間は掛かるけど簡単に出来ると思いますが・・

【11303】Re:オートフィルターで項目別にシートに...
発言  みかん  - 04/3/5(金) 9:05 -

引用なし
パスワード
   IROC さん ありがとうございます。
オートフィルターを使わなくてもできるやり方。。。
柔軟な発想に、眼からウロコです。

ぜひやり方を教えていただきたいのですが
よろしくお願いします。

【11305】Re:オートフィルターで項目別にシートに...
回答  Jaka  - 04/3/5(金) 9:10 -

引用なし
パスワード
   オートフィルタですけど...。

Sub みかん()
  Dim Rend As Long, Cend As Long, Cel As Range, AcSh As Worksheet
  Set AcSh = ActiveSheet
  Rend = AcSh.Cells(Rows.Count, "A").End(xlUp).Row
  Cend = AcSh.Cells(1, Columns.Count).End(xlToLeft).Column
  
  Application.ScreenUpdating = False
  For Each Cel In AcSh.Range("A2", AcSh.Range("A65536").End(xlUp))
    If Application.CountIf(AcSh.Range("A1", Cel), Cel.Value) = 1 Then
      Worksheets.Add(After:=Worksheets(Worksheets.Count)).Name = Cel.Value
      AcSh.Range("A1").Resize(, Cend).Copy Sheets(Cel.Value).Range("A1").Resize(, Cend)
      AcSh.Range("A1:A" & Rend).AutoFilter Field:=1, Criteria1:=Cel.Value
      AcSh.Range("A2:A" & Rend).Resize(, Cend).SpecialCells(xlCellTypeVisible).Copy
      Sheets(Cel.Value).Range("A2").PasteSpecial
      Sheets(Cel.Value).Range("A1").Select
      AcSh.Range("A" & Rend).AutoFilter
    End If
  Next
  Application.ScreenUpdating = True
End Sub

【11307】Re:オートフィルターで項目別にシートに...
質問  みかん  - 04/3/5(金) 9:45 -

引用なし
パスワード
   Jaka さま
迅速な対応ありがとうございます。感謝いたします。

Worksheets.Add(After:=Worksheets(Worksheets.Count)).Name = Cel.Value
でエラーがでてしまい
「実行時エラー1004 シートまたはグラフの名前が正しくありません。」
というメッセージがでてしまいます。
ちなみに、シート名はSheet1ですが、ActiveSheetでこのマクロを行えば、Sheet名は特に指定しなくても良いのですよね。

しかしマクロの結果は、
項目ごとにシートがわかれていて、
Worksheets.Add(After:=Worksheets(Worksheets.Count)).Name = Cel.Value
がきちんと行われているように見えるのですが、なのになぜエラー表示がでてしまうのでしょう。。。

よろしくお願いします。

【11308】Re:オートフィルターで項目別にシートに...
回答  IROC  - 04/3/5(金) 9:51 -

引用なし
パスワード
   A列に シート名としてふさわしくない文字が使われているとか・・?

【11317】Re:オートフィルターで項目別にシートに...
質問  みかん  - 04/3/5(金) 12:15 -

引用なし
パスワード
   IROC さん 的確なアドバイスありがとうございます。
やはり、項目の文字が33文字を超えていたのがありました。
33文字を超えると、Sheet名につけられないのですね。
項目を33文字以内に変更したらうまくできました。
本当にありがとうございます。

そして最後にすべてのsheetをAutoFitにしたいのですが
Sheetすべて選択、そして解除の書き方がわかりません。

  Sheets(Array(すべてのSheet選択)).Select
  Sheets(ここは何を入れたらいいのでしょうか?).Activate
  Cells.Select
  Cells.EntireColumn.AutoFit
  Cells.EntireRow.AutoFit
  (すべてのsheet選択解除)

よろしくお願いします。

【11318】Re:オートフィルターで項目別にシートに...
発言  みかん  - 04/3/5(金) 12:17 -

引用なし
パスワード
   間違えました。31文字までですね(汗)。。。

【11321】Re:オートフィルターで項目別にシートに...
回答  Jaka  - 04/3/5(金) 12:54 -

引用なし
パスワード
   追加したシートだけだと。

Sheets(Cel.Value).Range("A2").PasteSpecial
Sheets(Cel.Value).Range("A1").Select
Sheets(Cel.Value).Cells.EntireColumn.AutoFit  '追加
Sheets(Cel.Value).Cells.EntireRow.AutoFit   '追加


>オートフィルターを使わなくてもできるやり方
こんな感じでしょうか?

前処理
Gを行番号とし、Gに2を代入。

メイン処理
A列G行の値と同じシート名が有る?
 Yes
 そのシートの最終行を調べ、次の行にデータをコピペする。
 No
 シートを追加作成して、シート名にA列G行の値の名前をつける。
 1行目の項目名をコピペする。
 シートの最終行を調べ、次の行にデータをコピペする。

最後の行?
 Yes
 終り
 No
 Gにプラス1して、メイン処理の先頭に戻る。

【11327】Re:オートフィルターで項目別にシートに...
質問  みかん  - 04/3/5(金) 13:58 -

引用なし
パスワード
   Jaka さん ありがとうございます。

>Sheets(Cel.Value).Range("A2").PasteSpecial
でいきなりエラーがでて進みません。
「追加したシートを全部選ぶ」というコードは
いれなくてもだいじょぶなんですか?
ピントが外れた質問だったらごめんなさい。

>>オートフィルターを使わなくてもできるやり方
>こんな感じでしょうか?

ありがとうございます。
勉強してみます。

【11328】Re:オートフィルターで項目別にシートに...
回答  Jaka  - 04/3/5(金) 14:18 -

引用なし
パスワード
   ▼みかん さん:
>>Sheets(Cel.Value).Range("A2").PasteSpecial
>でいきなりエラーがでて進みません。
>「追加したシートを全部選ぶ」というコードは
>いれなくてもだいじょぶなんですか?
>ピントが外れた質問だったらごめんなさい。

これは、
Sheets(Cel.Value).Range("A2").PasteSpecial  
Sheets(Cel.Value).Range("A1").Select
Sheets(Cel.Value).Cells.EntireColumn.AutoFit  '追加
Sheets(Cel.Value).Cells.EntireRow.AutoFit   '追加


[#11305]のコードの

     Sheets(Cel.Value).Range("A2").PasteSpecial
     Sheets(Cel.Value).Range("A1").Select
  この間に追加するといった意味だったんですけど..。
     AcSh.Range("A" & Rend).AutoFilter

【11335】Re:オートフィルターで項目別にシートに...
お礼  みかん  - 04/3/5(金) 15:04 -

引用なし
パスワード
   Jaka さん・・・
失礼しました。
ピントがはずれたどころか、大間違いな質問をしてしまい
大変はずかしいです。

>[#11305]のコードの
>
>     Sheets(Cel.Value).Range("A2").PasteSpecial
>     Sheets(Cel.Value).Range("A1").Select
>  この間に追加するといった意味だったんですけど..。
>     AcSh.Range("A" & Rend).AutoFilter

やっと理解できました。SheetをふやしてからまとめてAutoFitするのではなく
1枚ずつやるという考え方なのですね。

助けていただいて、本当にありがとうございます。

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