Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Pro : Microsoft 365)
.Sort.SetRange .Range(narabe) のnarabeに入る変数の記述について
投稿日時: 22/11/14 09:47:54
投稿者: takatada72

お世話になります。
 
つまずいているところがあり、お世話になります。
 
プログラムの中で並べ替えを行いたいのですが、
 .Sort.SetRange .Range("A1:A2570") →  .Sort.SetRange .Range("A1:gyo")のように表したいのですが、
エラーになります。
"A1:gyo"の部分を変数にどのようにすれば、エラーにならないでしょうか
※ hensu = "A1:" & gyo の形でhensuを .Sort.SetRange .Range(hensu)にしてもエラーでした。
  
お忙しいとは思いますが宜しくお願い致します。
 
☆★☆★☆★☆★☆★☆★☆★☆★★☆☆★☆★☆★☆★☆★☆★☆★☆★☆
'最終行を取得
 Range("A10000").End(xlUp).Select
gyo = ActiveCell.Row '最終行を取得
 
Dim narabe
narabe = "A1:" & gyo 'こちらの記述に
 
  'DR2更新日順にソートする
  With ActiveSheet
        .Sort.SortFields.Clear
        .Sort.SortFields.Add Key:=.Range("CD1"), Order:=xlDescending
        .Sort.SetRange .Range(narabe) 'ここでエラー
        .Sort.Header = xlYes
        .Sort.Apply
    End With

投稿日時: 22/11/14 09:57:34
投稿者: takatada72

Chr(34) & "A1:" & "A" & gyo & Chr(34) こちらのようにも試しましたがエラーでした。
宜しくお願い致します。

回答
投稿日時: 22/11/14 10:09:28
投稿者: taitani
投稿者のウェブサイトに移動

.Sort.SetRange .Range("A1:A2570")

.Sort.SetRange .Range("A1:A" & gyo) でいけるかと。

回答
投稿日時: 22/11/14 10:20:41
投稿者: taitani
投稿者のウェブサイトに移動

あ、こうですね、
’---------------------

    Dim TagRng As Range
    Dim gyo As Long
    gyo = ActiveCell.Row '最終行を取得
    '
    Set TagRng = ActiveSheet.Range("A1:A" & gyo)
     
      With ActiveSheet
        .Sort.SortFields.Clear
        .Sort.SortFields.Add Key:=.Range("CD1"), Order:=xlDescending
        .Sort.SetRange TagRng
        .Sort.Header = xlYes
        .Sort.Apply
    End With

’---------------------

回答
投稿日時: 22/11/14 11:33:08
投稿者: Suzu

引用:
プログラムの中で並べ替えを行いたいのですが、
 .Sort.SetRange .Range("A1:A2570") →  .Sort.SetRange .Range("A1:gyo")のように表したいのですが、

 
SetRange は、並べ替えの範囲を指定します。
これを、 A1:A〜 の様に、A1〜A列の最終行までを指定し
 
引用:
.Sort.SortFields.Add Key:=.Range("CD1"), Order:=xlDescending

の様に、並べ替えのキーを、CD列にした場合、並べ替え範囲の中に、CD列が入っていない為
Apply でエラーになります。
 
あくまで、CD列をキーにしたいなら、SetRange は
 
 .Sort.SetRange .Range("A1:CD" & gyo)
の様にする必要があります。
 
 
上記とは別に
 A1セル にカーソルを置いた状態で、Ctrl + Shift + End で 選択される範囲に対し
 Sort を行って良いのであれば 最終行を取得する必要はなく
 
With ActiveSheet
  .Sort.SortFields.Clear
  .Sort.SortFields.Add Key:=.Range("CD1"), Order:=xlDescending
  .Sort.SetRange .UsedRange
  .Sort.Header = xlYes
  .Sort.Apply
End With
 
で済みます。 参考までに。

投稿日時: 22/11/14 11:47:03
投稿者: takatada72

Suzuさん
taitaniさん 
 
ありがとうございました。
 
Suzuさんの内容で修正しましたところ、無事、解決しました。