Excel VBA質問箱 IV

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

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


9177 / 13646 ツリー ←次へ | 前へ→

【28929】Sortメソッド toki 05/9/18(日) 14:04 質問[未読]
【28930】Re:Sortメソッド みみ 05/9/18(日) 16:13 回答[未読]
【28934】Re:Sortメソッド toki 05/9/18(日) 20:00 お礼[未読]
【28931】Re:Sortメソッド Hirofumi 05/9/18(日) 16:24 回答[未読]
【28933】Re:Sortメソッド toki 05/9/18(日) 19:57 質問[未読]
【28935】Re:Sortメソッド toki 05/9/18(日) 21:14 お礼[未読]

【28929】Sortメソッド
質問  toki  - 05/9/18(日) 14:04 -

引用なし
パスワード
   こんにちは。tokiと申します。
過去ログを参照しましたがよくわからないので並べ替えについて教えてください。

A列  B列  C列    D列  E列  F列  ←列番号
職務 氏名 社員番号 点数A 点数B 点数C ←見出し
S  ○○ ○○○○  ○   ○   ○
M  ○○ ○○○○  ○   ○   ○
S  ○○ ○○○○  ○   ○   ○  
S  ○○ ○○○○  ○   ○   ○
M  ○○ ○○○○  ○   ○   ○
M  ○○ ○○○○    
J  ○○ ○○○○    
J  ○○ ○○○○    
S  ○○ ○○○○    

このときワークシート上のコマンドボタンで並べ替えのマクロを起動しようと思ってます。
職務を並べ替えの基準にするため、ボタンを押すと、S、M、J別にソートされれば良いのですが先頭のSと書いてあるセルがA7なので

Private Sub 整列ボタン_Click()
  
  Range("A7").Sort key1:=Range("A7"), header:=xlNo, sortmethod:=xlPinYin
    
End Sub

としましたが、「同じサイズの結合セルが必要です」というエラーが出てしまいます。ちなみに7行目以降には結合セルはありません。
やりたいのは、A列を基準として職務別に並べ替えを行い、行単位で整列させることです。どのようにすればよいのでしょうか?
ちなみに上図のように点数は未入力のものも存在します。
よろしくお願いします。

【28930】Re:Sortメソッド
回答  みみ  - 05/9/18(日) 16:13 -

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

>Range("A7").Sort key1:=Range("A7"), header:=xlNo, sortmethod:=xlPinYin

提示されたコードで私の環境では、うまくソートされましたよ。

【28931】Re:Sortメソッド
回答  Hirofumi  - 05/9/18(日) 16:24 -

引用なし
パスワード
   >A列  B列  C列    D列  E列  F列  ←列番号
>職務 氏名 社員番号 点数A 点数B 点数C ←見出し
> S  ○○ ○○○○  ○   ○   ○
> M  ○○ ○○○○  ○   ○   ○
> S  ○○ ○○○○  ○   ○   ○  
> S  ○○ ○○○○  ○   ○   ○
> M  ○○ ○○○○  ○   ○   ○
> M  ○○ ○○○○    
> J  ○○ ○○○○    
> J  ○○ ○○○○    
> S  ○○ ○○○○    
>
>このときワークシート上のコマンドボタンで並べ替えのマクロを起動しようと思ってます。
>職務を並べ替えの基準にするため、ボタンを押すと、S、M、J別にソートされれば良いのですが先頭のSと書いてあるセルがA7なので
>
>Private Sub 整列ボタン_Click()
>  
>  Range("A7").Sort key1:=Range("A7"), header:=xlNo, sortmethod:=xlPinYin
>    
>End Sub
>
>としましたが、「同じサイズの結合セルが必要です」というエラーが出てしまいます。ちなみに7行目以降には結合セルはありません。
>やりたいのは、A列を基準として職務別に並べ替えを行い、行単位で整列させることです。どのようにすればよいのでしょうか?
>ちなみに上図のように点数は未入力のものも存在します。
>よろしくお願いします。

列見だしに結合セルが有るのですか?
セル1つを範囲として、Sortを実行すると
CurrentRegionを同じ様に連接する範囲が整列範囲になる様です
詰まり、「Range("A7").Sort」なので、6行目も整列範囲と見なされる様です
因って、整列範囲を指定して整列を実行して見たら?

