![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67b6d)
こんにちは。
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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・「I love you」 をかっこよく翻訳してみてください
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・昔のあなたへのアドバイス
- ・かっこよく答えてください!!
- ・あなたが好きな本屋さんを教えてください
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルのIF関数がうまくいき...
-
Excel VBA For Each Next構文...
-
エクセルの表示形式を保ったま...
-
excelのマクロでrangeの選択が...
-
VBA:値をシート間で転記する方法
-
EXCELで2つの数値のうち大きい...
-
エクセルで二つの数字の小さい...
-
PowerPointで表の1つの列だけ...
-
Excelで隣のセルと同じ内容に列...
-
エクセルのオートフィルタで最...
-
エクセルでオートフィルタのボ...
-
エクセルで最初のスペースまで...
-
エクセル 文字数 多い順 並...
-
エクセルで時刻(8:00~20:00)...
-
SUMIFとCOUNTIFを合わせたよう...
-
2つのエクセルのデータを同じよ...
-
Excel関数:「0」を除いた標準...
-
Excelで半角の文字を含むセルを...
-
エクセルで、2種類のデータを...
-
エクセル(勝手に太字になる)
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
excelのマクロでrangeの選択が...
-
エクセルの表示形式を保ったま...
-
Excel VBA For Each Next構文...
-
Excel2000 VBA ダブルクリック...
-
エクセル 1つのセル毎に入力...
-
EXCELのマクロで一覧表に...
-
エクセルで別シートにある各々...
-
Excel VBAのComboboxのRemoveItem
-
Excelのデータベース活用...
-
Gメールの内容をスプレッドシ...
-
エクセルで項目抽出
-
vbaにて並べ替えしたい。
-
EXCEL(エクセル)で0.001以下...
-
EXCEL 行内のデータを2行に分け...
-
【ExcelVBA】A列に値のある行を...
-
VLOOKUPのような操作ができるマ...
-
エクセルでスケジュール管理
-
ISERROR関数
-
EXCELで2つの数値のうち大きい...
-
Excelで隣のセルと同じ内容に列...
おすすめ情報