- ベストアンサー
VBAで空の文字列をブランクに変える方法
- VBAを使用して、特定の範囲内の空の文字列をブランクに変える方法について教えてください。
- Excel上でVBAを使用して、特定のセル範囲(B1:D50)内の空の文字列をブランクに変換する方法を教えてください。
- Windows 7 x64とOffice 2007を使用しています。VBAで空の文字列をブランクに変える方法を教えてください。
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
下記を試してみてください。 With Range("B1:D50") .Value = .Value End With
その他の回答 (6)
- Wendy02
- ベストアンサー率57% (3570/6232)
>シート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
お礼
ご回答有り難うございます! 問題なく削除されました。 削除された数もちゃんとでました。 本当に、何度も何度もご教授して頂き有り難うございます!
- foolboy
- ベストアンサー率23% (34/146)
試しに書いてみました。 これで如何でしょうか。 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
お礼
早速のご返答有り難うございます! 実際に挿入したマクロです。 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)
Range.ClearContentsあたりでしょうか。 対象の各セルに対して""と同値ならClearContents、の繰り返しで良さそうに思えますが。
- foolboy
- ベストアンサー率23% (34/146)
確かに、空白文字列で返されるのはもどかしいときがありますね。 すでに任意の値が入力されているのかどうかが分かりませんが、入力されている、という前提でお話しします。 多少発想を変えて、以下のようにしてみてはいかがでしょうか。 例) If Range("B1").value="" then Range("B1").clear ※clearではなくdeleteかもしれません。 メソッド等に間違いがあるかも知れませんが、簡単に言葉にすると「空白文字列をデリートする」というだけです。
補足
ご回答有り難うございます。 B1:D50には任意の文字が記入されたセルと 空白文字列のセルが混合しております。 その中から空白文字列のセルを選択し、デリートしたいのです。 ご教授頂いた内容を任意の範囲で実行しましたところ、 実行時エラー13、型が一致しませんと表示されました。 If Range("B1:D50").Value = "" Then Range("B1:D50").Delete End If どの部分がおかしいのでしょうか?ご教授頂けると幸いです。 よろしくお願い致します。
- KURUMITO
- ベストアンサー率42% (1835/4283)
関数のIF関数を使ってあるセルを空白("")にしてもそのセルには関数が入力されている限り空白にすることはできませんね。VBAを使って空白にしようとしてもそのセルに関数が入力されている限りは無理で、その関数式を消去しない限り空白にすることはできないですね。 なぜVBAまで使って空白にすることが必要なのでしょう。 例えばCOUNTA関数では関数が入って空白のセルまで数えられてしまいますね。関数を使って文字列の入ったセルの数を求めるのにCOUNTA関数ではなく次のような式にすることで関数で空白となったセルの数を除いた数を求めることができます。参考までに。 =COUNTIF(A1:A100,"?*")
補足
ご回答有り難うございます。 シートAの内容コピーして、シートBに貼り付け際に(値のみ) シートBに空白の文字列として貼り付けされるため、 シートBの任意の範囲において空白文字列を選択しDELETE処理を行いたいのです。 説明が言葉足らずで申し訳御座いません。 どうぞお力をお貸し下さい。よろしくお願いします。
- layy
- ベストアンサー率23% (292/1222)
何も入っていないA1セルで =LEN(A1)は「0」 空白が入っているA2セルで =LEN(A2)は「1」 やりたいことはこういう判定でしょうか?。
補足
ご回答有り難うございます。 シートAの内容コピーして、シートBに貼り付け際に(値のみ) シートBに空白の文字列として貼り付けされるため、 シートBの任意の範囲において空白文字列を選択しDELETE処理を行いたいのです。 説明が言葉足らずで申し訳御座いません。 どうぞお力をお貸し下さい。よろしくお願いします。 ※選択したい範囲は空白では無く、空の文字列になります。
お礼
ご回答有り難うございます! 処理に掛かる時間が圧倒的に早くなりました! 今回はこれをご利用させて頂きたいと思います。 本当に有り難うございました。