Excel VBA質問箱 IV

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

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


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

【63377】VBAを変更したい。 k1231 09/10/30(金) 9:53 質問[未読]
【63378】Re:VBAを変更したい。 seg 09/10/30(金) 10:28 発言[未読]
【63379】Re:VBAを変更したい。 k1231 09/10/30(金) 10:39 発言[未読]
【63380】Re:VBAを変更したい。 seg 09/10/30(金) 10:51 発言[未読]
【63381】Re:VBAを変更したい。 k1231 09/10/30(金) 11:11 発言[未読]
【63383】Re:VBAを変更したい。 seg 09/10/30(金) 11:39 発言[未読]
【63384】Re:VBAを変更したい。 k1231 09/10/30(金) 12:05 発言[未読]
【63389】Re:VBAを変更したい。 seg 09/10/30(金) 13:10 発言[未読]
【63391】Re:VBAを変更したい。 k1231 09/10/30(金) 13:36 お礼[未読]
【63393】Re:VBAを変更したい。 seg 09/10/30(金) 14:02 発言[未読]
【63394】Re:VBAを変更したい。 k1231 09/10/30(金) 14:06 お礼[未読]
【63395】Re:VBAを変更したい。 seg 09/10/30(金) 14:14 発言[未読]
【63396】Re:VBAを変更したい。 k1231 09/10/30(金) 15:56 発言[未読]
【63397】Re:VBAを変更したい。 seg 09/10/30(金) 16:38 発言[未読]
【63398】Re:VBAを変更したい。 seg 09/10/30(金) 17:14 発言[未読]
【63399】Re:VBAを変更したい。 k1231 09/10/30(金) 17:32 お礼[未読]
【63382】Re:VBAを変更したい。 SS 09/10/30(金) 11:36 発言[未読]
【63386】Re:VBAを変更したい。 k1231 09/10/30(金) 12:33 発言[未読]

【63377】VBAを変更したい。
質問  k1231  - 09/10/30(金) 9:53 -

引用なし
パスワード
   宜しくお願いします。
エクセル2000を使用しております。OSはXP。

今現在下記のようなコードを使っています。


Private Sub Worksheet_Change(ByVal Target As Excel.Range)
  Dim n As Long
  
  With Target
    If .Count <> 1 Then Exit Sub
    If .Row = 1 Then Exit Sub
    If .Column <> 9 Then Exit Sub
    If .Value = "済" Then
      n = Worksheets("Sheet2") _
        .Range("I" & Rows.Count).End(xlUp).Offset(1).Row
      .EntireRow.Copy Worksheets("Sheet2").Cells(n, 1)
      Application.EnableEvents = False
      .EntireRow.Delete
      Application.EnableEvents = True
    End If
  End With
End Sub

(指定したセル内で”済”を入力すると別シートに移動)
上記に更に条件を加えたいのですが、
E6からの列であいうえお順に自動で整列させるということは可能なのでしょうか?

ご不明な点があれば、補足いたします。
お手数をお掛けいたしますが、回答宜しくお願い致します。

【63378】Re:VBAを変更したい。
発言  seg  - 09/10/30(金) 10:28 -

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

  Range(Cells(6, 5), Cells(Range("E6").End(xlDown).Row, 5)).Select
  Selection.Sort Key1:=Range("E1"), Order1:=xlAscending

はずれかな。

【63379】Re:VBAを変更したい。
発言  k1231  - 09/10/30(金) 10:39 -

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

早速の返答有難うございます。

>  Range(Cells(6, 5), Cells(Range("E6").End(xlDown).Row, 5)).Select
>  Selection.Sort Key1:=Range("E1"), Order1:=xlAscending
>を実行してみたのですが、E6からの列のみではなく、その行も一緒に整列させたいのです・・。
ややこしくて申し訳ありません。

【63380】Re:VBAを変更したい。
発言  seg  - 09/10/30(金) 10:51 -

引用なし
パスワード
   >を実行してみたのですが、E6からの列のみではなく、
>その行も一緒に整列させたいのです・・。

"行"?
E6列から右にあるデータも共に整列ではなくて
左から右にかけて整列させるのですか?

【63381】Re:VBAを変更したい。
発言  k1231  - 09/10/30(金) 11:11 -

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


説明不足で申し訳ありません。

>"行"?
>E6列から右にあるデータも共に整列ではなくて
>左から右にかけて整列させるのですか?


   A   B   C   D   E  F   G
