![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_09.png?5a7ff87)
2個のセル範囲rng1,rng2について、union(rng1, rng2)を用いて1個のセル範囲にまとめようとしてます。少なくとも一方がNothihgの場合にエラーになるので、以下のようにしてます。
Sub Macro()
Dim rng1 As Range
Dim rng2 As Range
Dim rng As Range
set rng1= 'ここで入力
set rng2=
If rng1 Is Nothing Then
If rng2 Is Nothing Then
Set rng = Nothing
Else
Set rng = rng2
End If
Else
If rng2 Is Nothing Then
Set rng = rng1
Else
Set rng = Union(rng1, rng2)
End If
End If
End Sub
IF文を使って分岐させてますが、rng2の条件判断が2重になってたり、全体的に見た目ダラダラというか、もうちょっとマシな表現はないでしょうか?主観的質問ですみません。まったく別な方法でもいいです。
No.2ベストアンサー
- 回答日時:
こんにちは。
お邪魔します。条件判別の部分だけを切り抜いて、
Is Nothing 判定の扱いについてお訊ね、
という解釈で、直接的にお答えします。
何れにしても、
rng に対して何もしない(Set しない)なら、値は Nothing ですから、
そういう前提で3通りを分けるような書き方をすれば
幾らかスッキリするのではないでしょうか。
' Set rng = Nothing ' ←省略するのが普通です。
If rng1 Is Nothing Then
If Not rng2 Is Nothing Then Set rng = rng2
ElseIf rng2 Is Nothing Then
Set rng = rng1
Else
Set rng = Union(rng1, rng2)
End If
直接の回答は以上です。
もしも、Set する以前の文脈で、判別やフラグを立てておくことが可能なら、
Is Nothing 判定は(ややこしいので)使わないで済む場合が多いですよね。
そういう意味では実例がイメージし難い課題のように、私も感じていたりもします。
Excel VBA で Excel を扱う限りでは、
オブジェクトよりは文字列、文字列よりは数値、を優先する方向で、
判別できるような設計をしていくと、案外スッキリ書けちゃうことも多いのかな、と。
とりあえず、以上です。
ありがとうございます。
私も最初は「変数2個の使い分けマトリクスで判定は4種類、いかに簡単に書くか」だけと思ってましたが、Is Nothingに伴うややこしさはありますね。
No.3
- 回答日時:
set rng1= 'ここで入力
set rng2=
多分mg2もここも入力するんですよね
ならば
If rng1 Is Nothing Then
If rng2 Is Nothing Then
↑
これは在り得ないでしょ?
それとも入力しないという選択肢もあるのかな?
rng1,rng2双方が範囲選択されれいる事が前提でUnion(rng1, rng2)を実行するのであれば
If Not rng1 Is Nothing And Not rng2 Is Nothing Then '両方共選択されている場合
Set rng = Union(rng1, rng2)
End If
Exit Sub
If rng1 Is Nothing Then
Set rng = rng1
Else
Set rng = rng2 ’この時点で選択肢はこれしか残らないのでIfで判定する必要なし
End If
End Sub
こんな感じで、あまりスッキリとはしていないかな
No.1
- 回答日時:
こんばんは。
>もうちょっとマシな表現はないでしょうか
別に正しく動くなら、後のことは気にしないほうがよいです。スタイルにこだわっても、今の所は、自分はこれだけとやっていかないと、前に進まないことが往々にしてあります。
必ず、二つのセルが入らないといけない所に、
set rng1= 'ここで入力
set rng2=
マクロが、空だと判断する前に、VBA側がエラーを起こします。
マクロの意味自体がよく分からないですが、以下ならいくつもあっても同じです。
'//
Sub DoubleRanges()
Dim rng(1) As Object 'とりあえず二つ 配列は0からでデフォルト
Dim uRng As Range
Dim i As Long, c As Variant, j As Long
On Error Resume Next
Application.DisplayAlerts = False
For i = 0 To UBound(rng)
Set rng(i) = Application.InputBox("セルを選んでください(" & i + 1 & ")", "RANGE" & i + 1, Type:=8)
If Not rng(i) Is Nothing Then j = j + 1 'オブジェクトの勘定
Next i
If UBound(rng) + 1 = j Then Exit Sub '全部空ならただちに終わる
Application.DisplayAlerts = True
On Error GoTo 0
For Each c In rng
If uRng Is Nothing And Not c Is Nothing Then
Set uRng = c
ElseIf Not c Is Nothing Then
Set uRng = Union(c, uRng)
End If
Next
uRng.Select
End Sub
'//
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Excel vbaについての質問 3 2023/04/18 16:14
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Visual Basic(VBA) エクセルVBAのコードで質問です。 下のコードはJ16の文字列をB3を起点とする範囲から探して、見つ 5 2023/04/07 11:07
- Visual Basic(VBA) オブジェクトが見つかりません 1 2023/06/24 19:43
- Visual Basic(VBA) ExcelVBAに関する質問 3 2023/02/17 10:47
- Visual Basic(VBA) 【VBAエラー】Nextに対するForがありません 対策について 5 2022/11/21 21:26
- Excel(エクセル) 日付で矢印マクロ 4 2023/07/25 16:47
- Visual Basic(VBA) 形式を選択して貼り付け 以下のコードで「元」シートと「先」シートのA列に同じ値があったら指定範囲をコ 5 2022/11/11 07:30
- Excel(エクセル) 指定文字列が該当するA列をアクティブセルにするには 3 2022/08/17 13:18
- Visual Basic(VBA) VBAの繰り返し処理について教えてください。 3 2022/08/02 13:21
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
次週の登録馬(JRA)を確認でき...
-
彼氏が夜遊びで夜中に帰ってく...
-
重賞レースのグレード
-
前日発売の有無はどこで調べれ...
-
ロト6の賞金って口数で山分け...
-
競馬データに詳しい方教えてく...
-
クリフジの血
-
競馬で牝馬は桜花賞・オークス...
-
競馬の J G1って何ですか? 普...
-
過去のレース成績
-
金鯱賞の読み方
-
ボートレースは20歳からですよ...
-
3歳未勝利戦の番組はいつまであ...
-
ダービー予想は?
-
競馬はなぜ一日12レースなん...
-
ダートレース
-
競馬って一日に100万失っても屁...
-
日本ダービーの読み方は?
-
JRA 宝塚記念。CMの最後で、外...
-
G1開催日以外のメインレースの...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
次週の登録馬(JRA)を確認でき...
-
彼氏が夜遊びで夜中に帰ってく...
-
3連複全ての馬券を購入すると?
-
VBA 2個のセル範囲を1個にま...
-
前日発売の有無はどこで調べれ...
-
夜遊びをする人
-
地方競馬のランク。
-
JRA-DataLabのデータをエクセル...
-
準重賞について
-
ショウナンアデラって
-
中三女子、夜遊びについて。 今...
-
ハンデ戦の斤量の決め方(ルール...
-
格の高い順
-
一般と特別
-
日本ダービーの読み方は?
-
みなさんが思う歴代最強の競走...
-
ボートレースは20歳からですよ...
-
競馬はなぜ一日12レースなん...
-
皐月賞や朝日杯に牝馬は出れな...
-
競馬の J G1って何ですか? 普...
おすすめ情報