重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

マクロで行の並び替えを行いたいのですがうまく出来ません・・・。

A列には管理番号としてアルファベットの大小文字と数字の組み合わせの4桁の文字列(必ず4文字固定)があります。
B列には品名(例:ポテトチップス等)、C列にはサイズ(例:20㎝等)、D列にはURL(例:http//....)
が記載されています。

以下の様にA列の管理番号を基準として行を並び替えたいのですが、

・A列
aa11
Ab01
Ab02
AB01
AB02
Ac01
Ac02
Ac03
AC01
AC02
AC03
ADA1


以下の様な並び替えしか出来ません。
上記のa→A→b→B..の並びににするのはどうすれば良いでしょうか?

・A列
aa11
Ab01
AB01
Ab02
AB02
Ac01
AC01
Ac02
AC02
Ac03
AC03
ADA1

質問者からの補足コメント

  • うーん・・・

    Excel2007になります。

      補足日時:2020/06/26 11:47
  • 普通に並び替えを行うと画像上端の様になります。
    画像下段の様に並べ替えたいのですがうまくいきません。

    「エクセルの並び替えで大文字小文字を別にし」の補足画像2
      補足日時:2020/06/26 12:27
  • うーん・・・

    やってみましたが以下の部分が私の理解力不足でわかりませんでした。
    I2:J53を名前ボックスで「Ref」と記載するのでしょうか?



    4.範圍 I2:J53 を選擇⇒マウスカーソルを[数式バー]に放り込んで、既存の
     ̄ ̄I3 を文字列 Ref に上書きして Enterキーをパシーッ

    No.2の回答に寄せられた補足コメントです。 補足日時:2020/06/26 14:59
  • J、K、L、Mに4桁を1文字づつ格納して並び替える事にしました。



    Sub test()
    Range("A1:M250").Sort key1:=Range("K1"), order1:=xlAscending, _
    key2:=Range("L1"), order2:=xlAscending, _
    key3:=Range("M1"), order3:=xlAscending, Header:=xlYes
    Range("A1:M250").Sort key1:=Range("J1"), order1:=xlAscending, _
    Header:=xlYes
    End Sub


    コード関数にて比較など勉強にありました。
    ご回答有難うございました。

      補足日時:2020/06/26 15:26

A 回答 (3件)

添附圖參照


1.範圍 H2:H54 に上から夫々文字列 a、A、b、B、c、C、…、z、Z を入力
2.式 =CODE(H2) を入力したセル I2 のフィルハンドルを「エイヤッ!」と
 ̄ ̄ダブルクリック
3.範圍 J2、J3 に夫々數値 101、102 を入力後、範圍 J2:J3 のフィルハン
 ̄ ̄ドルを「エイヤッ!」とダブルクリック
4.範圍 I2:J53 を選擇⇒マウスカーソルを[数式バー]に放り込んで、既存の
 ̄ ̄I3 を文字列 Ref に上書きして Enterキーをパシーッ
5.式 =VLOOKUP(CODE(MID($B2,C$1,1)),Ref,2,0) を入力したセル C2
 ̄ ̄を右隣にオートフィル
6.セル E2、F2 に夫々次式を入力して、範圍 C2:F2 のフィルハンドルを
 ̄ ̄「エイヤッ!」とダブルクリック
 ̄ ̄ ̄E2: =RIGHT(B2,2) を入力
 ̄ ̄ ̄F2: =CONCAT(C2:E2)
7.範圍 A:F 選擇⇒Tabキーをツン、ツン、… してセル F1 をアクティブ
 ̄ ̄にして、[昇順]に並べ替え
其の結果が添附圖左下です。
「エクセルの並び替えで大文字小文字を別にし」の回答画像2
この回答への補足あり
    • good
    • 0
この回答へのお礼

回答有難うございます。
同様のコード関数を使った方法も試したのですが、
色々と具合が悪くて都合により処理をマクロで行いたい状況です。
折角ご回答頂いたのに申し訳ございません・・。

お礼日時:2020/06/26 12:30

[No.2お礼]へのコメント、


》 都合により処理をマクロで行いたい
どうぞ御好きな様になさッて下さい。マクロ音痴な私は退散します。

因みに、「管理番号」は全て半角文字と勝手讀みしてましたが、並べ替え対象の文字・數字データは大文字小文字のみならず、全角半角の混在チャンポン状態てな事は無いですよね?
    • good
    • 0
この回答へのお礼

ご返信ありがとうございます。
折角ご回答頂いたのに申し訳ございません・・・。
管理番号は全て半角になり全角半角は混在しておりません。

お礼日時:2020/06/26 15:04

並べ替えのオプションで「大文字と小文字を区別する」ように設定する。



以下、「マクロの記録」で行った結果。(A1セルはデータラベルとして扱う)

Sub Macro1()
'
' Macro1 Macro
'

'
  ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear
  ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add2 Key:=Range("A2:A13") _
   , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
  With ActiveWorkbook.Worksheets("Sheet1").Sort
   .SetRange Range("A1:A13")
   .Header = xlYes
   .MatchCase = True
   .Orientation = xlTopToBottom
   .SortMethod = xlPinYin
   .Apply
  End With
End Sub

この中の
   .MatchCase = True
が、並べ替えの「大文字と小文字を区別する」オプションになります。
特に指定していないと False になり、大文字と小文字を同一視します。


・・・
あるいは並べ替えの「ユーザー定義」を設定すれば楽だろうと思う。

a
A
b
B
c
C
d
D
と新規リストを作成して、そののちに並べ替えをすればいい。


・・・
とまあ、「マクロの記録」を使って、Excelの機能をそのまま使うという解決方法もあります。
色々な機能があるので、Excelを使っている人の中でそれらの機能を全部マクロとして理解している人は僅かだろうと思います。
分からなくても当然であり、それが普通なんです。
(そもそもExcelの機能を知らない人もいる、というか全部知っている人は少ない)
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
「プロパティまたはメソッドが見つかりません。(エラー番号:423)」のエラーが発生致しました。

マクロに詳しく無くネットにあるサンプルを多少改変して
利用するぐらいしか出来ませんが
質問前に色々調べて「MatchCase:=True」を入れればいいのかと思って以下を実行しましたが駄目で質問しました。


Sub test_0()

Range("A1:D350").Sort _
Key1:=Range("A1"), _
Order1:=xlAscending, _
Header:=xlYes, _
MatchCase:=True

End Sub


また、マクロで行いたいので今回の質問の趣旨と異なりますが、
並べ替えの「ユーザー定義」の件につきましても既に実行済みになります。
しかし、記載頂いた様な新規リストを作成し行いましたが何故か大文字小文字を区別した並び替えが出来ませんでした。
オプションの大文字小文字区別のチェックなども入れたり外したりしてもダメでした。

Excel2007なのですが何かソフト自体に問題があるのでしょうか・・・。

4桁の管理番号をE,F,G,Hセルにleft関数等で4文字を1文字づつ格納して
並び替えのレベルをE→F→G→Hの優先順位で4つ作った場合のみ正常に並び替え出来ました。

お礼日時:2020/06/26 12:03

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!