こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

Excel VBA If文の処理について

Excel VBA If文の処理方法で質問です。
http://www.sigoto.co.jp/excel/statement/state09.htm を参考にしながら作ってます。
▲空白なら の方法は記載されていますが…
If 要素.Value = Empty Then ~

▲セルに(文字・数値に関係なく)情報があるなら… という定義をしたいのですがどうやればよろしいでしょうか?

If 要素.Value != Empty Then ~
これだとエラーが返りました。VBAは (※Else以外の方法で) 否定文の処理方法ってありますか?

*内容抜粋*
Set cell = Range("G5:I9")
If cell.Value = "" Then '…ここの定義どうやれば良いか?


End If

アドバイスよろしくお願い致します。

投稿日時 - 2005-01-30 00:27:26

QNo.1192419

困ってます

このQ&Aは役に立ちましたか?

6人が「このQ&Aが役に立った」と投票しています

回答(8)

ANo.8

#4>for each cell in ws.Range("G5:I9")
してちょ

投稿日時 - 2005-01-31 02:06:06

お礼

お礼遅れてすみません。
結局、今回の処理解決に至りませんでした…
また次の機会の時よろしくお願いします。
回答ありがとうございました。

投稿日時 - 2005-02-21 00:19:52

ANo.7

No.3とNo.4の方のご解答の通り、もう1つ各セルに対する空白チェックのループが必要です。

Dim wb As Workbook
Dim ws As Worksheet
Dim cell As Range

For Each wb In Workbooks
For Each ws In wb.Worksheets

For Each cell In Cells("G5:I9") '←※追加

If cell.Value <> "" Then
cell.Copy
Range("A24").PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
End If

Next cell '←※追加

Next ws
Next wb

ちなみに
Range("A24").Select
Selection.PasteSpecial ・・・

Range("A24").PasteSpecial ・・・
と書いて良いと思います。マクロの記録だとそう出ますけどね。

投稿日時 - 2005-01-31 00:13:20

補足

『型が一致しません』…で同じ結果でした。
同じ質問になるかも知れませんが、これは何処の事を主に指しているものなんでしょうか?

・変数宣言の事をいっているのか?
・セルのデータが不正? もしくは処理しきれない値?
Cells("G5:I9") のデータには → MAX(I41:I640) のような『関数処理』が入っているのもある → これが原因なのか?

他の原因も考えられるが、分からない事が増えてきてしまいました。整理すると、根本的なソースの見直しが必要なのか、このマクロ処理自体理論的に無理なのか知りたいです。

*処理したい内容は以下*
・全ての開いているbook対象
・全ての開いているbookのsheet対象
・そのsheetの特定のcellのデータを参照して
 → あるなら処理
 → ないなら何もしない
・"ある"場合は copy して特定のcellに データ貼り付け

再度、アドバイスよろしくお願い致します。

投稿日時 - 2005-01-31 01:04:20

ANo.6

Sub 全book_sheet対象()

Dim wb As Workbook
Dim ws As Worksheet
Set cell = Range("G5:I9")

For Each wb In Workbooks
For Each ws In wb.Worksheets
If cell.Value <> "" Then
cell.Copy

cellという変数はRangeを代入しておりますので二次元配列になっていると思います。
cell(1.1).valueのように記述すれば値が取れるんじゃないですかね。

投稿日時 - 2005-01-31 00:05:01

ANo.5

指定の範囲に空白以外のセルがあるかどうかを判断すればよいのならば・・・。
Dim cell As Range
Dim blankNum As Integer

Set cell = Range("G5:I9")
'範囲内の空白の数を取得(EXCEL関数のCOUNTBLANK)
blankNum = WorksheetFunction.CountBlank(cell)

'空白の数と範囲のセルの数が一致すればすべて空白
If blankNum = cell.Count Then
MsgBox "blank"
Else
MsgBox "not blank"
End If

セル単位で何か処理を行うならばループする方法になりますね。

投稿日時 - 2005-01-30 01:31:48

補足

みなさんのご丁寧な解説で、If文 "<>" の否定の使用方法は分かりました、ありがとうございます。が…別のところでエラーになっています…。

以下が、現在処理中のソースになります。

Sub 全book_sheet対象()

Dim wb As Workbook
Dim ws As Worksheet
Set cell = Range("G5:I9")

For Each wb In Workbooks
For Each ws In wb.Worksheets
> If cell.Value <> "" Then
cell.Copy
Range("A24").Select
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
End If
Next ws
Next wb

End Sub

>の部分で "型が一致しません"とエラーが起きています。
ここはどう処理させればよろしいのでしょうか?
再度アドバイスお願い致します。

投稿日時 - 2005-01-30 23:33:08

ANo.4

for each cell in Range("G5:I9")
if cell.value<>Empty then

end if
next

VBAでは、否定の意味で!=というのは使えません。
=の反対は<>になります。
ちなみに、
セルの内容が
=""の時
Emptyでそのセルの値を調べると、Trueになりますから、
cell.value <> Empty

cell.value <> ""
も同じ意味になると思われます。

投稿日時 - 2005-01-30 01:20:28

補足

#5さんの補足内容と同じになるので省略いたします。
http://oshiete1.goo.ne.jp/kotaeru.php3?q=1192419
> If cell.Value <> "" Then
で現在エラーになっています。
『型が一致しません…』これは 変数cellに対して、言っているエラーになるのでしょうか?
再度、アドバイスよろしくお願い致します。

投稿日時 - 2005-01-31 00:00:03

ANo.3

範囲が定義された場合は、[If cell.Value = "" Then ]と言う式では単純に比較できませんから、個々のセルをチェックする必要があります。

Sub test()

Set cell = Range("G5:I9")

For Each c In cell
If c.Value <> "" Then
hit = True
exit for
endif
Next

If hit Then MsgBox "情報あり"

End Sub

投稿日時 - 2005-01-30 00:50:57

補足

>If c.Value <> "" Then
をそのまま実行
『情報あり』とちゃんと表示される。

勝手な思い込みで処理内容を一部変更して実行してみたのですが… c は cell つまり変数名かな?って
>If cell.Value <> "" Then ' 『c』 の部分 → 『cell』にして実行
『型が一致しません…』とエラーになる。

この違いは何なんでしょうか?
『c』 という記述は簡略化…という意味合いになるのでしょうか?
再度、アドバイスよろしくお願い致します。

投稿日時 - 2005-01-30 23:53:23

ANo.2

▲セルに(文字・数値に関係なく)情報があるなら… という定義をしたいのですがどうやればよろしいでしょうか?


If Activecell.value<>”” then


ではダメなのでしょうか?

投稿日時 - 2005-01-30 00:40:17

お礼

アドバイスありがとうございます。

投稿日時 - 2005-01-30 23:36:10

ANo.1

If cell.Value <> "" Then

これでどうでしょうか?

投稿日時 - 2005-01-30 00:38:43

お礼

<> で表記すればよかったのですね。
アドバイスありがとうございます。

投稿日時 - 2005-01-30 23:35:05

あなたにオススメの質問