アプリ版:「スタンプのみでお礼する」機能のリリースについて

エクセル2013でアドインを作成しようとしています。

右クリックに選択範囲のセルの値のみ(数式は除いて)削除するメニューを追加しようとしています。

おおむねうまくいっているのですが、選択範囲のセルが一つだけだった場合、選択していないセルに入っている値も削除されてしまします。

どうすれば選択したセルが一つのみの場合も選択しているセルの値のみ削除されるようにすることができるでしょうか?

該当部分のコードを上げます。

Selection.SpecialCells(xlCellTypeConstants).ClearContents

Selectionの数を出力してみると、一つのセルしか選択していない場合はきちんとひとつになっていますが、Selection.SpecialCells(xlCellTypeConstants)の数をカウントすると選択していないセルもカウントしています。

よろしくお願いします。

A 回答 (3件)

No.1です。


質問文の最初の部分(数式を除いて)を見落としていました。申し訳ありません。
複数の場合と単独セルの場合で分けないと出来ないようです。

If Selection.Count > 1 Then
Selection.Cells.SpecialCells(xlCellTypeConstants).ClearContents
Else
If Not ActiveCell.HasFormula Then
Selection.ClearContents
End If
End If
    • good
    • 0

こんにちは。



Excel2010で試してみました。(2013は手元に無いので)

ご質問と同じ現象が発生しますね。
もとのselectionとのintersectをとれば良さそうに思って試してみたところ、ご質問の事象に対しては対処できるようです。
しかしながら、さすがにMSさん、一筋縄ではいきません。

定数ではないセル(式などのセル)だけを選択した場合に、
 Selection.SpecialCells(xlCellTypeConstants)
は、セル一つだけの選択だと問題ありませんが、複数セルを選択するとエラーになるようです。
(2013でもエラーが発生するかどうかは不明ですが・・・)


というわけで、両方対処してみました。
(後者は、面倒なのでエラー処理にしています。)

Dim rng As Range

On Error Resume Next
 Set rng = Selection.SpecialCells(xlCellTypeConstants)
 If Err.Number = 1004 Then Exit Sub
  '処理対象がないので、とりあえず中断にしてあります
On Error GoTo 0

Set rng = Application.Intersect(Selection, rng)
If Not (rng Is Nothing) Then
 'rng.ClearContentsなど、ここで必要な処理を行う
End If
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
返事が遅くなり申し訳ございません。

とりあえず、選択中のセルをカウントして処理を振り分けることで乗り越えてみました。

教えていただい例も試してみたいと思います。

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

お礼日時:2016/03/27 20:16

Selection.ClearContents


だけでいいのではないでしょうか。
    • good
    • 0
この回答へのお礼

回答有難うございます。
回答いただいた方法では、数式も消えてしまうのではないでしょうか?

お礼日時:2016/03/27 20:16

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!