5 受注日 得意先 ユーザー 番号 品名 個数
6 10/3   ×× ○○  123 BBB  5
7 10/4   ▼▼ **   222 AAA  10
8

品名の列に名前を入力すると、自動であいうえお順に並び、
それに伴う受注日なども一緒に付いていくようにしたいです。

何度もすいません。

【63382】Re:VBAを変更したい。
発言  SS  - 09/10/30(金) 11:36 -

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

横から失礼します。
自分の練習のために作ってみました。
こういうことでしょうか?

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
  Dim n As Long
 
  Dim rg As Variant
  With Target
    If .Count <> 1 Then Exit Sub
    If .Row = 1 Then Exit Sub
    If .Column <> 9 Then Exit Sub
    If .Value = "済" Then
      n = Worksheets("Sheet2") _
        .Range("I" & Rows.Count).End(xlUp).Offset(1).Row
      .EntireRow.Copy Worksheets("Sheet2").Cells(n, 1)
      Application.EnableEvents = False
      .EntireRow.Delete
      Application.EnableEvents = True
      
      With Worksheets("Sheet2")
        .Range("A6:" & .Range("A6").SpecialCells _
           (xlCellTypeLastCell).Address).Sort _
           Key1:=.Range("E6"), Order1:=xlAscending, Header:= _
           xlGuess, OrderCustom:=1, MatchCase:=False, _
           Orientation:=xlTopToBottom, _
           SortMethod:=xlPinYin, DataOption1:=xlSortNormal
      End With
      
    End If
  End With
  Set rg = Nothing
End Sub

>▼seg さん:
>>
>
>早速の返答有難うございます。
>
>>  Range(Cells(6, 5), Cells(Range("E6").End(xlDown).Row, 5)).Select
>>  Selection.Sort Key1:=Range("E1"), Order1:=xlAscending
>>を実行してみたのですが、E6からの列のみではなく、その行も一緒に整列させたいのです・・。
>ややこしくて申し訳ありません。

【63383】Re:VBAを変更したい。
発言  seg  - 09/10/30(金) 11:39 -

引用なし
パスワード
   >品名の列に名前を入力すると、自動であいうえお順に並び、
>それに伴う受注日なども一緒に付いていくようにしたいです。

Range(Cells(6, 1), Cells(Range("A6").End(xlDown).Row, Range("A6").End(xlToRight).Column)).Select
Selection.Sort Key1:=Range("E6"), Order1:=xlAscending
これでソート出来ます。

Range("E6").Select
Selection.AutoFilter

私的には、こちらのオートフィルターを使うのが
便利かと思いますが。
(メニュー→データ→フィルタ→オートフィルタ)

【63384】Re:VBAを変更したい。
発言  k1231  - 09/10/30(金) 12:05 -

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


Range(Cells(6, 1), Cells(Range("A6").End(xlDown).Row, Range("A6").End(xlToRight).Column)).Select
Selection.Sort Key1:=Range("E6"), Order1:=xlAscending

上記コードは元あるコードのどこに挿入すれば良いのでしょうか?
頭の悪い質問で申し訳ありません。

>
>私的には、こちらのオートフィルターを使うのが
>便利かと思いますが。
>(メニュー→データ→フィルタ→オートフィルタ)

オートフィルターとも思ったのですが、納期を管理する表なので、常に全てが見えている状態がいいらしいのです。

【63386】Re:VBAを変更したい。
発言  k1231  - 09/10/30(金) 12:33 -

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

回答有難う御座います。

実行してみたのですが、エラー9、インデックスが有効範囲にありません・・・
と出てしまいました。

【63389】Re:VBAを変更したい。
発言  seg  - 09/10/30(金) 13:10 -

引用なし
パスワード
   >品名の列に名前を入力すると、自動であいうえお順に並び、
>それに伴う受注日なども一緒に付いていくようにしたいです。

Private Sub Worksheet_Change(ByVal Target As Range)
  
  On Error GoTo err:

  ' ソート
  If ((Target.Column = 5) And (Target.Row >= 6)) Then
    Range(Cells(6, 1), Cells(Range("A6").End(xlDown).Row, Range("A6").End(xlToRight).Column)).Select
    Selection.Sort Key1:=Range("E6"), Order1:=xlAscending
  End If
  
  With Target
    If .Count <> 1 Then Exit Sub
    If .Row = 1 Then Exit Sub
    If .Column <> 9 Then Exit Sub
    If .Value = "済" Then
    Application.EnableEvents = False
      n = Worksheets("Sheet2") _
        .Range("I" & Rows.Count).End(xlUp).Offset(1).Row
      .EntireRow.Copy Worksheets("Sheet2").Cells(n, 1)
      .EntireRow.Delete
    End If
  End With
  
