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

現在、下記のようなコードを書いています。データテーブルの縦と横の検索値を探してその列数と行数を返したいのですが、下記の Sub検索1 と Sub検索2 を1つのSubで実行させるにはどうしたらよいのでしょうか?よろしくお願い致します。

-----------------------------------------
Sub 検索1()
Worksheets("Data").Activate
Dim x As Integer
For x = 3 To 22
If Cells(2, x).Value >= 12 Then
MsgBox x
Exit Sub
End If
Next
MsgBox "見つかりません"
End Sub
---------------------------------------------
Sub 検索2()
Worksheets("Data").Activate
Dim i As Integer
For i = 4 To 42
If Cells(i, 2).Value = "A" Then
MsgBox i
Exit Sub
End If
Next
MsgBox "見つかりません"
End Sub

A 回答 (5件)

Worksheets("Data").Activate


Dim x As Integer
Dim y as Integer

For x = 3 To 22
 If Cells(2, x).Value >= 12 Then
 MsgBox x
 For y = 4 To 42
  If Cells(y, 2).Value = "A" Then
   MsgBox y
   Exit Sub
  End If
 Next
 End If
Next
MsgBox "見つかりません"
End Sub

これだと、縦位置2の行で、まず横方向で12を探し見つかったら、その位置をメッセージ表示します。
で、横位置2の列を、縦方向に検索し見つかったら、メッセージ表示をし、関数を抜けます。見つからなければ”見つかりません”のメッセージを表示します。
こんな所で如何でしょう?
    • good
    • 0
この回答へのお礼

PAPA0472さん!ありがとうございます。
OKです。とりあえずうまくいきましたので、あとで構文の内容を勉強してみます。助かりました。

お礼日時:2003/12/23 18:21

>Sub Test()で2つのSubを実行させるということですね・・・



その通りなのですが、私のコードの目的は、Sub検索1 と Sub検索2 で、xとiにセットした数値を使って、Sub Test()で他の処理をできる(今はMsgBox ("x= " & x)
MsgBox ("i= " & i) が書いてある)ということを示したかったのです。
    • good
    • 0
この回答へのお礼

ki-aaaさん!ありがとうございます。
私の勉強不足のようですね・・・勉強になりました。

お礼日時:2003/12/23 18:23

あっは(^^;


コーディング間違ってましたね。ごめんなさい。
Worksheets("Data").Activate
Dim x As Integer
Dim y as Integer
For y = 4 To 42
For x = 3 To 22
If Cells(y, x).Value >= 12 Then
MsgBox x
Exit Sub
End If
If Cells(y, x).Value = "A" Then
MsgBox y
Exit Sub
End If
Next
Next
MsgBox "見つかりません"
End Sub
で大丈夫です。

この回答への補足

PAPA0427さん!回答有難うございます。
ただ、すまみせん。私の説明が悪かったようです。実はデータテーブルの横に対応する検索値Aと縦の項目に対応する検索値Bがありまして(._.;) 最初に書いておくべきでしたね。

まずSub検索1は、データテーブルのC2からV2までの横の項目と検索値A(ここでは"12"です)を照合させてます。その結果、その列数をとってきてます。
次にSub検索2で、データテーブルのB4からB42までの縦の項目と検索値B(ここでは"A"です)を照合させています。その結果、その行数をとってきてます。

まだ書いていないのですが、この後、Sub検索1とSub検索2で得た行と列のセルの値をもってこようと考えています。
度々申し訳ございません。宜しくお願い致します。

補足日時:2003/12/23 17:48
    • good
    • 0

>Sub検索1 と Sub検索2 を1つのSubで実行させるには


ここの所が良くわからないのですが、こうしたらどうでしょうか。

Option Explicit
Dim x As Integer
Dim i As Integer

Sub test()
Call 検索1
Call 検索2
MsgBox ("x= " & x)
MsgBox ("i= " & i)
End Sub

Sub 検索1()
Worksheets("Sheet1").Activate
For x = 3 To 22
If Cells(2, x).Value >= 12 Then
Exit Sub
End If
Next
MsgBox "見つかりません"
End Sub

Sub 検索2()
Worksheets("Sheet1").Activate
For i = 4 To 42
If Cells(i, 2).Value = "A" Then
Exit Sub
End If
Next
MsgBox "見つかりません"
End Sub

この回答への補足

ki-aaaさん!早速ありがとうございます。
説明不足ですみませんでした。
Sub Test()で2つのSubを実行させるということですね・・・これでも構いませんが、試してみたら、見つからなかった場合、MsgBox"見つかりません"の後に最終行又は列の次の値を返してきます。なぜでしょう?

補足日時:2003/12/23 17:25
    • good
    • 0

両方まとめれば出来ますよ。


Worksheets("Data").Activate
Dim x As Integer
Dim y as Integer
For y = 4 To 42
For x = 3 To 22
If Cells(y, x).Value >= 12 Then
MsgBox x
Exit Sub
End If
If Cells(i, 2).Value = "A" Then
MsgBox i
Exit Sub
End If
Next
Next
MsgBox "見つかりません"
End Sub

もしくは、
Sub 検索
If 検索1 = False then
if 検索2 = False then
Exit Sub
End If
End If

End Sub

Function 検索1() As Blooean
検索1 = False
Worksheets("Data").Activate
Dim x As Integer
For x = 3 To 22
If Cells(2, x).Value >= 12 Then
MsgBox x
検索1 = True
Exit Function
End If
Next
MsgBox "見つかりません"
End Function
---------------------------------------------
Function 検索2() As Blooean
検索2 = False
Worksheets("Data").Activate
Dim i As Integer
For i = 4 To 42
If Cells(i, 2).Value = "A" Then
MsgBox i
検索2 = True
Exit Function
End If
Next
MsgBox "見つかりません"
End Function
でしょうかね。

この回答への補足

PAPA0427さん!さっそくありがとうございます。
すみません!エラーになりました。
デバックしたら「If Cells(i, 2).Value = "A" Then」にマーカーがついて、アプリケーション定義またはオブジェクト定義のエラーになります。
よろしくお願いします。

補足日時:2003/12/23 17:16
    • good
    • 0

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