Excel VBA質問箱 IV

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

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


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

【47181】オートフィルタ抽出後の値の修正 Luna 07/3/3(土) 18:31 質問[未読]
【47182】Re:オートフィルタ抽出後の値の修正 ichinose 07/3/3(土) 19:17 発言[未読]
【47193】Re:オートフィルタ抽出後の値の修正 Luna 07/3/4(日) 16:33 質問[未読]
【47194】Re:オートフィルタ抽出後の値の修正 かみちゃん 07/3/4(日) 16:46 発言[未読]
【47195】Re:オートフィルタ抽出後の値の修正 Luna 07/3/4(日) 17:13 質問[未読]
【47197】Re:オートフィルタ抽出後の値の修正 ichinose 07/3/4(日) 17:26 発言[未読]
【47183】Re:オートフィルタ抽出後の値の修正 Kein 07/3/4(日) 0:03 発言[未読]

【47181】オートフィルタ抽出後の値の修正
質問  Luna  - 07/3/3(土) 18:31 -

引用なし
パスワード
   よろしくお願いいたします。
オートフィルタで抽出をかけた後のセルの値の修正方法を教えてください。
目的は「[D列]の[2]と等しくないデータを[2]に変更したい」です。

  A |  B |  C |  D  |
1 AAA | 111 | ABC |  2  |
2 BBB | 222 | DEF |  2  |
3 CCC | 333 | GHI |  2  |
4 DDD | 444 | JKL |  1  |
5 EEE | 555 | MNO |  1  |
6 FFF | 666 | PQR |  3  |

上記のようなデータがあるとして、(データ行数は都度変わります。)

MSのhelpをみて可視セルのFor〜Next分を参考に下記のコードを記述しました。
が、うまくいかないです。
結果としては空白のセルにも[2]が入力されてしまいます。(Rangeで対象を絞るとうまく行きます。)
空白セルになったらFor〜Next分をExitするという記述もわかりません。
どなたかわかる方教えてください。よろしくお願いいたします。

Sub test()

Dim a As Variant

Worksheets("Sheet1").Range("A1").AutoFilter field:=4, Criteria1:="<>2", Operator:=xlAnd

For Each a In Worksheets("Sheet1").Columns(4)
  a.Value = 2
Next

Worksheets("Sheet1").Range("A1").AutoFilter

End Sub
     

【47182】Re:オートフィルタ抽出後の値の修正
発言  ichinose  - 07/3/3(土) 19:17 -

引用なし
パスワード
   こんばんは。

>オートフィルタで抽出をかけた後のセルの値の修正方法を教えてください。
>目的は「[D列]の[2]と等しくないデータを[2]に変更したい」です。
>
>   A |  B |  C |  D  |
1 項目1| 項目2 | 項目3 | 項目4 |
2 AAA | 111 | ABC |  2  |
3 BBB | 222 | DEF |  2  |
4 CCC | 333 | GHI |  2  |
5 DDD | 444 | JKL |  1  |
6 EEE | 555 | MNO |  1  |
7 FFF | 666 | PQR |  3  |

これ、実際には上記のように1行目は見出し(項目名)になっているのですよね?

そうだとして・・・・。


>
>Sub test()
  Dim a As Variant
  Worksheets("Sheet1").Range("A1").AutoFilter field:=4, Criteria1:="<>2", Operator:=xlAnd
  For Each a In Worksheets("Sheet1").AutoFilter.Range.Columns(4).SpecialCells(xlCellTypeVisible)
    If a.Row > 1 Then a.Value = 2
    Next
  Worksheets("Sheet1").Range("A1").AutoFilter
>End Sub

こんなコードで可能だと思いますが、


これ、入力範囲のD列を全部2にするだけなら、

Sub testtest()
  With Worksheets("sheet1").Range("a2", .Cells(.Rows.Count, "a").End(xlUp)).Offset(, 3)
    If .Row > 1 Then
     .Value = 2
     End If
    End With
End Sub
これでも良さそうですけどね!!

【47183】Re:オートフィルタ抽出後の値の修正
発言  Kein  - 07/3/4(日) 0:03 -

引用なし
パスワード
   これはあくまで、オートフィルターをかけたときの処理を前提に
しているのでしょーか ? つまり練習ですか ? 結果だけを考えると

Range("D2", Range("D65536").End(xlUp)).Value = 2

たったこれだけのことなんですが・・。

【47193】Re:オートフィルタ抽出後の値の修正
質問  Luna  - 07/3/4(日) 16:33 -

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

回答ありがとうございます。
下記のコードサンプルを行ってみたところ、サンプル1の方はうまく行きました。
サンプル2の方は
With Worksheets("sheet1").Range("a2", .Cells(.Rows.Count, "a").End(xlUp)).Offset(, 3)
で、エラーが出てうまく行きませんでした。
このコード事態が私にはわからないので、よかったら解説していただけると
助かります。
よろしくお願いいたします。

