Excel VBA質問箱 IV

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

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


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

【70079】アルファベットのソート ごん 11/10/14(金) 9:21 質問[未読]
【70080】Re:アルファベットのソート ichinose 11/10/14(金) 10:09 発言[未読]
【70084】Re:アルファベットのソート ごん 11/10/14(金) 11:51 質問[未読]
【70082】Re:アルファベットのソート UO3 11/10/14(金) 10:27 回答[未読]
【70085】Re:アルファベットのソート ごん 11/10/14(金) 12:19 質問[未読]
【70089】Re:アルファベットのソート ごん 11/10/14(金) 14:41 質問[未読]
【70093】Re:アルファベットのソート UO3 11/10/14(金) 17:41 発言[未読]
【70100】Re:アルファベットのソート ごん 11/10/15(土) 10:55 質問[未読]
【70102】Re:アルファベットのソート UO3 11/10/15(土) 13:11 回答[未読]
【70131】Re:アルファベットのソート ごん 11/10/17(月) 9:31 質問[未読]
【70134】Re:アルファベットのソート UO3 11/10/17(月) 9:53 発言[未読]
【70139】Re:アルファベットのソート ごん 11/10/17(月) 10:35 お礼[未読]
【70137】Re:アルファベットのソート UO3 11/10/17(月) 10:16 回答[未読]
【70140】Re:アルファベットのソート ごん 11/10/17(月) 11:05 お礼[未読]
【70138】Re:アルファベットのソート kanabun 11/10/17(月) 10:26 発言[未読]
【70142】Re:アルファベットのソート ごん 11/10/17(月) 11:12 お礼[未読]
【70096】Re:アルファベットのソート kanabun 11/10/14(金) 20:43 発言[未読]
【70101】Re:アルファベットのソート ごん 11/10/15(土) 11:09 お礼[未読]
【70107】Re:アルファベットのソート kanabun 11/10/15(土) 19:09 発言[未読]
【70130】Re:アルファベットのソート ごん 11/10/17(月) 8:16 お礼[未読]
【70133】Re:アルファベットのソート UO3 11/10/17(月) 9:44 発言[未読]
【70135】Re:アルファベットのソート kanabun 11/10/17(月) 10:10 発言[未読]
【70188】Re:アルファベットのソート n 11/10/18(火) 23:23 発言[未読]
【70195】Re:アルファベットのソート kanabun 11/10/19(水) 10:43 発言[未読]
【70196】Re:アルファベットのソート kanabun 11/10/19(水) 11:01 発言[未読]
【70262】Re:アルファベットのソート ごん 11/10/24(月) 17:14 お礼[未読]
【70083】Re:アルファベットのソート kanabun 11/10/14(金) 11:31 発言[未読]
【70086】Re:アルファベットのソート ごん 11/10/14(金) 12:30 お礼[未読]
【70087】Re:アルファベットのソート kanabun 11/10/14(金) 13:40 発言[未読]
【70088】Re:アルファベットのソート ごん 11/10/14(金) 14:05 発言[未読]
【70090】Re:アルファベットのソート kanabun 11/10/14(金) 15:39 発言[未読]
【70091】Re:アルファベットのソート ごん 11/10/14(金) 17:00 質問[未読]
【70092】Re:アルファベットのソート kanabun 11/10/14(金) 17:15 発言[未読]
【70265】Re:アルファベットのソート ちん 11/10/24(月) 19:29 発言[未読]

【70079】アルファベットのソート
質問  ごん  - 11/10/14(金) 9:21 -

引用なし
パスワード
   A列に数字が入っています。
01〜99までの値です。出てくる順番はランダムです。

B列にアルファベットが入っています。
AからZZまでの文字です。出てくる順番はランダムです。

A列がB列より優先で、ソートしたいと思います。

B列のソートの順番は、
A、B、C、・・・、Z、AA、AB、・・・、AZ、・・・となってほしいのですが、
エクセルのソート機能を実行して、マクロの記録で行うと、
A、AA、AB、・・・、B、BB、BC、・・・となってしまいます。

