質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

2回答

728閲覧

VBA :特定sheetの特定cell rangeの"-"ハイフン表示を削除したい。但し、"-"は、別シートを参照している。

gogoseven

総合スコア10

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2019/02/15 14:28

環境:エクセル2010

ワークブック内の特定シートの特定セル範囲において、
"-"ハイフン表示になっているセルをemptyにするVBAコードを確認したいです

この際、セルの表示は、"-"ですが、別シートを参照しているので、
=sheet2!E4 などになっています

よろしくお願いします

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ワークブック内の特定シートの特定セル範囲において、
"-"ハイフン表示になっているセルをemptyにするVBAコードを確認したいです

上記のような説明で、
他人(エクセル君も含む)に仕事を頼んで、
ちゃんと希望した結果を返してくれるかよく考えてみましょう。

仕事を頼むときは、
「○○の××を□□して下さい。」と頼まないとトンチンカンな結果が返ってくる可能性が大だと思います。
なので今回の質問の件では、
「どのブック(絶対一つしかブックを開いてないのであれば省略可)の
どのシートのどのセル範囲の内、「-(ハイホン)」の値を表示している
セルの数式をクリアしたい。」
と書くべきではないでしょうか。
それから、いま、表示されている値は「-」以外は全部数値でしょうか?
また、セルの書式設定で「-」を表示していて、ホントの値は別という可能性はないでしょうか?
条件によっては、エクセルの機能で仕事を処理できます。
(手動こなすか、VBAで命令文を書いて自動でやってもらうかは別の話しです。)
回答者には、あなたのパソコンが覗けないのですから、
これくらいの説明は書かないと、あなたの意図が正確に伝わらないと思いますよ。

それから、プログラムには、作業の手順を書いていって、
それをエクセル君に自動で作業してもらうことになります。
つまり、まずは日本語でその作業の手順を説明できるようになり、
その作業手順書をエクセル君が分かるVBA語に翻訳して、自動実行してもらえるようになります。

VBAコードを確認したいです

要はマクロを作ってくれってことですよね?
それを見て、傾向を把握し対策をできるということですかね?
それよりもどうやったら、結果が得られるかの手順を確立することが大事です。

今回の件の場合は(僕の解釈があっていればですが。。。。)、

0)作業始め
1)マクロを書いておくブックの「Sheet1」(説明がないので仮にSheet1とします。)の
「E10:J100」の各セルを順にみていく。
2)もし、各セルの値が「-(ハイホン)」だったら、そのセルの数式をクリア
3)次のセルを見る(1へ戻る)
4)全てのセルを見たら作業終わり

という作業手順になると思いますが、いかがでしょうか?
(こういう風に書いておけば、だれが作業しても同じ結果が得られると思いませんか?
プログラムにはこういうことを書いていきます。)

ここで、順次見て行くセル範囲の値が、「-」以外は全部「数値」ならば、
エクセルのジャンプ機能を使って、値が「文字」のセルを一括で検索し、選択してくれます。
この機能を使えるならば、
範囲内の個々のセルをいちいち確認するよう命令をしなくてもよいようになります。
(つまり、各セルを順次みていく指示の替わりに、この機能を呼び出す指示を書けばよいわけです。)

まずは、この辺の情報を整理して他人に伝えるところから始めてみてはいかがでしょうか?
時間がないので手取りばやく、必要最小限の情報を得たい気持ちはわからなくもないですが、
それではいつまでたっても、自分でマクロを書くことは難しいかなと思いますので、
いろんな方と何回かやりとりをしていきながら、VBAとかマクロの「理解」を深めていただきたいなと
思います。

投稿2019/02/16 11:38

編集2019/02/16 11:42
mattuwan

総合スコア2136

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

セルの指定方法を触れられていませんが、とりあえず選択しているセル範囲とするならばSelection

対象のセルの内容そのものを空にしたいならば、セル参照かどうかにかかわらずClearContentsで構わないでしょう。

セル参照の設定(式)はそのままに参照先を空にしたいならば、参照式(の=を除く意味で2文字目以降)をRangeの引数にしてClearContentsメソッドでしょうか。同じシートならPrecedentsでよいのですが。
ただし、この場合は、参照式が入ったセルは空欄ではなく0が表示されることになると思いますので、それは別に対応が必要になります。

というわけで、これらを使った例です。

VBA

1'選択中のセル毎にループ 2For Each tgt In Selection 3 '消去するセル値か判定 4 If tgt.Value2 = "-" Then 5 'セルが式か(式の場合はセル参照のみであるものとする) 6 If tgt.HasFormula Then 7 '参照先のセルを空にする 8 Range(Mid(tgt.Formula, 2, 255)).ClearContents 9 Else 10 'セルを空にする 11 tgt.ClearContents 12 End If 13 End If 14Next

投稿2019/02/15 17:51

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

gogoseven

2019/02/16 01:53

ご回答ありがとうござます、言葉足らずですみません。 セル範囲は、E10:J100を想定しています 参照先のセルを空にするのではなく、そのまま置いておいて、 同じシートのセルを空にしたいです(この際、ゼロではなく、ブランク表示) よろしくお願いします
退会済みユーザー

退会済みユーザー

2019/02/16 03:41

あえて修正のヒントだけコメントします。わからなかったら、どの辺が分からなかったのかをコメントしてください。 ・セルの消去方法 先の回答にも書いたように、そのセルに入力されている内容をそのものを消したいならば、式か値かにかかわらずClearContentsでOKです。 ですので、HasFormulaによる処理分けの必要はありません。 ・範囲の指定 SelectionはExcelで選択しているセル(範囲)を表しています。 今回は指定したい範囲が決まっているようなので、Rangeを使えばよいです。A1セルを指定したい場合はRange("A1")のようにします。セルの指定の仕方はExcelの式と同様です。 SelectionもRangeも指定方法が違うだけで、同種のデータを扱うものなので単純にコードの該当部分を置き換えるだけで動作します。 ・消去後の0表示 参照式は残したまま、参照先のセルを空にした場合を想定しコメントしたものです。 参照先ではなく参照元の式自体を消してしまうケースでは考慮する必要はありません。
gogoseven

2019/02/16 11:21

ヒントありがとうございます いま条件式は、セルはハイフンで、且つ式であることを指定しています。(直接入力のハイフンは除くため) 実行してみましたが、エラー13が出ましたので、On Error Resume Nextで実行できましたが、ハイフン表示ではないセル(#VALUE!や#DIV0!表示のセル)も、空欄になりました これらは無視される回避策は、ありますか? よろしくお願いします
退会済みユーザー

退会済みユーザー

2019/02/16 16:22

なるほど、セルがエラー値の場合は想定していませんでした。今回は私の想定が甘かったですね。 On Error Resume Nextを使うと、If文に使っている式がエラーの場合、否応なくThenブロックが実行されてしまいます。そして、セルの式がエラーの場合、Value2はエラー13を発生します。このため、"-"の判定が利かずに空欄になります。 対応方法は、Value2を使わずにTextを使うか、値判定の前にIsError関数などでエラーでないことを判定しておくということになるでしょう。 Textは式がエラーかどうかに関わらずセルに表示されている内容を得られます。IsError関数はセル関数と同じく、セルがエラー値かどうかを得られます。 なお、On Error Resume Nextは、安易なエラー無視目的で使われているコードを見かけますが、動作の問題をうやむやにしてしまいます。出来るだけエラーにならないコードを書き、やむなく使う場合もピンポイントにするべきものです。安易に使う人の多くは先頭に書いたりしますから…。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問