
マクロでコードを書く時に
セルが空白なのか確認することがよくあります。
私はいつもセルの中の文字数を取得して判断してます。
※以下コードのように判断してます。
これでも問題ないのですが、
ワークシート関数の場合「” ”」=「空白」
という考え方があります。
そのため、みんなどうしているのか
ちょっと気になって質問してみました。
文字数をカウントする以外に、
VBAでマクロのコードを書く時にセルの「空白」を判断する
お勧めの方法があれば教えて下さい。
※シンプルな方法が希望です
Sub Macro1()
If [LenB(A1)] > 0 Then
MsgBox ("文字ある")
Else
MsgBox ("空白です")
End If
End Sub
急いでないです。
↑ 返答、お礼が遅くなるかもしれないです。
No.1ベストアンサー
- 回答日時:
いろいろ、以下に至るまでには、考えたことがあります。
シンプル自体よりも、ベストを選びたいですね。
通常は、
If Range("A1").Value ="" Then
または、
If Trim(Range("A1").Value) ="" Then
でよいと思います。「""」 は、長さ0の文字列と言いますから、Trim でないと感知しません。
複数のセルの選択で、
(Rng.)SpecialCells(xlCellTypeBlanks)
という方法もあります。(Rng は、Range型の範囲を示す変数)
空白がないと、エラーが発生してしまいます。
また、IsEmpty(Range("A1")) というのもありますが、
IsEmpty/Empty は、VBA由来ですから、少し増長です。
また、Range("A1").Value = Empty
のEmpty は、いきていませんので、="" と等価になってしまいます。
[Len("A1")] という意味は、
VBA関数を使った Len(Range("A1")) とは違い、Evaluate 関数を使って、セルの中での使われているものと等価になります。[Len("A1")]これを使うと、純粋にVBAとは違った、イレギュラーなスタイルで、そのワザは、私は使わないです。使うなら、Evaluateを使って明示的に書きます。
ご解答ありがとうございます。
ためしてみましたが、
>If Range("A1").Value ="" Then
が良かったです。
>If Trim(Range("A1").Value) ="" Then
は以下のマクロでA1に関数が入っていた時に、
関数を感知しませんでした。
おまけに
A1の関数が「=B1」の場合、
B1の値が「半角スペース」の場合、
「文字ない」という結果を返してきますし、
B1の値が「半角スペース」以外の場合は
「ある」という結果を返してきます。
Sub Macro2()
If Trim(Range("A1").Value) = "" Then
MsgBox ("文字ない")
Else
MsgBox ("ある")
End If
End Sub
以下のサイトを見たのですが、文字列の前後の空白を削除する関数なので、
If Trim(Range("A1").Value) ="" Then は使いどころがないように思います。
↓
http://officetanaka.net/excel/vba/function/Trim. …
何か意味があるのでしょうか?
もし何か意味があるのでしたら、教えて頂ければうれしいです。
ご面倒でしたらスルーでOKです。
いつも教えて頂きありがとうございます。
機会がありましたらまたお願いします。
No.3
- 回答日時:
実験:
「単独の場合=A1の中に半角スペースが1個だけ入力されている」ということで良いでしょうか?
いえ、そうではありませんでしたね。
頭では理解していても、今まで、実際には試したことがありませんでしたから、実に興味深い結果です。
'セルA1 に任意の数5でも10個でも空白文字(JISに限る・全角・半角)を入れてためしてみてください。
Sub TestBlank2()
Dim buf As String
Dim myCell As Variant
Dim cnt As Long
myCell = Range("A1").Value
Do
buf = Replace(buf, Space(1), "", , , 1) 'テキストコンペア
Loop Until InStr(1, buf, Space(1), 1) = 0
cnt = Len(myCell) - Len(buf)
MsgBox cnt & "個の空白文字(半角・全角)があります。"
'空白判定の実行
If Trim(myCell) = "" Then
MsgBox "Blank"
Else
MsgBox "Not Blank", vbExclamation
End If
End Sub
'//
このコードで、どういう反応になるかはやってみてください。
ご解答ありがとうございます
あいだがあいてしまいすいません。
>
Sub TestBlank2()
の方でわかりました。
単なる空白判定でも、
いろいろあるのですね。
勉強になりました。
>
Trim関数を使う場合てすが、それは、ネットからのコピー&ペーストで、半角・全角スペースが紛れ込んでいることがある場合に、念の為に使います
こういう使い方があるとは知らなかったので、
機会がありましたら、教えて頂いたことを思い出して、
Trim関数を使ってみたいと思います。
今回はいろいろ教えて頂きありがとうございます。
機会がありましたら、またお願いします。
No.2
- 回答日時:
こんばんは。
早速の返事ありがとうございます。
自分の書いた内容を読み直してみましたが、一部内容にミスがありました。
Trim関数を使う場合てすが、それは、ネットからのコピー&ペーストで、半角・全角スペースが紛れ込んでいることがある場合に、念の為に使います。
半角・全角の空白に対して、->「" "」\x0020 or 「" "」\u3000
>If Trim(Range("A1").Value) ="" Then
これで、みなし空白の判定は、「空白」と出ます。
目でみたのと同じ判定になるはずです。
SpecialCells(xlCellTypeBlanks) では、判定できません。
(実際は、ネットからのコピーの場合は、Unicode 空白を含めた、もう少し複雑な除去するコードが必要です。)
>文字列の前後の空白を削除する関数なので、
いいえ、単独の場合は、空白自体を削除して判定します。
おまけです。
[__は、全角または半角の空白]
また、、A____B のような空白は、両側は削除できても、中は、除去できませんので、
A____B とABの比較をする場合などは、
Sub TestBlank3()
Dim i As Long
Dim buf As String
buf = Range("A1").Value
Do
buf = Replace(buf, Space(1), "", , , 1) '1は、TextCompareMode です。
Loop Until InStr(1, buf, Space(1), 1) = 0
If buf Like "AB" Then
MsgBox "Same"
Else
MsgBox "Different"
End If
End Sub
これも、空白にまつわる、特別なワザのひとつです。
これは、見た目よりも、かなり複雑な考え方になっています。
ご解答ありがとうございます。
>文字列の前後の空白を削除する関数なので、
いいえ、単独の場合は、空白自体を削除して判定します。
↑
せっかく説明していただいたのですが、これがわからないです。
「単独の場合」というのは、どういう状況なのでしょうか?
「単独の場合=A1の中に半角スペースが1個だけ入力されている」ということで良いでしょうか?
こちらの知識不足ですいません。
ご面倒でしたらスルーでOKです。
いつも教えて頂きありがとうございます。
機会がありましたらまたお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【VBA】Excelで罫線を引きたい 3 2022/07/14 12:04
- Visual Basic(VBA) エクセルVBAについて 2 2023/01/31 16:21
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/15 15:12
- Visual Basic(VBA) ExcelVBAのマクロについて。 9 2022/05/04 14:50
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/01/06 08:39
- Excel(エクセル) B列に文字がはいったらA列に数字が入るマクロードを完成させたい 4 2023/04/21 01:58
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 2 2022/05/26 17:19
- Visual Basic(VBA) VBA 「,」・空白・カタカナ等の複数条件のマクロ 2 2023/08/23 11:57
- Visual Basic(VBA) VBA 改行コードの取り方 1 2022/03/22 14:14
- Visual Basic(VBA) 複数csvを横に追加していくマクロについて 2 2023/04/25 09:19
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
IF関数で空欄("")の時、Null...
-
エクセルでCSVを編集するとき、...
-
ピボットテーブルで空白セルの...
-
Excel > ピボットテーブル「(空...
-
エクセル 連番が途切れていると...
-
空白セル内の数式を残したまま...
-
「データ要素を線で結ぶ」がチ...
-
excel2010 空白セルにのみ貼り...
-
Excelで、入力文字の後に自動で...
-
【Excel】 csvの作成時、空白セ...
-
【Excel】 Ctrl+方向キー で空...
-
Excel:関数が入っているセルに...
-
VBAで空白セルにのみ数値を代入...
-
エクセルのグラフで式や文字列...
-
《Excel2000》SUMPRODUCT関数で...
-
数式による空白を無視して最終...
-
エクセルで、「複数のセルの中...
-
空白セルにハイフンを表示
-
関数を使って参照した際、空白...
-
エクセルのIF関数で、隣のセル...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
IF関数で空欄("")の時、Null...
-
エクセルでCSVを編集するとき、...
-
Excel > ピボットテーブル「(空...
-
Excelで、入力文字の後に自動で...
-
Excel:関数が入っているセルに...
-
「データ要素を線で結ぶ」がチ...
-
数式による空白を無視して最終...
-
エクセル 連番が途切れていると...
-
エクセルのIF関数で、隣のセル...
-
excel2010 空白セルにのみ貼り...
-
ピボットテーブルで空白セルの...
-
空白セル内の数式を残したまま...
-
関数TRANSPOSEで空白セルを0に...
-
形式貼り付けの「空白を無視す...
-
【Excel】 csvの作成時、空白セ...
-
色つき行の一括削除は?
-
エクセルで、「複数のセルの中...
-
【Excel】 Ctrl+方向キー で空...
-
エクセルで上の行の値を自動的...
-
エクセルのグラフで式や文字列...
おすすめ情報