
No.7ベストアンサー
- 回答日時:
No5です。
コメントを付加しました。'a商品が選択された場合、ソート時に
'.Range("A2:E5").Sort key1:=.Range("B2"), Order1:=xlAscending
'となるようなソートをすることが目的
Private Sub CommandButton1_Click()
Dim zaiko As String
'商品を取り出す(a商品を取り出したと仮定して、コメントを付加)
zaiko = ListBox1.List(ListBox1.ListIndex, 0)
Dim st As Long, en As Long, wrow As Long
With ActiveSheet
'2行から最終行まで繰り返す
For wrow = 2 To .Cells(Rows.count, 1).End(xlUp).Row
'取得した商品とA列の商品が同じなら以下の処理を行う
If zaiko = .Cells(wrow, 1).Value Then
If st = 0 Then st = wrow '最初に出現したならstにその行を記憶するの最初の行が設定される
en = wrow 'enにその行を記憶(毎回更新するので最後の行が設定される)
End If
Next
'上記の結果、st=2 en=5 となる
If st <> 0 Then
Dim srg As String, krg As String
'srgへ"A2:E5"の文字列を設定する為に以下の処理をする
srg = "A" & st & ":E" & en
'krgへ"B2"の文字列を設定する為に以下の処理をする
krg = "B" & st
.Range(srg).Sort key1:=.Range(krg), Order1:=xlAscending
End If
End With
End Sub
No.6
- 回答日時:
検証はしてないので間違ってたらスル~っと流してください。
多分こんな短くて済む訳ないですよね・・・
Dim r As Range
With ActiveSheet
Set r = .Range("A2", .Cells(Rows.Count, "A").End(xlUp)).SpecialCells(xlCellTypeConstants)
r.Areas(ListBox1.ListIndex + 1).Resize(, 5).Sort Key1:=r.Cells(1, 1).Offset(, 1), Order1:=xlAscending
End With
No.5
- 回答日時:
No3です。
見出し行の下に1行空白を入れたくないなら(現行のフォーマット通りにしたいなら)
以下のようにしてください。
Private Sub CommandButton1_Click()
Dim zaiko As String
zaiko = ListBox1.List(ListBox1.ListIndex, 0)
Dim st As Long, en As Long, wrow As Long
With ActiveSheet
For wrow = 2 To .Cells(Rows.count, 1).End(xlUp).Row
If zaiko = .Cells(wrow, 1).Value Then
If st = 0 Then st = wrow
en = wrow
End If
Next
If st <> 0 Then
Dim srg As String, krg As String
srg = "A" & st & ":E" & en
krg = "B" & st
.Range(srg).Sort key1:=.Range(krg), Order1:=xlAscending
End If
End With
End Sub
この回答へのお礼
お礼日時:2022/05/22 12:19
ありがとうございました。うまくいきました。できれば、マクロに解説つけて貰えませんか。srgソート範囲 krgはソートキー wrowの探し方よくわかりません。
No.4
- 回答日時:
こんにちは
問題点が2つありそうに思います。
・範囲を取得する際に、CurrentRegionで取得しているので、タイトル行に隣接している2行目からのグループはタイトル行を含んでしまいます。
(これが、ご質問になっていることの原因と思います)
・実際には、ご提示のコードでは使用していませんが・・・
>With r.End(xlDown)
End(xlDown)でグループの最後を取得するのは良い案だとは思いますが、グループが1行しかない場合には、次のグループの先頭までを選んでしまいます。
対策としては・・
◇ タイトル行の下に1行の空白行を設けることにすれば、ご提示のままのコードでもいけると思います。
◇ レイアウトをご提示のようにしたければ、Findで取得した行から次の空白行までをきちんと探すことが必要になるでしょう。
(以下では、ソートの対象をA:E列と仮定しました)
>If Not r Is Nothing Then
以降を修正します。
・同じようにFindメソッドで空白セル探すのなら、
Set r2 = Range("A:A").Find(What:="", after:=r)
Range(r, r2.Offset(-1)).Resize(, 5).Sort _
Key1:=r.Offset(, 1), Order1:=xlAscending
・あるいは、順に空白行までを走査するなら、
For i = 1 To Rows.Count
If r.Offset(i).Value = "" Then Exit For
Next i
r.Resize(i, 5).Sort Key1:=r.Offset(, 1), Order1:=xlAscending
No.2
- 回答日時:
現在は、具体的には、どのようなマクロで、ソートしていますか。
a商品のソートならA2:E5をソート範囲にすれば良いかと。
b商品のソートならA8:E11
c商品のソートならA14:E16 になります。
No.1
- 回答日時:
おはようございます。
直接の回答ではありませんが、
どの様なマクロで結果がどの様になっているかの説明が必要かと思います。
それがあれば、良い回答が付くかと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ハイフンの入ったデータの並べ替え
-
並べ替えについて
-
ソート(PL/SQL)
-
レコードの登録順がおかしい
-
テーブルレーコードをソートし...
-
ファイルの漢数字の順番につい...
-
アクセスの並べ替えについて
-
EXCEL 「並び替え」の誤動作に...
-
エクセルのソートについて
-
重複データを一つにまとめたい
-
select文の実行結果に空白行を...
-
SQLローダーCSV取込で、囲み文...
-
SELECT FOR UPDATE で該当レコ...
-
単一グループのグループ関数で...
-
where句中のtrim関数について
-
データ
-
サブクエリを使わない方法
-
SQL*Loader Append
-
ファイルメーカー10で重複デー...
-
【PL/SQL】FROM区に変数を使う方法
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
並べ替えについて
-
レコードの登録順がおかしい
-
ファイルの漢数字の順番につい...
-
月末日のみソートしたい
-
タイトル行を固定してソートしたい
-
テーブルレーコードをソートし...
-
エクセル、並び替え正しくソー...
-
accessでDISTINCT 句と矛盾
-
1の行を固定した上でVBAを用い...
-
ハイフンの入ったデータの並べ替え
-
Excelのオートフィルタでソート...
-
上から何番目か。
-
OracleとAccessの出力順の違い
-
重複データを一つにまとめたい
-
アクセスに関して。クエリの並...
-
MSDOS ソート sortf 使用方法
-
エクセルのソートについて
-
SQLで曜日のソートを月火水木金...
-
エクセルでダブルクリックして...
-
ソート(PL/SQL)
おすすめ情報
Private Sub CommandButton1_Click()
zaiko = ListBox1.List(ListBox1.ListIndex, 0)
With ActiveSheet
Set r = .Range(.Cells(1, 1), .Cells(Rows.Count, 1).End(xlUp)) _
.Find(What:=zaiko, LookIn:=xlValues, LookAt:=xlWhole, After:=Cells(Rows.Count, 1).End(xlUp))
End With
If Not r Is Nothing Then
With r.End(xlDown)
Call r.CurrentRegion.Sort(Key1:=r.Offset(, 1), Order1:=xlAscending)
End With
End If
End
ユーザーホームのテキストボックスで指定した商品のグループのみ日付順にソートします。
現在 見出しを含めるとしていますので、A商品グループをソートすると見出しが下になります。ほかの設定方法か仕方があれば教えて貰えればと思います。