どうすれば対処できるか教えてください。お願いいたします。

ソートの結果
A列 B列
01  A
01  B
01  AS 
02  G
02  AD
31  V
32  F

【70080】Re:アルファベットのソート
発言  ichinose  - 11/10/14(金) 10:09 -

引用なし
パスワード
   こんにちは。

▼ごん さん:
>A列に数字が入っています。
>01〜99までの値です。出てくる順番はランダムです。
>
>B列にアルファベットが入っています。
>AからZZまでの文字です。出てくる順番はランダムです。
>
>A列がB列より優先で、ソートしたいと思います。
>
>B列のソートの順番は、
>A、B、C、・・・、Z、AA、AB、・・・、AZ、・・・となってほしいのですが、
>エクセルのソート機能を実行して、マクロの記録で行うと、
>A、AA、AB、・・・、B、BB、BC、・・・となってしまいます。


>
>どうすれば対処できるか教えてください。お願いいたします。
>
>ソートの結果
>A列 B列
>01  A
>01  B
>01  AS 
>02  G
>02  AD
>31  V
>32  F
作業列を設けて(仮にC列)
C2に
=REPT(" ",MAX(INDEX(LEN($B$2:$B$8),,))-LEN(B2))&B2
という入力して、下にフィル操作してください。

これでB列の変わりにC列をキーにソートしてみてください。

【70082】Re:アルファベットのソート
回答  UO3  - 11/10/14(金) 10:27 -

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

おはようございます

要件としてはアルファベットの桁は2桁までということですが、
仮に3桁あれば AB より AAA が下に来るということでしょうかね。
つまり「アルファベットの桁数」を2番目の優先度、アルファベットそのものを
3番目の優先度にすることになりますか。

作業列を作ります。ここでは簡単にC列にしています。
適宜変更願います。(動的に使用領域の右側の列を取得して使うこともできますが)

Sub Sample()
  Dim z As Long
  z = Range("A" & Rows.Count).End(xlUp).Row
  With Range("C1:C" & z)
    .Formula = "=LEN(B1)"
    .Value = .Value
  End With
  Cells.Sort Key1:=Range("A1"), Order1:=xlAscending, _
        Key2:=Range("C1"), Order2:=xlAscending, _
        Key3:=Range("B1"), Order3:=xlAscending, _
        Header:=xlNo
  Columns("C").ClearContents
End Sub

【70083】Re:アルファベットのソート
発言  kanabun  - 11/10/14(金) 11:31 -

引用なし
パスワード
   ▼ごん さん:
>B列にアルファベットが入っています。
>AからZZまでの文字です。

思いつきですが、作業列を使わない方法で、
Sub Try1()
  Dim c As Range
  Dim ok As Boolean
  
  With Range("A1").CurrentRegion
    For Each c In .Columns(2).Cells
      If ok Then
        c.Characters.PhoneticCharacters _
          = c(1, 0).Text & Range(c.Text & "1").Column
      Else
        ok = True
      End If
    Next
    .Sort Key1:=.Columns(2), Header:=xlYes
  End With
  
End Sub

※Excel2007以降なら"ZZ" まででもOK,
 それ以前のExcelなら "IV"までと制限つきですが。

【70084】Re:アルファベットのソート
質問  ごん  - 11/10/14(金) 11:51 -

引用なし
パスワード
   ▼ichinose さん:
回答ありがとうございます。

この数式をC列にマクロで記載するには、どうすれば良いのでしょうか?

【70085】Re:アルファベットのソート
質問  ごん  - 11/10/14(金) 12:19 -

引用なし
パスワード
   ▼UO3 さん:
回答ありがとうございます。
ばっちりです。

エクセルに作業場を設けずに、配列か何かにデータを記憶して、
並べ替えるなんて無理ですよね。
あえて、欲を言えばということで、お分かりならお願いします。
(一旦、列を追加して、あとで削除とかは無しで)

