Excel VBA質問箱 IV

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

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


7031 / 13644 ツリー ←次へ | 前へ→

【41609】ソート(オートフィルター)について ToShiYo 06/8/17(木) 4:35 質問[未読]
【41610】Re:ソート(オートフィルター)について かみちゃん 06/8/17(木) 6:33 回答[未読]
【41611】Re:ソート(オートフィルター)について ToShiYo 06/8/17(木) 8:49 質問[未読]
【41629】Re:ソート(オートフィルター)について かみちゃん 06/8/17(木) 12:50 回答[未読]
【41631】Re:ソート(オートフィルター)について ToShiYo 06/8/17(木) 15:25 質問[未読]

【41609】ソート(オートフィルター)について
質問  ToShiYo  - 06/8/17(木) 4:35 -

引用なし
パスワード
   次のような表を、勘定科目で昇順に並べ、尚且つ(製造)の欄を上に
するソートあるいは、オートフィルターの仕方についてアドバイスをお願いします。
<元表>
A        B    C    D    E     F   G
勘定科目   1201  1202   1203  1204   1205   合計
事務費(製造)           30   25    15    70
事務費     10   5                  15
交通費(製造)          100   200    300   600
交通費     30   50                  80 
開発費(製造)          300   200   100   600 
図書費(製造)           20    10    8    38



<仕上げ>
仕上がりは下表のように仕上げたいのですが
(オートフィルターをかけると、
例えば「交通費」の下に「交通費(製造)」の順になってしまいます)
A        B    C    D    E     F   G
勘定科目   1201  1202   1203  1204   1205  合計
開発費(製造)          300   200   100   600 
交通費(製造)          100   200   300   600
交通費     30   50                  80 
事務費(製造)           30   25    15    70
事務費     10   5                  15
図書費(製造)           20    10    8    38



【41610】Re:ソート(オートフィルター)について
回答  かみちゃん E-MAIL  - 06/8/17(木) 6:33 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>仕上がりは下表のように仕上げたいのですが
>(オートフィルターをかけると、
>例えば「交通費」の下に「交通費(製造)」の順になってしまいます)

オートフィルタは関係ないと思うのですが、
[#41519]で提示したコードに似ていますが、以下のような感じでできると思います。
なお、1行目の最終列(提示の例ですとG列)の右隣の列を作業列として使います。

Sub Macro2()
 Dim LastCell As Range
 Dim c As Range
 Dim cntBumon As Integer
 Dim ws1 As Worksheet
 
 Set ws1 = Sheets("Sheet1")
 
 ws1.Activate
 '最終列の決定
 cntBumon = Range("A1", Cells(1, Cells.Columns.Count).End(xlToLeft)).Columns.Count
 
 Set LastCell = Cells(Cells.Rows.Count, 1).End(xlUp)
 'ソートキーを作業列(最終列+1)に設定
 For Each c In Range("A2", LastCell)
  If Right(c.Value, 4) = "(製造)" Then
   c.Offset(, cntBumon).Value = Mid(c.Value, 1, Len(c.Value) - 4) & "0"
  Else
   c.Offset(, cntBumon).Value = c.Value & "1"
  End If
 Next
 '作業列をキーに並び替え
 Range("A1", LastCell).Resize(, cntBumon + 1).Sort Key1:=Cells(2, cntBumon + 1), Order1:=xlAscending, Header:= _
    xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
    SortMethod:=xlPinYin
 '作業列を消去
 Range("A1", LastCell).Offset(, cntBumon).ClearContents
End Sub

【41611】Re:ソート(オートフィルター)について
質問  ToShiYo  - 06/8/17(木) 8:49 -

引用なし
パスワード
   ▼かみちゃん さん:

おはようございます。
[#41519]でもお世話になりました。
ありがとうございます。

テーマを遡って、また質問をさせていただきました。
今回早速ご回答ありがとうございます。

並び替えがうまく行きました。

質問があるのですが、並び替えの列に
AAA(製造) 1
AAA1
BBB0
BBB1
CCC0
CCC1


と表示され、ソートしていますが、なぜ
AAAにのみ(製造)1とAAA1になるのでしょうか?
BBBのようにBBB0とBBB1のように表示されないのでしょう。
書体の違いからの発生かと思いましたが違います。
アドバイスお願いします。

【41629】Re:ソート(オートフィルター)について
回答  かみちゃん E-MAIL  - 06/8/17(木) 12:50 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>AAAにのみ(製造)1とAAA1になるのでしょうか?
>BBBのようにBBB0とBBB1のように表示されないのでしょう。

If Right(c.Value, 4) = "(製造)" Then
のコードでセルの値の末尾に"0"をつけるか"1"をつけるかを判断しています。
つまり、セルの値の末尾4文字が"(製造)"であれば、"(製造)"の文字を""に置き換
えて(結果的に削除して)その後ろに"0"をつけます。
一方、セルの値の末尾4文字が"(製造)"でなければ、その後ろに"1"をつけます。
ただし、末尾が"(製造)"に見えても、"(製造) "のようにスペースが1文字でもあ
れば、コードは、末尾4文字は、"(製造)"ではなく"製造) "であると判断し、
そのまま末尾に"1"をつけます。

したがって、今回の場合は、"(製造)1"となるのではなく、"(製造) 1"などと間に
スペースなど入っていないか確認していただき、元のデータが直せるならば修正
してください。

なお、元データを修正できない場合は、RTrim関数を使って、末尾スペースを除く
ことはできます。
Sub Test()
 Dim a As String
 a = " AAAA "
 MsgBox "[" & a & "] " & Len(a)
 MsgBox "[" & RTrim(a) & "] " & Len(RTrim(a))
 MsgBox "[" & LTrim(a) & "] " & Len(LTrim(a))
 MsgBox "[" & Trim(a) & "] " & Len(Trim(a))
End Sub

【41631】Re:ソート(オートフィルター)について
質問  ToShiYo  - 06/8/17(木) 15:25 -

引用なし
パスワード
   ▼かみちゃん さん

非常に親切な説明ありがとうございます。
よく理解できました。Trimの使い方も理解させて
いただきました。

今後ともよろしくお願いします。

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