>こんばんは。
>
>>オートフィルタで抽出をかけた後のセルの値の修正方法を教えてください。
>>目的は「[D列]の[2]と等しくないデータを[2]に変更したい」です。
>>
>>   A |  B |  C |  D  |
> 1 項目1| 項目2 | 項目3 | 項目4 |
> 2 AAA | 111 | ABC |  2  |
> 3 BBB | 222 | DEF |  2  |
> 4 CCC | 333 | GHI |  2  |
> 5 DDD | 444 | JKL |  1  |
> 6 EEE | 555 | MNO |  1  |
> 7 FFF | 666 | PQR |  3  |
>
>これ、実際には上記のように1行目は見出し(項目名)になっているのですよね?
>
>そうだとして・・・・。
>
>
>>
>>Sub test()
>  Dim a As Variant
>  Worksheets("Sheet1").Range("A1").AutoFilter field:=4, Criteria1:="<>2", Operator:=xlAnd
>  For Each a In Worksheets("Sheet1").AutoFilter.Range.Columns(4).SpecialCells(xlCellTypeVisible)
>    If a.Row > 1 Then a.Value = 2
>    Next
>  Worksheets("Sheet1").Range("A1").AutoFilter
>>End Sub
>
>こんなコードで可能だと思いますが、
>
>
>これ、入力範囲のD列を全部2にするだけなら、
>
>Sub testtest()
>  With Worksheets("sheet1").Range("a2", .Cells(.Rows.Count, "a").End(xlUp)).Offset(, 3)
>    If .Row > 1 Then
>     .Value = 2
>     End If
>    End With
>End Sub
>これでも良さそうですけどね!!

【47194】Re:オートフィルタ抽出後の値の修正
発言  かみちゃん  - 07/3/4(日) 16:46 -

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

横から失礼します。

>サンプル2の方は
>With Worksheets("sheet1").Range("a2", .Cells(.Rows.Count, "a").End(xlUp)).Offset(, 3)
>で、エラーが出てうまく行きませんでした。
>このコード事態が私にはわからないので、よかったら解説していただけると

その前に、どこのコードでどのようなエラーになったのか、説明できませんか?
エラーメッセージとエラーになっている箇所くらいはわかるかと思いますが・・・

ちなみにichinoseさんご提示のコードは、以下のような感じにする必要が
あるかと思います。
今回のエラーの原因は、Withの使い方です。

Sub testtest_2()
' With Worksheets("sheet1").Range("a2", .Cells(.Rows.Count, "a").End(xlUp)).Offset(, 3)
 With Worksheets("Sheet1")
  With .Range("A2", .Cells(.Rows.Count, "A").End(xlUp)).Offset(, 3)
   If .Row > 1 Then
    .Value = 2
   End If
  End With
 End With
End Sub

なお、投稿時の引用はスレッド形式になっているので、必要最小限のものだけで
構いません。

【47195】Re:オートフィルタ抽出後の値の修正
質問  Luna  - 07/3/4(日) 17:13 -

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

回答ありがとうございます。
エラーは
「.Range("a2", .Cells」の「.Cells」の部分で発生しました。
エラー内容は「コンパイルエラー 参照が不明または不完全です。」でした。

あと、みかちゃんさんのサンプルコードありがとうございます。
実行してみました。エラーはでなかったのですが、値が2に変更されませんでした。
よろしくお願いいたします。

>Sub testtest_2()
>' With Worksheets("sheet1").Range("a2", .Cells(.Rows.Count, "a").End(xlUp)).Offset(, 3)
> With Worksheets("Sheet1")
>  With .Range("A2", .Cells(.Rows.Count, "A").End(xlUp)).Offset(, 3)
>   If .Row > 1 Then
>    .Value = 2
>   End If
>  End With
> End With
>End Sub
>
>なお、投稿時の引用はスレッド形式になっているので、必要最小限のものだけで
>構いません。

【47197】Re:オートフィルタ抽出後の値の修正
発言  ichinose  - 07/3/4(日) 17:26 -

引用なし
パスワード
   こんばんは。

>
>>サンプル2の方は
>>With Worksheets("sheet1").Range("a2", .Cells(.Rows.Count, "a").End(xlUp)).Offset(, 3)
>>で、エラーが出てうまく行きませんでした。
>>このコード事態が私にはわからないので、よかったら解説していただけると
>
>その前に、どこのコードでどのようなエラーになったのか、説明できませんか?
>エラーメッセージとエラーになっている箇所くらいはわかるかと思いますが・・・
>
>ちなみにichinoseさんご提示のコードは、以下のような感じにする必要が
>あるかと思います。
>今回のエラーの原因は、Withの使い方です。
あらっ、本当だ!!
ご指摘ありがとうございます。
ぼけてるなあ・・・。

>
>Sub testtest_2()
>' With Worksheets("sheet1").Range("a2", .Cells(.Rows.Count, "a").End(xlUp)).Offset(, 3)
> With Worksheets("Sheet1")
>  With .Range("A2", .Cells(.Rows.Count, "A").End(xlUp)).Offset(, 3)
>   If .Row > 1 Then
>    .Value = 2
>   End If
>  End With
> End With
>End Sub
>
後は、よろしくお願いします。

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