【70086】Re:アルファベットのソート
お礼  ごん  - 11/10/14(金) 12:30 -

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

回答ありがとうございます。
試してみましたが、アルファベットがソートされませんでした。

【70087】Re:アルファベットのソート
発言  kanabun  - 11/10/14(金) 13:40 -

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

>試してみましたが、アルファベットがソートされませんでした。

あれ?一応こちらのExcel2002では、適当なデータで試して
うまいことSortできたんですけどね?
そちらのExcelのバージョンは何ですか?

(Sortメソッドの「ふりがなをつかう」オプションがONになって
いることが前提です)

【70088】Re:アルファベットのソート
発言  ごん  - 11/10/14(金) 14:05 -

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

レスありがとうございます。

>そちらのExcelのバージョンは何ですか?

2003です。


>(Sortメソッドの「ふりがなをつかう」オプションがONになって
>いることが前提です)

ONになっていました。
実施例ですが、以下のようになりました。

1    b
1    v
1    ad
1    as
1    f
1    g

【70089】Re:アルファベットのソート
質問  ごん  - 11/10/14(金) 14:41 -

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

いつも回答ありがとうございます。

簡単な例題では、うまくいったのですが、実際のデータでは、つまずいてしまいました。

実際には、3行以降をソートしたいのですが、どうすれば良いのでしょうか?

また、ソートに影響があるかどうか分かりませんが、2行目には、セルが結合されたところがあります。

【70090】Re:アルファベットのソート
発言  kanabun  - 11/10/14(金) 15:39 -

引用なし
パスワード
   ▼ごん さん:
>実施例ですが、以下のようになりました。
>
>1    b
>1    v
>1    ad
>1    as
>1    f
>1    g

すみません。かんちがいでした。
下記に訂正します。
(3行目からデータと仮定してます)

Sub Try3()    '3行目からソート範囲
  Dim c As Range
  Dim ok As Boolean
  
  With Range("A3", Cells(Rows.Count, 1).End(xlUp)).Resize(, 2) '2列
    For Each c In .Columns(2).Cells
      c.Characters.PhoneticCharacters _
        = c(1, 0).Text _
         & Format$(Range(c.Text & "1").Column, "000")
    Next
    .Sort Key1:=.Columns(2), Header:=xlNo
  End With
  
End Sub

【70091】Re:アルファベットのソート
質問  ごん  - 11/10/14(金) 17:00 -

引用なし
パスワード
   ▼kanabun さん:
回答ありがとうございました。
ようやくマクロの意味が分かりました。

アルファベットを列のアルファベットに見立てて、列のNOを取得して、ソートしているのですね。面白いです。

しかしながら、実際のコードとなると意味が分からないところがありまして、ちょっと教えていただきたいのです。


>  
>  With Range("A3", Cells(Rows.Count, 1).End(xlUp)).Resize(, 2) '2列
>    For Each c In .Columns(2).Cells


In .Columns(2).Cells

これはA列とB列の各セルのことですよね?


>      c.Characters.PhoneticCharacters

これは何を意味しているのでしょうか?


>    .Sort Key1:=.Columns(2), Header:=xlNo

これが一番分かりません。
A列でソートじゃないし、B列でソートでもないし、c.Characters.PhoneticCharactersでソートという意味でしょうか?

【70092】Re:アルファベットのソート
発言  kanabun  - 11/10/14(金) 17:15 -

引用なし
パスワード
   ▼ごん さん:
>ようやくマクロの意味が分かりました。

ちょっと出かけますので、簡単に。
>
>アルファベットを列のアルファベットに見立てて、列のNOを取得して、ソートしているのですね。面白いです。
そうです。アルファベットを列番号に見立ててるわけです(なので
Excel2003までですと IVまでという制限がつきます)

>In .Columns(2).Cells
>
>これはA列とB列の各セルのことですよね?
これは 「B列 .Columns(2) 内の各セル」という意味です。

