Excel VBA質問箱 IV

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

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


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

【31847】for ステートメントとIfについて L 05/12/1(木) 0:25 質問[未読]
【31849】Re:for ステートメントとIfについて かみちゃん 05/12/1(木) 0:33 発言[未読]
【31883】Re:for ステートメントとIfについて L 05/12/1(木) 20:28 質問[未読]
【31884】Re:for ステートメントとIfについて かみちゃん 05/12/1(木) 20:32 発言[未読]
【31892】Re:for ステートメントとIfについて L 05/12/1(木) 21:59 お礼[未読]
【31896】Re:for ステートメントとIfについて Kein 05/12/1(木) 23:02 発言[未読]
【31901】Re:for ステートメントとIfについて awu 05/12/2(金) 0:28 発言[未読]

【31847】for ステートメントとIfについて
質問  L  - 05/12/1(木) 0:25 -

引用なし
パスワード
   例えばfor の繰り返しで
A列の値を取得するとき
値が入っていない値は無視して
次のforにいこうと思うのですが、
エラーが出てしまいます。
if 判定で
If Worksheets(2).Cells(x + 2, 4) = "" Then
の時は何もしない感じで判定しているのですが
失敗します。
しかもわけわからないのはいままでこの方法で出来ていた
のに構文を書き換えていないのに
なぜか急にエラーが表示されます。どうしたらいいものでしょうか?

【31849】Re:for ステートメントとIfについて
発言  かみちゃん  - 05/12/1(木) 0:33 -

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

>If Worksheets(2).Cells(x + 2, 4) = "" Then
>の時は何もしない感じで判定しているのですが
>失敗します。

エラーメッセージとエラーの出るコードの前後含めた関連箇所とそれのどこでエラ
ーになっているかを提示していただかないと原因分析は、難しいです。

【31883】Re:for ステートメントとIfについて
質問  L  - 05/12/1(木) 20:28 -

引用なし
パスワード
   発想を変えて"#N/A"の文字の時は削除
するようにしたのですが、型が一致しません。という
エラーがでてしまいます。
これを回避して"#N/A"のセルを削除する方法はないもんでしょうか?
一応、コードを載せます。
たとえば次のようなセルを削除したいのですが
どうやったらいいのでしょうか?
213
200
#N/A
13
50
13111
#N/A
#N/A
61612
12
#N/A
3131
63333
33
585858

Sub ge()
Dim x As Long
For x = 15 To 1 Step -1
Select Case Workbooks("Book1").Worksheets(1).Cells(x, 1)
Case "#N/A"

Workbooks("Book1").Worksheets(1).Cells(x, 1).Delete
End Select
Next x
End Sub

【31884】Re:for ステートメントとIfについて
発言  かみちゃん  - 05/12/1(木) 20:32 -

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

>発想を変えて"#N/A"の文字の時は削除
>するようにしたのですが、型が一致しません。という
>エラーがでてしまいます。
>これを回避して"#N/A"のセルを削除する方法はないもんでしょうか?

どのように発想を変えたのかが、今ひとつよくわかりませんが、
#N/Aとなっているセルをオートフィルタなどで抽出して削除すればいいのではないでしょうか?
または、IsNumeric関数で数値でない場合は、削除とか・・・(#N/A以外でかつ数値以外も削除されてしまいますが)

【31892】Re:for ステートメントとIfについて
お礼  L  - 05/12/1(木) 21:59 -

引用なし
パスワード
   かみちゃんさん
ありがとうございます。解決しました♪
またなにかあったらよろしくお願いします

【31896】Re:for ステートメントとIfについて
発言  Kein  - 05/12/1(木) 23:02 -

引用なし
パスワード
   そのエラー値が、もし数式の計算結果として出ているなら、例えばA列を対象として

On Error Resume Next
Range("A:A").SpecialCells(3, 16).Delete xlShiftUp

で出来ます。手入力されたものなら、SpecialCells(2, 16) とします。
第二引数の 16 は、xlErrors と等価になります。

【31901】Re:for ステートメントとIfについて
発言  awu  - 05/12/2(金) 0:28 -

引用なし
パスワード
   > 発想を変えて"#N/A"の文字の時は削除
> するようにしたのですが、型が一致しません。という
> エラーがでてしまいます。

何故エラーになったか知ることが、今後VBAを習得する上で必要と思いますので
解決済みとは思いますが、参考まで。

> Select Case Workbooks("Book1").Worksheets(1).Cells(x, 1)
> Case "#N/A"

で、まず、Valueプロパティが省略されていますので、この場合は、
Cells(x, 1).Value として処理されます。

Valueは、値を取得しますが、セルに表示されている #N/A は、
多分 LookUp関数等を使用した計算式の結果だとすると、そのセルの値は、
"#N/A" ではありません。 あくまでも値は、エラー値です。

セルに「表示」されている内容は、Textプロパティで取得出来ます。

また、セル値タイプをTypeName関数で調べると"Error"を返します。
または、IsError関数に対しては True を返します。

なお、Select Caseを使用していますが、Caseが1つですので、If...Then
ステートメントで充分かと思います。

以上を簡潔に整理して、こんな感じで如何でしょうか。

Sub ge2()
Dim x As Long
With Workbooks("Book1").Worksheets(1)
  For x = 15 To 1 Step -1
    With .Cells(x, 1)
      If .Text = "#N/A" Then .Delete '        または
'      If TypeName(.Value) = "Error" Then .Delete '  または
'      If IsError(.Value) Then .Delete
    End With
  Next x
End With
End Sub

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