Excel VBA質問箱 IV

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

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


9515 / 13646 ツリー ←次へ | 前へ→

【26906】並べ替え cap 05/7/23(土) 2:02 質問[未読]
【26909】Re:並べ替え りん 05/7/23(土) 9:46 回答[未読]
【26927】Re:並べ替え cap 05/7/23(土) 11:53 お礼[未読]
【26910】Re:並べ替え IROC 05/7/23(土) 9:48 発言[未読]
【26928】Re:並べ替え cap 05/7/23(土) 11:56 お礼[未読]

【26906】並べ替え
質問  cap  - 05/7/23(土) 2:02 -

引用なし
パスワード
   初心者の質問で恐れ入ります。
どなたか、お教え下さい。

1つのブックに数多くのシートがあります。
質問
A列からI列まで3行目以降文字や数字や記号が入ってます。
最終行は290〜300行の範囲です。

A列には、3行目以降日付が 2004年5月28日 の形式で1年数か月分並んでい
ます。
現在、日付は最終行が古く、A3セルが新しい状態です。

これを逆に、下は行くほど新しい日付になる様に並べ替えたいのです。(もち
ろんA〜I列の3行目以降、日付と同じく並べ替える)
そして日付の形式を 5月17日 の形式に変えたいのです。

上記の作業を、一度に100シート以上行なうコードを、教えてください、お
願いします。

【26909】Re:並べ替え
回答  りん E-MAIL  - 05/7/23(土) 9:46 -

引用なし
パスワード
   cap さん、おはようございます。

>1つのブックに数多くのシートがあります。
>A列からI列まで3行目以降文字や数字や記号が入ってます。
>A列には、3行目以降日付が 2004年5月28日 の形式で1年数か月分並んでい
ます。
>現在、日付は最終行が古く、A3セルが新しい状態です。
>これを逆に、下は行くほど新しい日付になる様に並べ替えたいのです。

これを手動でやってみて記録するとだいたいこんな感じです。
Sub Macro2()
' Macro2 Macro
  Range("A3:A300").Select
  Selection.Sort Key1:=Range("A3"), Order1:=xlAscending, Header:=xlGuess, _
    OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _
    :=xlPinYin
  Selection.NumberFormatLocal = "m""月""d""日"""
End Sub

そこから、いらないSelectをはずして、シートでループし、範囲をそれぞれ設定するようにしたらこんな感じです。
Sub test()
  Dim ws As Worksheet
  Application.ScreenUpdating = False
  '現在表示しているブックの全シートをループ
  For Each ws In ActiveWorkbook.Worksheets
   With ws
     'A列の最下行
     Rmax& = .Range("A65536").End(xlUp).Row
     If Rmax& > 3 Then
      'A列のデータの範囲
      Set r1 = .Range(.Cells(3, 1), .Cells(Rmax&, 1))
      'I列まで範囲を拡張してソート
      r1.Resize(r1.Rows.Count, 9).Sort Key1:=.Cells(3, 1), _
                 Order1:=xlAscending, Header:=xlNo
      'セル書式→数値の書式設定
      r1.NumberFormatLocal = "m""月""d""日"""
     End If
   End With
  Next
  Application.ScreenUpdating = True
End Sub

【26910】Re:並べ替え
発言  IROC  - 05/7/23(土) 9:48 -

引用なし
パスワード
   1つのブックに100シートも作って大丈夫ですか?
メモリ限界に達したときにブックが破損して
突然開けなくなりそうで怖いですね。


シートのループは、
Dim i As Long
For i = 1 to Worksheets.count 
  With Worksheets(i)
    Msgbox .Name
    'ここに処理を書く
    '.Range(???)・・・ 
  End With
Next i

【26927】Re:並べ替え
お礼  cap  - 05/7/23(土) 11:53 -

引用なし
パスワード
   ▼りん さん:こんにちは。
ありがとう御座いました。

完璧です。
>cap さん、おはようございます。
>
>>1つのブックに数多くのシートがあります。
>>A列からI列まで3行目以降文字や数字や記号が入ってます。
>>A列には、3行目以降日付が 2004年5月28日 の形式で1年数か月分並んでい
>ます。
>>現在、日付は最終行が古く、A3セルが新しい状態です。
>>これを逆に、下は行くほど新しい日付になる様に並べ替えたいのです。
>
>これを手動でやってみて記録するとだいたいこんな感じです。
>Sub Macro2()
>' Macro2 Macro
>  Range("A3:A300").Select
>  Selection.Sort Key1:=Range("A3"), Order1:=xlAscending, Header:=xlGuess, _
>    OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _
>    :=xlPinYin
>  Selection.NumberFormatLocal = "m""月""d""日"""
>End Sub
>
>そこから、いらないSelectをはずして、シートでループし、範囲をそれぞれ設定するようにしたらこんな感じです。
>Sub test()
>  Dim ws As Worksheet
>  Application.ScreenUpdating = False
>  '現在表示しているブックの全シートをループ
>  For Each ws In ActiveWorkbook.Worksheets
>   With ws
>     'A列の最下行
>     Rmax& = .Range("A65536").End(xlUp).Row
>     If Rmax& > 3 Then
>      'A列のデータの範囲
>      Set r1 = .Range(.Cells(3, 1), .Cells(Rmax&, 1))
>      'I列まで範囲を拡張してソート
>      r1.Resize(r1.Rows.Count, 9).Sort Key1:=.Cells(3, 1), _
>                 Order1:=xlAscending, Header:=xlNo
>      'セル書式→数値の書式設定
>      r1.NumberFormatLocal = "m""月""d""日"""
>     End If
>   End With
>  Next
>  Application.ScreenUpdating = True
>End Sub

【26928】Re:並べ替え
お礼  cap  - 05/7/23(土) 11:56 -

引用なし
パスワード
   ▼IROC さん:こんにちは。
お心遣い、ありがとう御座いました。
これからも宜しくお願いします。
>1つのブックに100シートも作って大丈夫ですか?
>メモリ限界に達したときにブックが破損して
>突然開けなくなりそうで怖いですね。
>
>
>シートのループは、
>Dim i As Long
>For i = 1 to Worksheets.count 
>  With Worksheets(i)
>    Msgbox .Name
>    'ここに処理を書く
>    '.Range(???)・・・ 
>  End With
>Next i

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