>>      c.Characters.PhoneticCharacters
>
>これは何を意味しているのでしょうか?
ふりがなをセットしています。


>>    .Sort Key1:=.Columns(2), Header:=xlNo
>
>これが一番分かりません。
>A列でソートじゃないし、B列でソートでもないし、
>c.Characters.PhoneticCharactersでソートという意味でしょうか?

B列でソートしています。
なぜB列だけで済んでいるかというと、ふりがなをセットするとき、
A列文字列もB列列番号のまえに付加しているからです。

code    alpha    
1    b    1002 ← A列の 1 & Range("b" & 1).Column
1    f    1006
1    g    1007
1    v    1022
1    ad    1030
1    as    1045
          ↑これは B列につけられた「ふりがな」です。

【70093】Re:アルファベットのソート
発言  UO3  - 11/10/14(金) 17:41 -

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

>実際には、3行以降をソートしたいのですが、どうすれば良いのでしょうか?
>また、ソートに影響があるかどうか分かりませんが、2行目には、セルが結合されたところがあります。

3行目以降ということについては対応できます。
ポイントは、セル結合ですが、具体的にどのように結合されているのですか?

>エクセルに作業場を設けずに、配列か何かにデータを記憶して、並べ替えるなんて無理ですよね。

いえいえ、並び替え機能を使うより効率は悪くなりますがえきます。
ポイントは、上で申し上げた結合セルです。

【70096】Re:アルファベットのソート
発言  kanabun  - 11/10/14(金) 20:43 -

引用なし
パスワード
   ▼ごん さん:
>▼UO3 さん:
>実際には、3行以降をソートしたいのですが、どうすれば良いのでしょうか?
>
>また、ソートに影響があるかどうか分かりませんが、2行目には、セルが結合されたところがあります。
結合セルは2行目だけですか?
3行目以降は結合セルがないなら、
全然問題ないのじゃないでしょうか。

#ふ〜〜、
久しぶりに、日本酒飲んで、陽気・のん気になってます

【70100】Re:アルファベットのソート
質問  ごん  - 11/10/15(土) 10:55 -

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

レスありがとうございます。

>3行目以降ということについては対応できます。
>ポイントは、セル結合ですが、具体的にどのように結合されているのですか?

1行目は何もなし
2行目はA列とB列が結合
3行目からデータが入っています

よろしくお願いいたします。

【70101】Re:アルファベットのソート
お礼  ごん  - 11/10/15(土) 11:09 -

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

回答ありがとうございます。
コードの意味、よく分かりました。

ところで、今頃ですが、アルファベットはZZまであるので、今の方法ではダメなことに気づいてしまいました。

【70102】Re:アルファベットのソート
回答  UO3  - 11/10/15(土) 13:11 -

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

>1行目は何もなし
>2行目はA列とB列が結合
>3行目からデータが入っています

では、3行目以降の処理には結合セルは関係しませんね。
うえで配列でもできると「おおぼら」をふきましたが、当方で手持ちのプロシジャは
二次元配列のソートに関して、キー列は1つだけというシロモノで、今回のように
複数列条件をカバーしていないので、取り下げさせてください。

作業列は使いますが、現在のシートにあるデータには影響を与えない形にしますし
(作業列を使っていることを意識させない方式)なんとか妥協いただけないかな?

Sub Sample2()
  Dim myA As Range
  Dim lCell As Range
  Dim z As Long
  
  Application.ScreenUpdating = False
  
  With ActiveSheet.UsedRange
    Set lCell = .Cells(.Cells.Count).Offset(, 1)
  End With
  
  Set myA = Range("A3", lCell)
  
  With myA.Columns(myA.Columns.Count)
    .Formula = "=LEN(B3)"
    .Value = .Value
  End With
  
  myA.Sort Key1:=Columns("A"), Order1:=xlAscending, _
        Key2:=lCell, Order2:=xlAscending, _
        Key3:=Columns("B"), Order3:=xlAscending, _
        Header:=xlNo
       
  lCell.EntireColumn.ClearContents
  Set myA = Nothing
  Set lCell = Nothing
  
  Application.ScreenUpdating = True
  
