No.5ベストアンサー
- 回答日時:
こんばんは。
実際にやってみましたが、考えていたよりも遥かにむつかしいですね。
このSpecialCells のコードのレベルは、意外にも、かなり上級になってしまうかもしれません。今回は、便宜的に使います。
確かに、記録マクロで作れるレベルですが、思わぬ落とし穴が一杯あります。
私が、最初に考えていたコード(BlankToZero)
・VBAでは、本来は、なるべく、ワークシートの「名前-定義」は、あまり使わないほうがよいです。「名前-定義」がエラーでもぐりこんでしまうと、VBAでは触れられなくなってしまいます。
・SpecialCells(xlCellTypeBlanks)は、以下のような、エラートラップ必要です。
(1)
Sub BlankToZero()
Dim r As Range
'SpecialCells のブランク探しは、エラートラップが必要です
On Error Resume Next
'名前-定義でつけられたもの,オブジェクトの中にシート情報があるので、芳しくない
Set r = Range("選択範囲").SpecialCells(xlCellTypeBlanks)
On Error GoTo 0
If Not r Is Nothing Then
r.Value = 0
End If
'オブジェクトの開放
Set r = Nothing
End Sub
しかし、これでは、本当に成功はしません。それは、SpecialCells は、あくまでも、UsedRange の範囲しか受けつけてくれませんので、いくら、「名前-定義」があっても、正しく、「0」は入らない時があります。
したがって、どうやら、.SpecialCells(xlCellTypeBlanks) は、万能ではなさそうです。(うまくいく場合は、あくまでも、UsedRangeに、その範囲が入っている場合のみです)
以下のようなものからやってみてください。なるべく、ワークシートで使われるメソッドは、ミスやトラブルが多いので、実践を何度も積んでからのほうがよいです。私は、今回は、たまたま気がついただけです。
次が改良型(BlankToZeroRvs)
'標準モジュールのみ
Sub BlankToZeroRvs()
Dim c As Variant
'画面を更新させないと、処理スピードが劇的に速くなります
Application.ScreenUpdating = False
For Each c In Range("選択範囲")
If IsEmpty(c) Then
c.Value = 0
End If
Next c
Application.ScreenUpdating = True
End Sub
実際やってみました。
違いがまだわかりませんが、どちらでもうまくいきました。
もっと経験を積んで失礼にならないくらいになりたいです。
こんな骨なしに時間を無駄にしたと思われないようにがんばります。
No.6
- 回答日時:
#5 の訂正です
#今回は、便宜的に使います。
は、
・VBAでは、本来は、・・・・
の末尾につけてください。便宜的に「名前-定義」を使います。
ということでした。そのままでは、意味が通りません。
No.4
- 回答日時:
Cells("選択範囲").SpecialCells(xlcellTypeblank)
すなわち指定範囲の空白セルを
Selectしてセル群のオブジェクト(Range)を掴み、
それのValueプロパティに対して、値0を代入する。
--
xlcellTypeblank はxlcellTypeblanksのミス
--
Cells("選択範囲")はRange(選択範囲)が正しい
RangeとCellsの関係を勉強すること
ーー
例えば
Sub test01()
Range("A1:C10").Select
Selection.SpecialCells(xlCellTypeBlanks).Select
Selection.Value = 0
End Sub
ーー
以下は参考に
IFは不要ということに関連して
SpecialCells(xlcellTypeblank)を使うことにより、IF文的な選択は内部的に行われるので、VBAのスクリプト上はIF文は要りません。
この機能がVBAなどスクリプトを使えば、IF文の繰り回しを表現せずに、実質IFを多数回数繰り回ししたのと同じになります。
それでコードがすっきりします。
For Each Cl In Rande(範囲)
If Cl="" Then
・・
と言ったコードに比べれば、すっきりします。
ですから
(1)VB的コード法(他言語のプログラム経験あり、エクセルVBAの
本を余り読んでないタイプの人に多い)
(2)エクセル固有のプロパティを使うコード法
(3)もっと凝ったやり方(いつもあるとは限らないが有るかも)
もうひとつ例を挙げると、Findメソッドを使うと(2)にあたり
各セルをIF文で同じか聞いて、全行走査するのが(1)です。
エクセルの関数をVBAで使うのも(2)です。例えば平均で、合計をだし、データ数で割って出すのは(1)です。
すいません。丁寧な解説ありがとうございます。
とにかく、VBAを覚えようと思って、何でもかんでも自動化を試しています。
経験を積むことが大事かなと思って。
No.3
- 回答日時:
#1です。
If Cells("選択範囲").SpecialCells(xlcellTypeblank).Select Then
と
End If
の2行はいりません。念のため。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) データのある範囲を選択するVBAについて 2 2022/09/03 00:20
- Excel(エクセル) VBA 特定の列に入っているテキストをコピペ 2 2023/06/14 11:24
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) ExcelVBAの転記について 1 2022/03/23 20:13
- Visual Basic(VBA) エクセル VBAで複数セル選択時エラーになる問題 3 2022/10/04 02:40
- Visual Basic(VBA) Excelのマクロコードについて教えてください。 1 2022/03/27 13:25
- Excel(エクセル) 日付で矢印マクロ 4 2023/07/25 16:47
- Visual Basic(VBA) 他のシートからコピーする下記マクロで貼付け位置をWorksheets(1).Range("A3")の 8 2023/01/30 18:48
- Visual Basic(VBA) エクセルのマクロについて教えてください。 7 2023/07/04 09:18
- その他(Microsoft Office) 選択行の列範囲に二重線を引く 3 2022/06/08 12:21
このQ&Aを見た人はこんなQ&Aも見ています
-
新NISA制度は今までと何が変わる?非課税枠の拡大や投資対象の変更などを解説!
少額から投資を行う人のための非課税制度であるNISAが、2024年に改正される。おすすめの銘柄や投資額の目安について教えてもらった。
-
VBAで空白セルにのみ数値を代入する方法
Excel(エクセル)
-
エクセルの空欄に0を自動で入れるにはどうすればいいのでしょう?
その他(Microsoft Office)
-
空白を0とみなす関数
Excel(エクセル)
-
-
4
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
5
EXCEL VBA セルに既に入力されている文字に文字を追加する
Excel(エクセル)
-
6
セルの値が0はクリアするマクロ
Excel(エクセル)
-
7
エクセルのエラーメッセージ「400」って?
Visual Basic(VBA)
-
8
エクセルのマクロで、選択範囲の空白行を削除する方法
Excel(エクセル)
-
9
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
10
Eエクセルの計算方法で空欄を0とみなすやり方をお教え願います。
Excel(エクセル)
-
11
EXCEL VBAで、セルの文字列の前後に文字を入力する方法は?
その他(Microsoft Office)
-
12
メッセージボックスに表示する文字を大きくしたい
Excel(エクセル)
-
13
エクセルVBAでセルに入力したパスでブックを開く
Excel(エクセル)
-
14
数式の結果が空白の時の空白扱い
Excel(エクセル)
-
15
実行時エラー 438になった時の対処法を教えて下さい。
Visual Basic(VBA)
-
16
VBAで繰り返しコピーしながら下へ移動させる方法
Excel(エクセル)
-
17
VBA 空白行に転記する
Visual Basic(VBA)
-
18
VBAのfor...next構文で i = A to Z としたい。
PowerPoint(パワーポイント)
-
19
エクセルVBA 別シートの複数のセルの値をコピーする方法
Excel(エクセル)
-
20
エクセルでオートフィルタのボタンの位置の変更について
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
visual studio でインデントを...
-
エクセル マウスで選択した範...
-
選択範囲の空白セルに0を入れる...
-
エクセル ダブルクリック入力の...
-
フォトショ画像:背景への画像...
-
テーブルリンク エクセルの4...
-
エクセルのフィルタオプション...
-
EXCEL ボリュームゾーンごとの...
-
EXCEL2007の範囲選択で、選択し...
-
画像の背景を白にしたい。
-
Excelで「名前ボックス」につい...
-
エクセルである行以下全部を削...
-
EXCEL VBAで全選択範囲の解除
-
白飛びした(明るい)写真をiPhon...
-
言語の選択や国の選択をする時...
-
「無」と「未」の使い方
-
Androidのスマホで毎回毎回ホー...
-
VBAでファイルを開くときにファ...
-
PANTONE の 正しいCMYK値の調べ方
-
Excel VBA あるセルでENTERを押...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
visual studio でインデントを...
-
エクセル ダブルクリック入力の...
-
エクセル マウスで選択した範...
-
テーブルリンク エクセルの4...
-
選択範囲の空白セルに0を入れる...
-
EXCELで、関数を使って対象の項...
-
エクセルのマクロで選択範囲の...
-
Cell内の一部を指定する方法(Wo...
-
セル削除右(又は下)方向にシフト
-
反転する時の色を変えたいのですが
-
Wordデータの色を反転させたい
-
EXCEL VBA----離れたセル範囲の...
-
読み上げ機能について
-
EXCEL ボリュームゾーンごとの...
-
EXCEL VBAにて画像処理のアドイ...
-
エクセルのマクロを教えてくだ...
-
Dreamweaverで「選択範囲の周囲...
-
アドレスを指定して削除できる...
-
VBA 罫線を消さずに切り取り A1...
-
Wordで一括範囲指定について
おすすめ情報