Excel VBA質問箱 IV

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

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


5455 / 13646 ツリー ←次へ | 前へ→

【50677】見た目の空白セルを完全にクリアしたい 07/8/8(水) 23:40 質問[未読]
【50679】Re:見た目の空白セルを完全にクリアしたい Misa 07/8/9(木) 8:04 発言[未読]
【50682】Re:見た目の空白セルを完全にクリアしたい 07/8/9(木) 11:29 発言[未読]
【50681】Re:見た目の空白セルを完全にクリアしたい Jaka 07/8/9(木) 9:52 発言[未読]
【50683】Re:見た目の空白セルを完全にクリアしたい 07/8/9(木) 12:50 発言[未読]
【50684】Re:見た目の空白セルを完全にクリアしたい Jaka 07/8/9(木) 13:50 発言[未読]
【50686】ひとりごと Jaka 07/8/9(木) 14:32 発言[未読]
【50688】Re:ひとりごと 07/8/9(木) 15:54 お礼[未読]
【50685】Re:見た目の空白セルを完全にクリアしたい Ned 07/8/9(木) 14:01 発言[未読]
【50687】Re:見た目の空白セルを完全にクリアしたい 07/8/9(木) 15:44 お礼[未読]

【50677】見た目の空白セルを完全にクリアしたい
質問    - 07/8/8(水) 23:40 -

引用なし
パスワード
   過去、何回かお世話になっています
マクロ限定の質問ではないのですが宜しくお願いします。

HPで調べた結果をEXCELにコピペして資料として参考にしています
(主に歴史関係です)
その後に、使いやすいようにマクロを組んで操作性を上げているのですが
見た目は空白セルで、実体は何かが入っているため(白文字ではない)
セル側面のWクリックによる次ぎのデーター位置への移動や
End(Xlup)などの操作の阻害となり、解決策で行き詰ってしまいました。

【これまでの検討結果】
殆んどはスペースが入っていることが分ったので
それに関しては下記で解決で来ました。

Sub 空白削除()
Dim r As Range

For Each r In Selection
  If r.Value = " " Or r.Value = " " Then
  r.Clear
End If
Next
End Sub

それでも解決しないものがあったので改善策として下記処理をしました。
Sub 空白除去2()
Dim r As Range

For Each r In Selection
  r = Trim(r)
Next
End Sub

これで少しは解決する場合が増えたのですが、上記の方法でも
=ISBLANK(セル番地)・・・・でFalseを返す
場合があり、完全解決に至っていません。
UsedRangeで異常な範囲が設定される場合があるのと、似ているのかなとも思っていますがよく分りません。
見た目が空白のセルを、実質的にも空白にする方法があったら教えて頂きたく
質問させていただきました。
宜しくお願いします。

【50679】Re:見た目の空白セルを完全にクリアしたい
発言  Misa  - 07/8/9(木) 8:04 -

引用なし
パスワード
   ▼岳 さん:
おはようございます。
空白セルの一つの抽出は、抽出したい範囲選択をして、
F5(ジャンプ)を押し「空白セル」で選択できると思います。
マクロの記録でされると出来ます。
Selection.SpecialCells(xlCellTypeBlanks).Select
で出ると思います。
後は、
with range("X:Y")
 .SpecialCells(xlCellTypeBlanks).EntireRow.ClearContents
End With
こんな感じで出来ませんでしょうか?

【50681】Re:見た目の空白セルを完全にクリアしたい
発言  Jaka  - 07/8/9(木) 9:52 -

引用なし
パスワード
   多分これのことじゃないかと思います。