End Sub

【70107】Re:アルファベットのソート
発言  kanabun  - 11/10/15(土) 19:09 -

引用なし
パスワード
   ▼ごん さん:
>コードの意味、よく分かりました。
>
>ところで、今頃ですが、アルファベットはZZまであるので、今の方法ではダメなことに気づいてしまいました。

Sub Try4()    '3行目からソート範囲 "ZZ"まで対応
  Dim c As Range
  Dim ok As Boolean
  
  With Range("A3", Cells(Rows.Count, 1).End(xlUp)).Resize(, 2) '2列
    For Each c In .Columns(2).Cells
      c.Characters.PhoneticCharacters _
        = c(1, 0).Text & Format000(c.Text)
    Next
    .Sort Key1:=.Columns(2), Header:=xlNo
  End With
  
End Sub

Private Function Format000(s As String) As String
  Dim ss As String
  Dim i As Long, n As Long
  ss = UCase$(s)
  For i = 1 To Len(ss)
    If n > 0 Then n = n * 26
    n = n + Asc(Mid$(ss, i, 1)) - &H40
  Next
  Format000 = Format$(n, "000")
End Function

【70130】Re:アルファベットのソート
お礼  ごん  - 11/10/17(月) 8:16 -

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

いつも回答ありがとうございます。

正しく処理できることは確認できました。

しかしながら、実際のファイルで確認してみたところ、処理スピードが遅くて、ちょっと実用で使うには問題がありそうです。

実際のファイルは1000行程度あり、また、私だけが使うファイルなら問題ないのですが、部署の人全員が使うため、受け入れられそうにありません。

エクセルのソート機能が早いのでどうしても、それとの比較で見られてしまいます。

簡単なサンプルで試していたときは問題なかったのですが、今頃ですが、申し訳ありません。

【70131】Re:アルファベットのソート
質問  ごん  - 11/10/17(月) 9:31 -

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

いつも回答ありがとうございます。

(おおぼらの件は、了解です。 冗談です。)

実際のファイルでやってみたら、ちゃんと動きました。

しかしながら、実際のファイルには更にC列に三桁の数字がありまして、結局は、A列B列C列の順でソートさせなければなりません。

UO3さんのコードをいじって、C列に対応したkey4を追加してみましたら、見事にエラーがでまして、もしかして、keyは3つまでしか使えない?

ということで、更にどうすれば良いかお教えください。

【70133】Re:アルファベットのソート
発言  UO3  - 11/10/17(月) 9:44 -

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

おはようございます。

>しかしながら、実際のファイルで確認してみたところ、処理スピードが遅くて、ちょっと実用で使うには問題がありそうです。
>実際のファイルは1000行程度あり、また、私だけが使うファイルなら問題ないのですが、部署の人全員が使うため、受け入れられそうにありません。
>エクセルのソート機能が早いのでどうしても、それとの比較で見られてしまいます。

どんなロジックを書いたとしてもエクセル標準機能を、できるだけそのまま活用するほうが
処理効率は断然すぐれています。

押しウリではないですけど、私が11/10/15(土) 13:11にアップしたコードを
そちらの実データで試していただけませんか?

【70134】Re:アルファベットのソート
発言  UO3  - 11/10/17(月) 9:53 -

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

確認ありがとうございます。
ちょっと、レスが行き違いになったようですので、
私の 11/10/17(月) 9:44 は無視してください。

>しかしながら、実際のファイルには更にC列に三桁の数字がありまして、結局は、A列B列C列の順でソートさせなければなりません。
>
>UO3さんのコードをいじって、C列に対応したkey4を追加してみましたら、見事にエラーがでまして、もしかして、keyは3つまでしか使えない?
>

そうですねぇ。2003までのバージョンではキーは3つ。
2007以降ならOKなんですが。

>更にどうすれば良いかお教えください

