Excel 2016を使用しています。
現在、利用予定表を作成しております。
下記のような表(画像参照)があり地域毎に並び替えを一気にしたいのですが可能でしょうか。
カレンダー形式にしており
A列,D列,G列…(3行毎) に通し番号
B列,E列,H列…(3行毎) に名前
C列,F列,I列…(3行毎) に地域
これが31日分カレンダー形式で作っています。
通し番号はそのままで
日付のグループ?ごとに
地域順に並び替えをしたいのですがマクロで可能でしょうか。
その地域がまとまってくれればいいのでフリガナ等は考慮しなくて大丈夫です。
B5:C9の範囲ひとつでならマクロで並び替えできたのですが
どうしても複数となるとわからなくなってしまいました。
乱文で申し訳ありませんがよろしくおねがいいたします。
No.4ベストアンサー
- 回答日時:
こんにちは!
横からお邪魔します。
お示しの画像の配置で列方向には7日分、行方向には1か月の最終日まであるとしての一例です。
尚、①~⑤に関しては並び替えはしなくてよいのですよね。
一例です。
Sub Sample1()
Dim i As Long, j As Long
Dim myRng As Range
For i = 5 To Cells(Rows.Count, "B").End(xlUp).Row Step 7 '//←B列5行目~B列最終行まで7行おき★//
For j = 2 To Cells(i, Columns.Count).End(xlToLeft).Column Step 3 '//←B列~最終列まで3列おき★//
If Cells(i, j) <> "" Then
Set myRng = Cells(i, j).Resize(5, 2)
myRng.Sort key1:=myRng(2), order1:=xlAscending, Header:=xlNo
End If
Next j
Next i
MsgBox "完了"
End Sub
※ 都道府県?の昇順で並び替えを行っていますので、
お示しの画像だと「福岡」が最後の方にかまとまってしまいます。
コード内の
>xlAscending
を
>xlDescending
にすれば降順になりますので、福岡が上の方にまとまりますね。
昇順・降順は好みで変更してみてください。m(_ _)m
No.5
- 回答日時:
任意の地域順で並べられるように書いてみました。
Sub test()
Range("B5").Select
Dim i As Integer '下方向への繰り返し
Dim x As Integer '右方向への繰り返し
For i = 1 To 5 '5週分繰り返す
For x = 1 To 7 '7日分繰り返す
If ActiveCell.Value <> "" Then 'データが入っていなければ次に
With ActiveSheet.Sort
.SortFields.Clear
.SortFields.Add Key:=ActiveCell.Offset(0, 1), CustomOrder:="東京, 大阪, 福岡, 京都, 愛知"
.SetRange ActiveCell.Resize(5, 2)
.Header = xlNo
.Orientation = xlTopToBottom
.Apply
End With
End If
ActiveCell.Offset(0, 3).Select
Next x
ActiveCell.Offset(7, 0 - (3 * (x - 1))).Select
Next i
Range("B5").Select
MsgBox ("地域の並べ替えが終わりました")
End Sub
No.3
- 回答日時:
なんどもごめんなさい。
、「 Range("A5:C9") のA5を ”A1セル” に見立てるので、C9セルは " C1 ” たことになる」というような意味になります。
も間違いで、正しくは、
、「 Range("A5:C9") のA5を ”A1セル” に見立てるので、C5セルを " C1 ” に見立てたことになる・・・(C9はC5に見立てたことになる」というような意味になります。
でした。
教えてGooって投稿を書き直せないのかしら・・・。すみません。
No.2
- 回答日時:
すみません。
変数設定の
Dim i_tate As Integer
のあとに
Dim i As Integer
Dim j As Integer
が抜けてましたので追記してください。
あと冒頭、「某」ではなく、」「私」でした。
No.1
- 回答日時:
某も初心者なので、古いやり方でしかもダサいコードですみませんが、例えば以下のような感じではどうでしょうか?
全バージョンで使える「Range.Sortメソッド」を使っています。
「ユーザー設定リスト」で設定した並べ替えを適用したかったら、
「Order1:=xlAscending」
の後ろに、
「, OrderCustom:=13」
をくっつけるみたいです。
(13はいくつめの設定かによって数字が変わるようです。)
詳しくは
http://officetanaka.net/excel/vba/tips/tips148.htm
などもご参考に。
なお、「o_Rng01.Range("C1")」は「Range.Rangeプロパティ」ですが、
「Range("A5:C9").Range("C1")」といったような意味合いですが、
この場合ですと、「 Range("A5:C9") のA5を ”A1セル” に見立てるので、C9セルは " C1 ” たことになる」というような意味になります。
なので、相対的な感じのセルの指定になります。(説明下手ですみません。)
よって、並べ替えしたいセル範囲がズレていっても、常に、「3列目の1行目を並べ替えのセルの基準にしている」という意味になります。
2007以降は、「Range.Sortメソッド」での並べ替えのほかに、上記サイトにもあるとおり、「Sortオブジェクト」(Worksheet.Sort?)が使えます。
なお、下記コードをもしお試しになるなら、必ずファイルのバックアップをとってからにしてください。(データをめちゃくちゃにしてしまうといけませんので・・・)
Sub test()
Dim o_Rng01 As Range
Dim i_yoko As Integer
Dim i_tate As Integer
i_yoko = 0
i_tate = 0
For i = 1 To 5 '縦のループ(週単位)
For j = 1 To 7 '横のループ(日単位)
Set o_Rng01 = Range(Cells(5 + i_tate, 1 + i_yoko), Cells(9 + i_tate, 3 + i_yoko))
'並べ替えしたいキーの列が空白だったら、プログラムを終わる。
If o_Rng01.Range("C1") = "" Then Exit Sub
o_Rng01.Sort Key1:=o_Rng01.Range("C1"), Order1:=xlAscending
Set o_Rng01 = Nothing
i_yoko = i_yoko + 3
Next j
i_yoko = 0
i_tate = i_tate + 7
Next i
End Sub
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excel 郵便番号順に並び変えたい 同じ番号が複数あるとき 4 2022/04/28 18:35
- その他(Microsoft Office) 逆順 3 2023/08/24 09:30
- Visual Basic(VBA) vbaで条件付き書式を設定したときの適用範囲について 1 2023/07/17 23:14
- Excel(エクセル) 【困っています】VBA 追加処理の記述を教えてください。 1 2022/08/25 22:54
- Excel(エクセル) Excel>マクロ>特定のセルで同じ情報が登録されている行を1行にまとめたい(文字連結) 6 2023/01/05 16:30
- Visual Basic(VBA) 指定月分の顧客データファイルを統合して並べ替え、所定の場所に貼り付ける 3 2022/09/10 07:55
- Excel(エクセル) 関数EXACT(文字列,文字列)とexcelVBA 3 2022/04/14 15:07
- Excel(エクセル) 製品番号での整列と、検索に関して 3 2023/06/28 19:20
- Excel(エクセル) Excelの計算式で質問です。 3 2022/06/21 21:58
- Excel(エクセル) 【VBA】A列の指定した値と同じ行にあるD列の値を順番にコピペするマクロについて 4 2023/02/01 18:16
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelの入力規則で2列表示したい
-
複数の文字列のいずれかが含ま...
-
数式が入ったセルを含めて、数...
-
Excel上でのデータ数字が連番で...
-
SUMに含まれる範囲から特定のセ...
-
エクセルで表示されている数字...
-
エクセルで2行まとめて並び替...
-
エクセルで小数を含む数値の抽出
-
【Excel】での計算式教え...
-
エクセル:横長の表を改行して...
-
入退社日より各月末の在籍者数...
-
Excelで五十音順に並べ替えたい
-
Excelのセル内文字の並び替えに...
-
エクセルで、毎日の走行距離(...
-
エクセルで1列全部10倍したい
-
Excelでの検索結果を含む行だけ...
-
C列にF列の担当者(A〜)を順番...
-
イラストレーターのマクロ?とか
-
EXCELで一行おきの平均を...
-
エクセルのsumifでかけ算してか...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
複数の文字列のいずれかが含ま...
-
Excelの入力規則で2列表示したい
-
数式が入ったセルを含めて、数...
-
SUMに含まれる範囲から特定のセ...
-
列の数字に100をかけたい
-
Excel上でのデータ数字が連番で...
-
別のセルに値が入力されたら、...
-
エクセルで表示されている数字...
-
エクセルでセルの値分の個数の...
-
エクセル:横長の表を改行して...
-
スペースとスペースの間の文字...
-
HYPERLINKとADDRESSとMATCHの組...
-
Excelのセル内文字の並び替えに...
-
時間を「昼間」と「夜間」に分...
-
エクセルで曜日に応じた文字を...
-
エクセルで、毎日の走行距離(...
-
入退社日より各月末の在籍者数...
-
エクセルのsumifでかけ算してか...
-
Excelで五十音順に並べ替えたい
-
エクセルで1列全部10倍したい
おすすめ情報