err:
  Application.EnableEvents = True
End Sub

ざっくりとしか、元のコード見てませんが。

【63391】Re:VBAを変更したい。
お礼  k1231  - 09/10/30(金) 13:36 -

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


何度も考案して頂いて有難う御座います。
先ほど教えて頂きました

>Range(Cells(6, 1), Cells(Range("A6").End(xlDown).Row, Range("A6").End(xlToRight).Column)).Select
Selection.Sort Key1:=Range("E6"), Order1:=xlAscending

で実行できました。

並べ替えの参照が正しくありません。最優先されるキーボックスが空白でないことを確認してください。
と出てしまいました。

【63393】Re:VBAを変更したい。
発言  seg  - 09/10/30(金) 14:02 -

引用なし
パスワード
   ▼k1231 さん:
>並べ替えの参照が正しくありません。最優先されるキーボックスが空白でないことを確認してください。
>と出てしまいました。

該当Rangeにデータは入っていますか?
ステップ実行より、選択されているRangeを確認してみてください。

私の環境では動作しております。

また、空白があると並べ替え範囲が正常に取れません。
空白はありませんか?

【63394】Re:VBAを変更したい。
お礼  k1231  - 09/10/30(金) 14:06 -

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

空白が結構あります・・・。空白があると正常に取られないんですね。
空白を全て埋めて実行したら出来ました。

何から何まで有難う御座います。
本当に助かりました。

【63395】Re:VBAを変更したい。
発言  seg  - 09/10/30(金) 14:14 -

引用なし
パスワード
   ▼k1231 さん:
>空白が結構あります・・・。空白があると正常に取られないんですね。
>空白を全て埋めて実行したら出来ました。

いえ、空白があっても整列は可能です。
ただ、そちらのデータがこちらからでは見れないので
範囲が取れないだけです。

つまり、範囲が固定なり、○〜○と決まっているなら
空白があっても大丈夫です。

【63396】Re:VBAを変更したい。
発言  k1231  - 09/10/30(金) 15:56 -

引用なし
パスワード
   ▼seg さん:
空白は受注日やユーザー欄が空白になる場合があります。
それ以外にもないとは言い切れないので・・・。

ここが必ず空欄という固定がありません・・・。

【63397】Re:VBAを変更したい。
発言  seg  - 09/10/30(金) 16:38 -

引用なし
パスワード
   ▼k1231 さん:
>空白は受注日やユーザー欄が空白になる場合があります。
>それ以外にもないとは言い切れないので・・・。
>
>ここが必ず空欄という固定がありません・・・。

いえ、そうではありません。
空白がある場所が知りたいのではなく、
並び替えを行う箇所(6行より下で、1列〜○列)が
解れば、どこに空白が入っていようが問題なく
並び替えが出来るという意味です。

【63398】Re:VBAを変更したい。
発言  seg  - 09/10/30(金) 17:14 -

引用なし
パスワード
   ▼k1231 さん:
明日から連休で解決出来ないと思うので、以下のコードを
試してみてください。

>空白は受注日やユーザー欄が空白になる場合があります。
>それ以外にもないとは言い切れないので・・・。

>ここが必ず空欄という固定がありません・・・。

' ソート
If ((Target.Column = 5) And (Target.Row >= 6)) Then
  Range(Cells(6, 1), Cells(Range("A6").End(xlDown).Row, Range("A6").End(xlToRight).Column)).Select
  Selection.Sort Key1:=Range("E6"), Order1:=xlAscending
  Cells(Target.Row, Target.Column).Select
End If

↓ 下記に置き換え

' ソート
If ((Target.Column = 5) And (Target.Row >= 6)) Then
  Rows("6:" & CStr(ActiveSheet.Cells.SpecialCells(xlLastCell).Row)).Select
  Selection.Sort Key1:=Range("E6"), Order1:=xlAscending
  Cells(Target.Row, Target.Column).Select
End If

上記の機能は、Xlsが保持している最終行を取得するので
登録&消去を繰り返していると、ほんとたまにずれたりします。

【63399】Re:VBAを変更したい。
お礼  k1231  - 09/10/30(金) 17:32 -

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


わざわざ有難う御座います。連休まで考慮して頂いて・・・。

お手数をお掛けして申し訳ありません。

一度落ち着いて、教えて頂いたコードを試してみます。

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