2003までで、3つ以上キーがある場合は、
まず、優先度の「低い」もので並び替え、その並び替えた後のデータを
残りの優先度の高いキーで並び替えます。
今回の場合は、まず、C列だけで並び替えておいて、その後、ご提示した
並び替えを実行してみていただけますか?

【70135】Re:アルファベットのソート
発言  kanabun  - 11/10/17(月) 10:10 -

引用なし
パスワード
   ▼ごん さん:こんにちは〜
>▼kanabun さん:
>
>いつも回答ありがとうございます。
>
>正しく処理できることは確認できました。
>
>しかしながら、実際のファイルで確認してみたところ、処理スピードが遅くて、ちょっと実用で使うには問題がありそうです。

そうですよね〜〜
その方法はあくまで「作業列を使わない」点に主眼をおいた、
いわば、ボケ防止のための思考訓練でしたので、実務的には
「作業列をつかう」のが一番だと、ぼくも思いますです。
UO3さんのレスにあるように「作業列を使っていることを見せなくすれば」
いいわけですから。

【70137】Re:アルファベットのソート
回答  UO3  - 11/10/17(月) 10:16 -

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

一応、C列ソートを加えたものをアップしておきます。
お試しください。

Sub Sample3()
  Dim myA As Range
  Dim lCell As Range
  Dim z As Long
 
  Application.ScreenUpdating = False
 
  With ActiveSheet.UsedRange
    Set lCell = .Cells(.Cells.Count).Offset(, 1)
  End With
 
  Set myA = Range("A3", lCell)
 
  With myA.Columns(myA.Columns.Count)
    .Formula = "=LEN(B3)"
    .Value = .Value
  End With
 
  myA.Sort Key1:=Columns("C"), Order1:=xlAscending, Header:=xlNo '★追加
  
  myA.Sort Key1:=Columns("A"), Order1:=xlAscending, _
        Key2:=lCell, Order2:=xlAscending, _
        Key3:=Columns("B"), Order3:=xlAscending, _
        Header:=xlNo
    
  lCell.EntireColumn.ClearContents
  Set myA = Nothing
  Set lCell = Nothing
 
  Application.ScreenUpdating = True
 
End Sub

【70138】Re:アルファベットのソート
発言  kanabun  - 11/10/17(月) 10:26 -

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

>しかしながら、実際のファイルには更にC列に三桁の数字がありまして、結局は、A列B列C列の順でソートさせなければなりません。
>
>UO3さんのコードをいじって、C列に対応したkey4を追加してみましたら、見事にエラーがでまして、もしかして、keyは3つまでしか使えない?

参考です
試してませんけど、
UO3 さんの 【70102】のままで、
>  With myA.Columns(myA.Columns.Count)
>    .Formula = "=LEN(B3)"
>    .Value = .Value
>  End With
ここを
>  With myA.Columns(myA.Columns.Count)
    .Formula = "=LEN(B3)&C3"
>    .Value = .Value
>  End With
としたら、
そのまま3列でSortできないかなぁ

【70139】Re:アルファベットのソート
お礼  ごん  - 11/10/17(月) 10:35 -

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

いつも回答ありがとうございます。
なるほど、そうやれば良いのですね。
実際のデータでもうまくいきましたよ。


追伸
kanabunさんとUO3さんのやり取りが混ざってしまい、分かりにくくなってしまいましたね。

【70140】Re:アルファベットのソート
お礼  ごん  - 11/10/17(月) 11:05 -

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

回答ありがとうございます。
うまくいきました。

【70142】Re:アルファベットのソート
お礼  ごん  - 11/10/17(月) 11:12 -

引用なし
パスワード
   ▼kanabun さん:
回答ありがとうございます。

私も知らなかったのですが、三桁の数字といっても、例えば”000”は実際のデータは”0”で、エクセルの機能を使って、3桁に見せているだけだったので、今回の方法ではうまくいきませんでした。

【70188】Re:アルファベットのソート
発言  n  - 11/10/18(火) 23:23 -

