プロが教える店舗&オフィスのセキュリティ対策術

変数を宣言し、以下のプロシージャ名で使いたいのですが、変数を使うことができないようです。
コードの記述法にミスがあるのかと思いますが、どなたかご教授いただけませんでしょうか?

Dim レストランA開始行 As Long
レストランA開始行 = 12
Dim レストランA終了行 As Long
レストランA終了行 = 21

Dim レストランB開始行 As Long
レストランB開始行 = 24
Dim レストランB終了行 As Long
レストランB終了行 = 43

Dim レストランC開始行 As Long
レストランC開始行 = 44
Dim レストランC終了行 As Long
レストランC終了行 = 103
<変更前>
 SUb hihyouji
Dim c As Range, myRng As Range, myArea As Range
Set myArea = Range("G14:G21,G26:G103,G107:G134")
For Each c In myArea
If c = "" Then
If myRng Is Nothing Then
Set myRng = c
Else
Set myRng = Union(myRng, c)
End If
End If
Next c
If Not myRng Is Nothing Then
myRng.EntireRow.Hidden = True
End If
End Sub

<変更後>
 SUb hihyouji
Dim c As Range, myRng As Range, myArea As Range
Set myArea = Range("G&レストランA開始行&":"&G&レストランA終了行,G&レストランB開始行&":"&G&レストランB終了行,G&レストランC開始行&":"&G&レストランC終了行,")
For Each c In myArea
If c = "" Then
If myRng Is Nothing Then
Set myRng = c
Else
Set myRng = Union(myRng, c)
End If
End If
Next c
If Not myRng Is Nothing Then
myRng.EntireRow.Hidden = True
End If
End Sub

A 回答 (3件)

>Dim レストランA開始行 As Long


>レストランA開始行 = 12
>Dim レストランA終了行 As Long
>レストランA終了行 = 21
で、
>Set myArea = Range("G&レストランA開始行&":"&G&レストランA終了行,G&レストランB開始行&":"&G&レストランB終了行,G&レストランC開始行&":"&G&レストランC終了行,")
は……
「"G&レストランA開始行&"」が「"G12"」になることを期待していますか?
もしかして。

「"G"&レストランA開始行&":G"&レストランA終了行&",G"&レストランB開始行&":G"&レストランB終了行&",G"&レストランC開始行&":G"&レストランC終了行」
の間違いじゃないですかね?
    • good
    • 0
この回答へのお礼

ありがとうございました!
目的通りに動かすことができました。
文字列と結合演算子の使い方をもっと学ばないといけないなと実感しました。
心より感謝申し上げます。

お礼日時:2018/04/18 18:58

こんにちは



どのようなエラーが出ているのか記してないので、明確に指摘はできませんが、

><変更前>
よりも上に記載の変数宣言と値の代入はどこに記していますか?
もしも、Sub外に記しているなら、Sub内に入れる必要があります。
ここで、エラーになっている可能性があります。

モジュール共通の変数として、変数宣言(Dim)を行うことは可能ですが、値の代入はできません。
もしも、定数として宣言したいのであれば、
 Private Const 変数 As Long = 123
のようなことは可能です。

>Set myArea = Range( ~~ )
Rangeの括弧内は、演算結果としてセル範囲を示す文字列になっている必要があります。
(あるいは、Range(Cells(x1,y1), Cells(x2,y2))の形式の必要がありますが、今回はこれではないでしょう)
ご提示の括弧内はセル範囲を示すどころか、演算不能なものになっていますので、そこでエラーになっていると思われます。

括弧内のみを演算させてみて、結果が思った通りになっているかを確認してみてください。
(現状のままでは演算できないので、まずは、演算できる記述にすることが必要になります)
    • good
    • 0
この回答へのお礼

なるほど、大変勉強になりました。
心より感謝申し上げます。

お礼日時:2018/04/18 19:00

こんな難しいコードを書きながら、うまくいかないとは……。

(^^;

こういう時は、コードをきれいに並べるところから始まります。
Private キーワードをつけるかはご自由に!

Const レストランA開始行 As Long = 12
Const レストランA終了行 As Long = 21
Const レストランB開始行 As Long = 4
Const レストランB終了行 As Long = 43
Const レストランC開始行 As Long = 44
Const レストランC終了行 As Long = 103

'<変更後>
Sub hihyouji()
 Dim c As Range, myRng As Range, myArea As Range
 Set myArea = Range(_
     "G" & レストランA開始行 & ":" & "G" & レストランA終了行 & "," & _
     "G" & レストランB開始行 & ":" & "G" & レストランB終了行 & "," & _
     "G" & レストランC開始行 & ":" & "G" & レストランC終了行)
 For Each c In myArea
  If c = "" Then
   If myRng Is Nothing Then
    Set myRng = c
   Else
    Set myRng = Union(myRng, c)
   End If
  End If
 Next c


でも、私なら、変数は、StA -> EnA, StB -> EnB, StC -> EnC とか省略しますね。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!