• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:if 文などで「""」を返した場合の空白文字列をブランクにしたい)

VBAで空の文字列をブランクに変える方法

このQ&Aのポイント
  • VBAを使用して、特定の範囲内の空の文字列をブランクに変える方法について教えてください。
  • Excel上でVBAを使用して、特定のセル範囲(B1:D50)内の空の文字列をブランクに変換する方法を教えてください。
  • Windows 7 x64とOffice 2007を使用しています。VBAで空の文字列をブランクに変える方法を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • xls88
  • ベストアンサー率56% (669/1189)
回答No.7

下記を試してみてください。 With Range("B1:D50") .Value = .Value End With

rose_web
質問者

お礼

ご回答有り難うございます! 処理に掛かる時間が圧倒的に早くなりました! 今回はこれをご利用させて頂きたいと思います。 本当に有り難うございました。

その他の回答 (6)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.6

>シートAの内容コピーして、シートBに貼り付け際に(値のみ) >シートBに空白の文字列として貼り付けされるため、 いわゆる「値貼り付け」で、="" というものをコピーし、別の所に貼り付けると、痕跡としては残るけれども、何も入っていないかもしれません。 もしかしたら、マクロは不要かもしれませんが、試しに使ってみてください。(標準モジュールが最適) 以下はループしていませんから、完全に削除されたか確かめるためには、同じプロシージャで、二度マクロを行う必要があります。 Sub DeleteUnVisibleString()  Dim rng As Range  Dim c As Variant  Dim iFlg As Integer  On Error Resume Next  Set rng = Range("B1:D50").SpecialCells(xlCellTypeFormulas, xlTextValues)  iFlg = 0  If rng Is Nothing Then   Set rng = Range("B1:D50").SpecialCells(xlCellTypeConstants, xlTextValues)   iFlg = 1  End If  On Error GoTo 0  Application.ScreenUpdating = False  If Not rng Is Nothing Then   For Each c In rng    If Trim(c.Value) = "" Then     c.ClearContents    End If   Next   MsgBox rng.Cells.Count & "個の" & IIf(iFlg, "空白値の", "数式の空白値の") & "セルを削除しました。", vbInformation  Else   MsgBox "空白値の文字列は見つかりません。", vbExclamation  End If  Application.ScreenUpdating = True End Sub

rose_web
質問者

お礼

ご回答有り難うございます! 問題なく削除されました。 削除された数もちゃんとでました。 本当に、何度も何度もご教授して頂き有り難うございます!

  • foolboy
  • ベストアンサー率23% (34/146)
回答No.5

試しに書いてみました。 これで如何でしょうか。 Sub test() Dim a As Integer Dim b As Integer For b = 2 To 4 For a = 1 To 50 If Cells(a, b).Value = "" Then Cells(a, b).ClearContents End If Next a Next b End Sub

rose_web
質問者

お礼

早速のご返答有り難うございます! 実際に挿入したマクロです。 Dim ma As Integer Dim mb As Integer For mb = 2 To 5 For ma = 1 To 100 If Cells(ma, mb).Value = "" Then Cells(ma, mb).ClearContents End If Next ma Next mb 処理に数秒掛かるのですね! ウェイト時間に少しビックリしましたが、問題なくクリアされております! 本当に有り難うございました! PS:もう少し軽い処理があるかもしれないので、ご回答をもう少し受付させて下さい。

  • D-Matsu
  • ベストアンサー率45% (1080/2394)
回答No.4

Range.ClearContentsあたりでしょうか。 対象の各セルに対して""と同値ならClearContents、の繰り返しで良さそうに思えますが。

  • foolboy
  • ベストアンサー率23% (34/146)
回答No.3

確かに、空白文字列で返されるのはもどかしいときがありますね。 すでに任意の値が入力されているのかどうかが分かりませんが、入力されている、という前提でお話しします。 多少発想を変えて、以下のようにしてみてはいかがでしょうか。 例) If Range("B1").value="" then Range("B1").clear ※clearではなくdeleteかもしれません。 メソッド等に間違いがあるかも知れませんが、簡単に言葉にすると「空白文字列をデリートする」というだけです。

rose_web
質問者

補足

ご回答有り難うございます。 B1:D50には任意の文字が記入されたセルと 空白文字列のセルが混合しております。 その中から空白文字列のセルを選択し、デリートしたいのです。 ご教授頂いた内容を任意の範囲で実行しましたところ、 実行時エラー13、型が一致しませんと表示されました。 If Range("B1:D50").Value = "" Then Range("B1:D50").Delete End If どの部分がおかしいのでしょうか?ご教授頂けると幸いです。 よろしくお願い致します。

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.2

関数のIF関数を使ってあるセルを空白("")にしてもそのセルには関数が入力されている限り空白にすることはできませんね。VBAを使って空白にしようとしてもそのセルに関数が入力されている限りは無理で、その関数式を消去しない限り空白にすることはできないですね。 なぜVBAまで使って空白にすることが必要なのでしょう。 例えばCOUNTA関数では関数が入って空白のセルまで数えられてしまいますね。関数を使って文字列の入ったセルの数を求めるのにCOUNTA関数ではなく次のような式にすることで関数で空白となったセルの数を除いた数を求めることができます。参考までに。 =COUNTIF(A1:A100,"?*")

rose_web
質問者

補足

ご回答有り難うございます。 シートAの内容コピーして、シートBに貼り付け際に(値のみ) シートBに空白の文字列として貼り付けされるため、 シートBの任意の範囲において空白文字列を選択しDELETE処理を行いたいのです。 説明が言葉足らずで申し訳御座いません。 どうぞお力をお貸し下さい。よろしくお願いします。

  • layy
  • ベストアンサー率23% (292/1222)
回答No.1

何も入っていないA1セルで =LEN(A1)は「0」 空白が入っているA2セルで =LEN(A2)は「1」 やりたいことはこういう判定でしょうか?。

rose_web
質問者

補足

ご回答有り難うございます。 シートAの内容コピーして、シートBに貼り付け際に(値のみ) シートBに空白の文字列として貼り付けされるため、 シートBの任意の範囲において空白文字列を選択しDELETE処理を行いたいのです。 説明が言葉足らずで申し訳御座いません。 どうぞお力をお貸し下さい。よろしくお願いします。 ※選択したい範囲は空白では無く、空の文字列になります。

関連するQ&A