Private Sub 整列ボタン_Click()

  'Listの列数
  Const clngColumns As Long = 6
  
  Dim lngRows As Long
  
  'Listの先頭セル位置を基準とする
  With ActiveSheet.Cells(7, "A")
    '行数を取得
    lngRows = .Offset(65536 - .Row).End(xlUp).Row - .Row + 1
    If lngRows <= 1 Then
      Exit Sub
    End If
    '範囲を整列
    .Resize(lngRows, clngColumns).Sort _
        Key1:=.Item(1, 1), Order1:=xlAscending, _
        Header:=xlNo, OrderCustom:=1, _
        MatchCase:=False, Orientation:=xlTopToBottom, _
        SortMethod:=xlCodePage
  End With
  
End Sub

【28933】Re:Sortメソッド
質問  toki  - 05/9/18(日) 19:57 -

引用なし
パスワード
   ▼Hirofumi さん:
こんにちは。ご回答ありがとうございます!
ご教示いただいた手法で整列そのものはできたのですが、新たな問題が出てしまいました。

実はワークシートの任意の検索行を削除するコマンドボタンを作ってあります。

検索キーは社員番号です。

しかし、今回教えていただいたコードを実行し、整列させるとこの削除コマンドが検索行を正しく削除してくれなくなってしまいました。
この削除コマンドの概要を下記に記します。
今回の整列コマンドとの整合性についてご教示お願いします。

●削除コマンド

A列  B列  C列    D列  E列  F列  ←列番号
職務 氏名 社員番号 点数A 点数B 点数C ←見出し
S  ○○ ○○○○  ○   ○   ○
M  ○○ ○○○○  ○   ○   ○
S  ○○ ○○○○  ○   ○   ○  
S  ○○ ○○○○  ○   ○   ○
M  ○○ ○○○○  ○   ○   ○
M  ○○ ○○○○    
J  ○○ ○○○○    
J  ○○ ○○○○    
S  ○○ ○○○○    

これと同様のシートが1月〜12月まであります。

ユーザーフォームにて、削除したい社員番号を入力し、それを検索キーとして、検索します。

ある1枚のワークシート”上期”上でその番号を検索したらその検索番号を含む行について、上期及び他の12枚のシートに対して一斉に削除を行えるように下記ボタンを作成しています。(ponponさんからアドバイスいただきました。)

※なお、上期シートにはチェックボックスオブジェクトもあるので、上期シートにはオブジェクトの削除も含まれます。

Private Sub 職務変更削除ボタン_Click()
  
  Dim myRow As Variant
  Dim ans As Variant
  Dim i As Integer
   
   If Me.検索番号TextBox1.Text = "" Then
    MsgBox "検索番号を入力してください。"
   Else
   With Worksheets("上期")
    myRow = Application.Match(Val(Me.検索番号TextBox1.Text), .Range("C:C"), 0)
     If IsError(myRow) Then
      MsgBox "既に削除されています。"
      検索番号TextBox1.Text = ""
      Exit Sub
     End If

    ans = MsgBox("削除してもよいですか?", vbYesNo)
    If ans = vbYes Then
      
      .Cells(myRow, "C").EntireRow.Delete shift:=xlUp
      For Each chcB In .CheckBoxes
      If Cells(myRow, "C").Offset(0, 17).Top = chcB.Top Then
        chcB.Delete
      End If
      Next
      
      For i = 1 To 12
      Worksheets(i & "月").Cells(myRow, "C").EntireRow.Delete shift:=xlUp
      Next

      Else
      Exit Sub
    End If
   
   End With
   End If
 
End Sub

【28934】Re:Sortメソッド
お礼  toki  - 05/9/18(日) 20:00 -

引用なし
パスワード
   ▼みみ さん:
ご回答ありがとうございます!
やはり通常環境ではうまくいくのですね!

【28935】Re:Sortメソッド
お礼  toki  - 05/9/18(日) 21:14 -

引用なし
パスワード
   こんにちは。
先ほどの私の質問ですが、myRowの変数が、「上期シート」のものを流用していたため、MACTH関数の戻り値が各シートの値になっていませんでした。
各シートごとにMATCH関数を使用したところうまくいきました。
大変お手数おかけしました。

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