
VBA超初心者で、困っていることがあります;;
たとえば、プログラムを実行したら、セルの「A1~D3」の範囲をクリアするという物があったとして、
その他の条件が以下のようになっています。
(1)クリアしても、セル内の数式を保持
(2)クリア対象のセルの罫線は残す
私は、以下のように記述したのですが、数式は残るのですが罫線が残りませんでした。
Sheets("シート名").Range("A1:D3").ClearFormats
数式を保持し、罫線を残すようにするには、どのような記述をすれば良いのでしょうか。
以上、よろしくお願いいたします。
No.4ベストアンサー
- 回答日時:
#2です。
んー・・・日本語って難しいですねぇ。
> プログラムを実行すると、「シート2」に数値が返されます。
> 「シート1のA1~D3」には数式が書かれており、「シート2」に返された数値をもとに
> 「シート1」の対象セルに計算結果が表示されます。
なるほど、ごく単純に考えるとシート1のA1セルに
=シート2!A1
みたいな式が入っているのですね。
あるいは、VBAを使って
Sheets("シート1").Range("A1")=Sheets("シート2").Range("A1")
とでもしているのでしょうか。
どちらにしても、「式の計算結果」が入力される、と。
> 「シート1のA1~D3」には、必ず数値が表示されるとは限りません。
> 今回はA1にデータがあったけど、次はA1にデータが無い。
なるほどなるほど、ワークシート関数なら
=IF(シート2!A1<>"",シート2!A1,"") ※2
くらいでしょうか。
VBAなら
If Sheets("シート2").Range("A1")<>"" Then
略
End If
ですかね。
> 一度「シート1のA1~D3」の数値をクリアしておかないと、
> 再度実行した際に、本当はデータが無いのに、前回の数値が残ってしまい、
> 表示が残っている状態になってしまいます。
ここがわからないんですよね・・
質問文中の
> (1)クリアしても、セル内の数式を保持
を信じるなら、セルには「数式」が入っているはずです。
上記の※のようにしておけば「シート2の参照セルが空白なら空白」が戻りますから、
わざわざVBAで「クリア」する必要は全くと言って良いくらい無いですよね?
そうじゃなく、シート1に表示する計算結果はVBAで入力してるんだよ、と言うなら
シート1には「値」しか入っていないはずですから、何も考えずに
Sheets("シート名").Range("A1:D3").ClearContents
で十分に事足りるはずなんです。
プログラムを実行すると、「シート2」に数値が返されます。
なのであれば、むしろ「シート2の内容を消去する」コードを書いてやらないといけないのでは?
それこそ、
Sheets("シート2").Range("該当範囲").ClearContents
で間に合うのではないでしょうか。
A1セルに「=B1+10」という式があり、B1に「5」があれば、
A1セルに表示される返り値は「15」ですよね?
これを「A1の数式を書き換えずに、返り値を変えたい」のであれば、
B1セルを操作してやるはずですね。
で、「B1セルが空白ならA1セルも空白」としたいのであれば、
A1セルには「=IF(B1<>””,B1+5,””)」としてやりますよね?
こうしておけば「何らかの事情でB1セルが空白になった時」には
A1セルにも空白が返ってきて、見た感じ「消去された」ように出来ますよね?
VBAと言うよりは、エクセルの基本かもしれませんが、いかがでしょう?
それでも足りない!とおっしゃるのであれば、
「実際にどんなデータに、どんなコードを走らせているか」
明記した上で「再質問」してみてくださいませ。
ちなみに。
おっしゃる
> Sheets("シート名").Range("A1:D3").ClearFormats
これは「書式を消去」の意味ですので、当然「罫線を含む書式」が消えますよ。
この回答への補足
詳細にご回答いただきありがとうございました!
>なのであれば、むしろ「シート2の内容を消去する」コードを書いてやらないといけないのでは?
>それこそ、
> Sheets("シート2").Range("該当範囲").ClearContents
>で間に合うのではないでしょうか。
これ必須でした・・・。
むしろ、これを加えれば解決する気がします。
おっしゃる通り、シート2をクリアしないと、データが残ったままになります;;
シート2の対象範囲をクリアするようにしたところ、シート1の対象範囲には0が表示されました。
なんか基礎がなってないですね;;
もう勉強して、慣れてから出直して参ります><
詳しくご説明頂き、ありがとうございました^^
No.3
- 回答日時:
こんばんは!
>数式を保持し、罫線を残すようにするには・・・
すなわち数式によって表示されているデータはそのままで、
実データのみ消去する!という解釈でよい訳ですよね?
Sub Sample1()
Dim c As Range
For Each c In Range("A1:D3")
If Not c.HasFormula Then
c.ClearContents
End If
Next c
End Sub
こんな感じではどうでしょうか?m(_ _)m
この回答への補足
ご回答いただきありがとうございます!
今から試してみます><
初心者なので、若干時間かかると思いますが;;
ありがとうございました^^
No.2
- 回答日時:
すいません。
何度読み返しても理解できなかったので、補足ください。
> (1)クリアしても、セル内の「数式を保持」
> (2)クリア対象のセルの「罫線は残す」
実際問題、何を消したいのでしょうか?
数式と値は同居しないので、値ではなさそうだし・・・
もしかしたら「罫線以外の書式」でしょうか?
この回答への補足
すいません;;;
完全に日本語が足りませんでしたね><
えっと…
まずはシートが2つあると仮定します。
プログラムを実行すると、「シート2」に数値が返されます。
「シート1のA1~D3」には数式が書かれており、「シート2」に返された数値をもとに
「シート1」の対象セルに計算結果が表示されます。
しかし、「シート1のA1~D3」には、必ず数値が表示されるとは限りません。
今回はA1にデータがあったけど、次はA1にデータが無い。
という現象がありえます。
なので、一度「シート1のA1~D3」の数値をクリアしておかないと、
再度実行した際に、本当はデータが無いのに、前回の数値が残ってしまい、
表示が残っている状態になってしまいます。
これを回避するために、数式を残して値をクリアするといった事をしようと考えたのですが、
クリア時に罫線も消えてしまいました;;
他にも良い方法があるよ!というのがあれば、それも含めて教えて頂けると大変助かります><
まだVBAを初めて5日くらいの初心者なので、意味不明な事を言っていたらごめんなさい><
No.1
- 回答日時:
私の使っている方法は、下記です。
1)別のシートの「A1~D3」に基本の罫線、数式を書いておく。
2)クリアしたいとき、別シートの「A1~D3」をコピーし、クリアしたいシートの「A1~D3」に貼り付けます。
3)別シートを非表示にしておけば、気になりません。
この回答への補足
なるほど…
数式と罫線を別シートに記載しておき、数式ごとコピーして持ってくるのですね!
たしかにうまくいきそうな気がします!!!
これで解決しそうな気がしますが、今後の事も考えてプログラム側でなんとかしたいと思っていたり…。
本当に初心者なので、解決しなかった場合は、この方法で解決したいと思います!
最後の策として、大変有用な手順を教えて頂き感謝いたします。
ありがとうございました^^
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 複数シート一括作成後に、特定範囲の数式は値で貼り付けしたい 3 2022/10/07 11:18
- Visual Basic(VBA) VBA ドロップダウンリストを残して値のみクリア 2 2022/10/27 05:42
- Visual Basic(VBA) 【VBA】Excelで罫線を引きたい 3 2022/07/14 12:04
- Visual Basic(VBA) 複数csvを横に追加していくマクロについて 2 2023/04/25 09:19
- Visual Basic(VBA) 昨日、質問した件『VBA にて、条件付き書式で背景色を設定しているセルの範囲で、背景色付きのセルをカ 4 2022/04/07 14:39
- Excel(エクセル) エクセルVBAでセルに表示されているとおりの数値を取得したい(時間の計算結果) 1 2022/03/30 17:52
- Excel(エクセル) ワードのマクロについて教えてください。 1 2023/03/11 13:50
- Visual Basic(VBA) エクセルのマクロについて教えてください。 4 2023/03/02 08:40
- Visual Basic(VBA) まとめシートから集計シートへA列のコードが一致したら1行コピーするマクロをネット上で見つけました。こ 1 2022/08/30 14:11
- Excel(エクセル) エクセルで条件付き書式を使わずにセルの文字の色を変える方法を教えて下さい 8 2023/07/28 01:15
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Office2021のエクセルで米国株...
-
Excelの「0」だけ非表示、小数...
-
Excelシートの保護時にデータの...
-
エクセルで条件に一致したセル...
-
Excelで複数シートの選択セルを...
-
ExcelでTODAY関数を更新させな...
-
EXCELのハイパーリンクのセルを...
-
エクセル マクロ ボタンを押...
-
エクセルで1月0日と表示される!!
-
Excelでスクロールすると文字が...
-
別シートのセルを絶対参照にする
-
エクセルで、加筆修正したセル...
-
エクセル ハイパーリンクで画像...
-
iPhoneのExcelアプリで、別のシ...
-
複数シートの同じセル内容を1シ...
-
エクセルでセルの移動について
-
Rangeメソッドは失敗しました。...
-
エクセルで特定のセルの値を別...
-
VBAでシート全体の塗りつぶしを...
-
条件書式でリスト内以外の単語...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
iPhoneのExcelアプリで、別のシ...
-
Excelの「0」だけ非表示、小数...
-
Excelで複数シートの選択セルを...
-
Excelシートの保護時にデータの...
-
エクセルで条件に一致したセル...
-
エクセルで1月0日と表示される!!
-
日付が未入力の際はゼロか、空...
-
ExcelでTODAY関数を更新させな...
-
EXCELのハイパーリンクのセルを...
-
別シートのセルを絶対参照にする
-
Excelでスクロールすると文字が...
-
複数シートの同じセル内容を1シ...
-
マクロ 新しいシートにデータ...
-
エクセルで複写のように自動入...
-
エクセルで、加筆修正したセル...
-
エクセル ハイパーリンクで画像...
-
ハイパーリンク で『指定された...
-
エクセルで20万行あるシート...
-
エクセルで特定のセルの値を別...
-
INDIRECT(空白や()がある文字列...
おすすめ情報