引用なし
パスワード
   ▼kanabun さん:
こんにちは。


>▼ごん さん:こんにちは〜
>>▼kanabun さん:
>>
>>いつも回答ありがとうございます。
>>
>>正しく処理できることは確認できました。
>>
>>しかしながら、実際のファイルで確認してみたところ、処理スピードが遅くて、ちょっと実用で使うには問題がありそうです。
>
>そうですよね〜〜
>その方法はあくまで「作業列を使わない」点に主眼をおいた、
>いわば、ボケ防止のための思考訓練でしたので、実務的には
>「作業列をつかう」のが一番だと、ぼくも思いますです。
>UO3さんのレスにあるように「作業列を使っていることを見せなくすれば」
>いいわけですから。


今さら過ぎますけど、ScreenUpdating制御でそこそこの速度は出ますよね?
1000行程度だったら実用に耐えれると思うんですけど。
それとFormat000の代わりに
c.Phonetic.Text = Len(c.Value) & c.Value
くらいで各列Keyにすれば良いような気もします。
まさにkanabun さんが
>.Formula = "=LEN(B3)&C3"
と書かれてる発想で。

【70195】Re:アルファベットのソート
発言  kanabun  - 11/10/19(水) 10:43 -

引用なし
パスワード
   ▼n さん:こんにちは

> 今さら過ぎますけど、ScreenUpdating制御でそこそこの速度は出ますよね?
> 1000行程度だったら実用に耐えれると思うんですけど。

ふりがな(Phonetic)を使ったSortは n さんのアイデアでしたね。
せっかく教わったのだから、
もっと執着しないといけなかったですね m(_ _)m

> それとFormat000の代わりに
> c.Phonetic.Text = Len(c.Value) & c.Value
> くらいで各列Keyにすれば良いような気もします。
> まさにkanabun さんが
> >.Formula = "=LEN(B3)&C3"
> と書かれてる発想で。

なるほど〜
Sub Try5()    '3行目からソート範囲 "ZZ"まで対応
  Dim c As Range
  
  Application.ScreenUpdating = False
  With Range("A3", Cells(Rows.Count, 1).End(xlUp)).Resize(, 2) '2列
    For Each c In .Columns(2).Cells
      c.Phonetic.Text = Len(c.Value) & c.Value
    Next
    .Sort Key1:=.Columns(1), Key1:=.Columns(2), Header:=xlNo
  End With
  Application.ScreenUpdating = True
End Sub

◆1000行のデータで測ってみました。(単位:ミリ秒)
--------------------  --------
Try4(Screen制御なし)   10530
Try4(Screen制御あり)    234
Try5(あり、Len(c)方式)   187

変わるものですね〜〜

【70196】Re:アルファベットのソート
発言  kanabun  - 11/10/19(水) 11:01 -

引用なし
パスワード
   失礼
> .Sort Key1:=.Columns(1), Key1:=.Columns(2), Header:=xlNo
              ↓
 .Sort Key1:=.Columns(1), Key2:=.Columns(2), Header:=xlNo

【70262】Re:アルファベットのソート
お礼  ごん  - 11/10/24(月) 17:14 -

引用なし
パスワード
   ▼kanabun さん:
回答ありがとうございます。

確かに速くなりました。

【70265】Re:アルファベットのソート
発言  ちん  - 11/10/24(月) 19:29 -

引用なし
パスワード
   こんばんわ、ごんさん。ちんといいます。
皆さんこんばんわ、横から失礼いたします。
単純に関数を組み込んで、ソートしてみてはどうでしょうか。
A列 B列  C列
01  A  =LEN(B1)
01  B  =LEN(B2)
01  AS  =LEN(B3)
02  G  =LEN(B4)
02  AD  =LEN(B5)
31  V  =LEN(B6)
32  F  =LEN(B7)

C列に文字数の関数を組み込んで、
A列・C列・B列 でソートしてみてください。
以上、参考までに・・・

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