Sub aaa()
Range("A1:A10").Formula = "="""""

Range("A1:A5").Copy
Range("A1").PasteSpecial (xlPasteValues)
Application.CutCopyMode = False

Range("A6:A10").Value = Range("A6:A10").Value

For Each CL In Range("A1:A10")
  If CL.Value = "" Then
    If IsEmpty(CL.Value) Then
     CL.Offset(, 1).Value = "空白"
    Else
     CL.Offset(, 1).Value = "空白に見えるけど、実は長さ0の文字"
    End If
  End If
Next
End Sub

で、こんな風にすると空白になります。
1列づつ選択して、データ → 区切り位置 そのまま完了
でも、同じようになるけど....。

Sub bbbb()
Range("A1:A10").Value = Range("A1:A10").Value
For Each CL In Range("A1:A10")
  If CL.Value = "" Then
    If IsEmpty(CL.Value) Then
     CL.Offset(, 1).Value = "空白"
    Else
     CL.Offset(, 1).Value = "空白に見えるけど長さ0の文字"
    End If
  End If
Next
End Sub

【50682】Re:見た目の空白セルを完全にクリアしたい
発言    - 07/8/9(木) 11:29 -

引用なし
パスワード
   ▼Misa さん:
回答、ありがとうございます。
返事が遅くなり申し訳ありませんでした。

Range("A58")が異常な状態なシートでMisaさんのコードで試験して見ましたが
クリアは出来ませんでした。

>with range("X:Y")

With Range("A55:A60") に変更しただけです

上記処理後も '=ISBLANK(A58) ・・・でFalseが返っています。
F5 → 空白セル では確かにA58セルを表示しているんですが・・
Clear処理の効果は出ていません。

まずは、試験結果とお礼まで。

【50683】Re:見た目の空白セルを完全にクリアしたい
発言    - 07/8/9(木) 12:50 -

引用なし
パスワード
   ▼Jaka さん:

回答ありがとうございました。
検証に手間取っているため、返事が遅くなり申し訳ありませんでした。
途中経過を報告いたします。

Sub aaa( )  と Sub bbb( ) ともにうまくいったり、いかなかったりです。

A列に異常空白があるシートで検証していますが
うまくいった時は、B列にすべて「空白」を表示している
=ISBLANK(A70) ・・・でも TRUEを返している

うまくいかない場合は、下記の通りとなります。
異常セルの隣のB列には何も表示しない
"空白に見えるけど長さ0の文字"・・・これも表示されない
=ISBLANK(A74) ・・・で Falseを返している

データー → 区切り位置 も変化ありませんでした。
異常セルをアクティブにして、
1.カンマやタブなどの区切り文字によって・・・・
2.スペースによって右または左に・・・・・・・
の2通りやってみましたが、問題の解消に至りませんでした。

今回はスペースかなとも思い調べましたが
=IF(A74=" ","スペース",IF(A74=" ","スペース","違う"))
で、「違う」が返っています。

何せ、1回クリアされると再現することが出来ないので
別の異常個所を見つけてそこで試験しているため
時間がかかってしまいました(言い訳がましいな^^;)
返信遅れ、改めてお詫びいたします。

【50684】Re:見た目の空白セルを完全にクリアしたい
発言  Jaka  - 07/8/9(木) 13:50 -

引用なし
パスワード
   えーと、Sub aaa()の方は、現象がこんな具合じゃないですかってことで、解決策でもなんでもないです。

Sub bbb()の方は、一応の解決策なんですが、
文字の先頭に「'」がついていた場合はダメです。
区切り位置そのまま完了(設定は一切変えない)の場合は、「'123」数字の場合にしかつかえません。

「'」の有無判定の仕方
ht tp://www.vbalab.net/vbaqa/c-board.cgi?cmd=ntr;tree=145;id=FAQ

【50685】Re:見た目の空白セルを完全にクリアしたい
発言  Ned  - 07/8/9(木) 14:01 -

引用なし
パスワード
   ▼岳 さん:
こんにちは。
>HPで調べた結果をEXCELにコピペして
という事なので、
tp://park7.wakwak.com/~efc21/cgi-bin/exqalounge.cgi?print+200611/06110092.txt
参考に、

Sub sample1()
  Dim r As Range
  
  Set r = Cells.Find(What:=ChrW(160), _
            After:=ActiveCell, _
            LookIn:=xlValues, _
            LookAt:=xlPart, _
            MatchCase:=False)
  If r Is Nothing Then
    MsgBox "no data"
  Else
    r.Select
    Set r = Nothing
  End If
End Sub

これで、見た目空白なセルがHitしませんか?

もしくはセルがわかっているなら

Sub sample2()
  MsgBox AscW(Selection.Value)
End Sub

これでどうなります?

結果が出るようなら、その文字ChrW(?)をReplaceすれば良いと思います。

【50686】ひとりごと
発言  Jaka  - 07/8/9(木) 14:32 -

引用なし
パスワード
   >HPで調べた結果をEXCELにコピペして
う〜ん。
全然読んでないし....。
ダメだな、もう。
すみませんでした。

【50687】Re:見た目の空白セルを完全にクリアしたい
お礼    - 07/8/9(木) 15:44 -

引用なし
パスワード
   ▼Ned さん:
ありがとうございました。
解決しました。

最初のコードで異常セルをヒットしました。
Msgboxは 160 を表示

Replaceのマクロ記録をとり、
ActiveCell.Replace What:=ChrW(160), Replacement:="", 以下略
とした処、異常セルが完全にクリアされていました。
念のため、3箇所行ないましたが全部うまく行きました。
ありがとうございました。

初心者のため Chrw(160)が何を表すのか理解していませんが
これから調べてみようと思っています。

追伸
前回の質問【50411】でもNedさんに助けていただきました。
いつもありがとうございます。

【50688】Re:ひとりごと
お礼    - 07/8/9(木) 15:54 -

引用なし
パスワード
   ▼Jaka さん:

回答ありがとうございました。

Nedさんに教えて頂いた方法で解決しました。

>>HPで調べた結果をEXCELにコピペして
>う〜ん。
>全然読んでないし....。
>ダメだな、もう。
>すみませんでした。

とんでもないです。
教えて頂いたサイトは、これから調べようと思っています。
('123の件は、セルは空白でも数式バーには表示されるのを確認したので?と思い
Nedさんのアドバイスを先に行ないました。)

理解不足の初心者に親切に回答いただき
ありがとうございました。
今後とも宜しくお願いいたします。

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