
こんにちは。
VBA初心者のものですが教えてください。
「sheet1のC29:U29とsheet2のC31:G31について
1より小さければ小数第2位まで表示する」
の構文を作成したいのですが、
下記の構文ではエラーが出てしまいました。
どのように訂正すればよいでしょうか?
※できればrangeプロパティを使いたいのですが、
cellsプロパティを使わなきゃできませんか?
すみませんがご教示をお願いいたします。
Sub test()
Dim myrange As Range
For Each myrange In Worksheets("sheet1").Range("C29:U29"),Worksheets("sheet2").Range("C31:G31")
If myrange.Value < 1 Then
myrange.NumberFormatLocal = "0.00"
End If
Next myrange
End Sub
No.4ベストアンサー
- 回答日時:
こんばんは。
一般的に、同種のオブジェクトを確保する場合は、Collection に格納します。ただし、c にエラー値が入っていないことが条件です。
'-------------------------------------------
Sub RngPlus()
Dim colRng As Collection
Dim rng As Range
Dim c As Range
Set colRng = New Collection
colRng.Add Worksheets("Sheet1").Range("C29:U29")
colRng.Add Worksheets("Sheet2").Range("C31:G31")
For Each rng In colRng
For Each c In rng
If c.Value < 1 Then
c.NumberFormatLocal = "0.00"
End If
Next c
Next rng
End Sub
お礼が遅くなりまして申し訳ありません。
ご回答ありがとうございました。
設定範囲のシートはもっと増える予定ですので、
ご紹介いただいた方法を今後活用したいと思います。
No.6
- 回答日時:
#4の回答者です。
回答した後に考え直してみたけれども、テクニックとしてはいくつか存在はしていても、できなければ、同じものを二つ書くか、サブルーチンにすればよいのではないでしょうか。私の#4に書いた方法などは、使う必要がないと思います。
>If myrange.Value < 1 Then
>myrange.NumberFormatLocal = "0.00"
それと、1 以下なら、書式を0.00と換えるというのは意味がないのでは?
1以下は、0.1もありますが、-1もTrue が返ります。
たとえば、小数点がある場合とかにしたら良いと思います。
'-------------------------------------------
Sub Main()
Test Worksheets("sheet1").Range("C29:U29")
Test Worksheets("sheet2").Range("C31:G31")
End Sub
Sub Test(rng)
Dim myRange As Range
For Each myRange In rng
If myRange.Value - Int(myRange.Value) <> 0 Then
myRange.NumberFormatLocal = "0.00"
End If
Next myRange
End Sub
お礼が遅くなりまして申し訳ありません。
何度もご回答ありがとうございました。
設定範囲のシートは2つだけではないので、
できれば分ける方法ではなく
手軽に増やせる方法が適していると考えています。
また、本件ではマイナス値は取り扱わない状況なので、
INT関数は考慮しなくても大丈夫です。
#4でご紹介いただいた方法を活用したいと存じます。
No.5
- 回答日時:
手っ取り早くarrayで外側にもう一つループを作る場合です。
Sub test()
Dim rng As Variant
Dim myrange As Range
For Each rng In Array(Worksheets("sheet1").Range("C29:U29"), Worksheets("sheet2").Range("C31:G31"))
For Each myrange In rng
If myrange.Value < 1 Then
myrange.NumberFormatLocal = "0.00"
End If
Next myrange
Next rng
End Sub
お礼が遅くなりまして申し訳ありません。
ご回答ありがとうございました。
設定範囲のシートはもっと増える予定ですので、
ご紹介いただいた方法を今後活用したいと思います。
No.3
- 回答日時:
>For Each myrange In Worksheets("sheet1").Range("C29:U29"),Worksheets("sheet2").Range("C31:G31")
こういう書き方は出来ません。別シートですからUnionも使えませんね。「Worksheets("sheet1").Range("C29:U29")」と「Worksheets("sheet2").Range("C31:G31")」との2回に分けるのが素直なやり方です。
実は設定範囲がもっとたくさんある、というのなら、
・Rangeを配列に格納する
・桁設定をサブルーチンにしておく
ことで、For文で回してはどうでしょう。
Sub test()
Dim rs(0 To 1) As Range, i As Integer
Set rs(0) = Worksheets("sheet1").Range("C29:U29")
Set rs(1) = Worksheets("sheet2").Range("C31:G31")
For i = 0 To UBound(rs)
ケタ設定 rs(i)
Next
End Sub
Sub ケタ設定(r As Range)
Dim c As Range
For Each c In r
If c.Value < 1 Then
c.NumberFormatLocal = "0.00"
End If
Next
End Sub
お礼が遅くなりまして申し訳ありません。
ご回答ありがとうございました。
ご指摘の通り、設定範囲はもっと増える予定ですので、
ご紹介いただいた方法を今後活用したいと思います。
No.2
- 回答日時:
同一シートなら
Sub test()
Dim myrange As Range
Set x = Union(Worksheets("sheet1").Range("A1:B2"), Worksheets("sheet1").Range("D1:E3"))
For Each myrange In x
MsgBox myrange
Next myrange
End Sub
ができる。
ーー
しかし
http://support.microsoft.com/kb/291308/ja
の15:22 つ以上の指定した範囲を選択する方法
にあるように、「Union メソッドはシートを越えて使用することはできません。」のです。
Sub test()
Dim myrange As Range
Set x = Union(Worksheets("sheet1").Range("A1:B2"), Worksheets("sheet2").Range("D1:E3"))
For Each myrange In x
MsgBox myrange
Next myrange
End Sub
はエラー。
Sub test()
Dim myrange As Range
Set x = Union(Worksheets("sheet1").Range("A1:B2"), Range(sh2range))
For Each myrange In x
MsgBox myrange
Next myrange
End Sub
もエラー。
Range(sh2range)のsh2rangeは範囲名定義。
ーーー
シートごとの範囲にFor Each Nextを使うほか無いと思う。
Unionメソッドは初心者には超えた課題かと思う。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) なぜExit Subがあるのかわかりません 4 2023/02/19 12:34
- Visual Basic(VBA) エクセルVBAのコードで質問です。 下のコードはJ16の文字列をB3を起点とする範囲から探して、見つ 5 2023/04/07 11:07
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Visual Basic(VBA) EXCELのVBAについて 2 2023/07/05 17:17
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) excel vbaでvlooupの変数がわかりません。 7 2022/05/30 09:35
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) ExcelVBAに関する質問 3 2023/02/17 10:47
- Visual Basic(VBA) VBAが止まります。 1 2022/09/02 14:51
- Visual Basic(VBA) Excel VBAの解読について質問があります。 概要は、マクロでチェックボックスにチェックすると日 1 2023/02/10 07:50
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【Excel関数】商品コードと商品...
-
エクセルで重複するセルを削除...
-
データーを横列にしたいのですが。
-
EXCELで2つの数値のうち大きい...
-
エクセルで二つの数字の小さい...
-
Excelで隣のセルと同じ内容に列...
-
エクセルで、2種類のデータを...
-
PowerPointで表の1つの列だけ...
-
エクセルでオートフィルタのボ...
-
エクセルで時刻(8:00~20:00)...
-
Excelで半角の文字を含むセルを...
-
エクセルで最初のスペースまで...
-
エクセル(勝手に太字になる)
-
Excelのオートフィルタで非表示...
-
2つのエクセルのデータを同じよ...
-
エクセルで文字が混じった数字...
-
「B列が日曜の場合」C列に/...
-
EXCELで 一桁の数値を二桁に
-
【VBA】特定列に文字が入ってい...
-
エクセルで特定の文字が入って...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルの表示形式を保ったま...
-
excelのマクロでrangeの選択が...
-
Excel VBAのComboboxのRemoveItem
-
エクセル 1つのセル毎に入力...
-
Excel VBA For Each Next構文...
-
エクセルで赤い字のセルを抽出
-
Excel2000 VBA ダブルクリック...
-
VBA重複チェック
-
Copyコマンドについて
-
EXCEL sheet1 と sheet2 を使っ...
-
EXCELのマクロで一覧表に...
-
EXCEL 行内のデータを2行に分け...
-
種類ごとに横に並んだ数字を別...
-
ISERROR関数
-
エクセルのIF関数がうまくいき...
-
#N/A表示を空白にしたいのです...
-
エクセルで別シートにある各々...
-
【Excel関数】商品コードと商品...
-
エクセルで項目抽出
-
EXCELで2つの数値のうち大きい...
おすすめ情報