アプリ版:「スタンプのみでお礼する」機能のリリースについて

以下の様な表があります。

  A列      B列      C列       D列
1   -  [2016/01/01] [2016/02/01] [2016/03/01]・・・
2 [ID_001]   あ       あ       あ
3 [ID_002]   あ       あ       あ
4 [ID_003]   あ       あ       あ
 ・
 ・
 シート内の空いているところにIDと月日を入力するスペースを作り、
それぞれ[ID_002] [2016/03/01]と入力するとD3が選択されるようにするにはどのようにすればよいでしょうか?
VBAでも関数の組み合わせでも良いので、ご教授いただけますでしょうか。
宜しくお願い致します。

質問者からの補足コメント

  • GooUserラック さん
    はい、きれいに並んでいます。

    No.1の回答に寄せられた補足コメントです。 補足日時:2016/05/31 13:55
  • GooUserラックさま
    解説をしていただき、ありがとうございます。
    自分でやってみたのですが、最終列や最終行をどこに記述すればよいのかわかりませんでした。
    お手数ですが、IDの入っているセルはA10からA142、日付の入っているセルはG9からX9の範囲で表がある場合の、記述の仕方を教えていただけますでしょうか。

    「エクセルで条件に合ったセルを選択する方法」の補足画像2
      補足日時:2016/06/02 13:24

A 回答 (9件)

「For …」などを直せば可能です。

レイアウトを示していただければ変更可能です。

ご自分でトライするときのヒントをいくつか
・「Cells(Rows.Count, 1).End(xlUp).Row」は、A列の最後の行番号になります。
・「Cells(1, Columns.Count).End(xlToLeft).Column」は、1行目の最後の列番号になります。


たとえば、検索対象のデータが C列と 2行目にあった場合は以下のコードになります。(レイアウトは下図)
----------------------------------------------------------------
Sub 検索()

Dim 行データ As String
Dim 列データ As String
Dim 行番号 As Long
Dim 列番号 As Long

行データ = InputBox("行データを入力して下さい")
For 行番号 = 3 To Cells(Rows.Count, 3).End(xlUp).Row
If Cells(行番号, 3).Value = 行データ Then Exit For
Next
If Cells(行番号, 3).Value <> 行データ Then
MsgBox ("行データが見つかりませんでした。")
Exit Sub
End If
列データ = InputBox("列データを入力して下さい")
For 列番号 = 4 To Cells(2, Columns.Count).End(xlToLeft).Column
If Cells(2, 列番号).Value = CDate(列データ) Then Exit For
Next
If Cells(2, 列番号).Value <> CDate(列データ) Then
MsgBox ("列データが見つかりませんでした。")
Exit Sub
End If
Cells(行番号, 列番号).Select

End Sub
----------------------------------------------------------------
「エクセルで条件に合ったセルを選択する方法」の回答画像8
    • good
    • 0
この回答へのお礼

GooUserラックさ
●補足にも同じ内容を書き込みました●
解説をしていただき、ありがとうございます。
自分でやってみたのですが、最終列や最終行をどこに記述すればよいのかわかりませんでした。
お手数ですが、IDの入っているセルはA10からA142、日付の入っているセルはG9からX9の範囲で表がある場合の、記述の仕方を教えていただけますでしょうか。

お礼日時:2016/06/02 13:26

Sub 検索()



Dim 行データ As String
Dim 列データ As String
Dim 行番号 As Long
Dim 列番号 As Long

行データ = InputBox("行データを入力して下さい")
For 行番号 = 10 To 142
If Cells(行番号, 1).Value = 行データ Then Exit For
Next
If Cells(行番号, 1).Value <> 行データ Then
MsgBox ("行データが見つかりませんでした。")
Exit Sub
End If
列データ = InputBox("列データを入力して下さい")
For 列番号 = 7 To 24
If Cells(9, 列番号).Value = CDate(列データ) Then Exit For
Next
If Cells(9, 列番号).Value <> CDate(列データ) Then
MsgBox ("列データが見つかりませんでした。")
Exit Sub
End If
Cells(行番号, 列番号).Select

End Sub
    • good
    • 0
この回答へのお礼

For のところを直すのですね!!!
完璧に動きました!
やりたいことができるようになり、また、勉強になりました。
感謝しております。
このたびは本当にありがとうございました!!!

お礼日時:2016/06/02 14:03

B6にID ,B7に日付を入力して 選択値をB3に出力した場合の例です。


INDEX関数とMATCH関数の組み合わせた式は
添付図の最下行の式を試してください。
なお入出力セルが上記と異なれば、式中のB6とB7を修正する必要があります。
「エクセルで条件に合ったセルを選択する方法」の回答画像7
    • good
    • 0
この回答へのお礼

shorunさま
ご丁寧に画像の添付も頂き、ありがとうございます。
ただ、今回やりたかったことは選択値を別のセルに表示させるのではなく、
添付して頂いた画像の、D3セルを選択する(そのあと削除するため)必要がありました。
教えていただいた方法は、今後別の機会に役立てようと思います。
どうもありがとうございました。

お礼日時:2016/06/02 11:05

こちらの方が使いやすいかも


--------------------------------------------------------------------
Sub 検索()

Dim 行データ As String
Dim 列データ As String
Dim 行番号 As Long
Dim 列番号 As Long

行データ = InputBox("行データを入力して下さい")
For 行番号 = 2 To Cells(Rows.Count, 1).End(xlUp).Row
If Cells(行番号, 1).Value = 行データ Then Exit For
Next
If Cells(行番号, 1).Value <> 行データ Then
MsgBox ("行データが見つかりませんでした。")
Exit Sub
End If
列データ = InputBox("列データを入力して下さい")
For 列番号 = 2 To Cells(1, Columns.Count).End(xlToLeft).Column
If Cells(1, 列番号).Value = CDate(列データ) Then Exit For
Next
If Cells(1, 列番号).Value <> CDate(列データ) Then
MsgBox ("列データが見つかりませんでした。")
Exit Sub
End If
Cells(行番号, 列番号).Select

End Sub
--------------------------------------------------------------------
    • good
    • 0

・検索時に入力した値と、セルを選択した時の数式バーの値は同じでしょうか?


・「Cells(1, 列番号).Value」を「Cells(1, 列番号).Text」にしてもダメでしょうか?(セルには日付だけが入っているんですよね。日付を検索するときは「#2016/03/01#」入力しないと一致しなくなるので「Text」にした方が良いと思います)
    • good
    • 0
この回答へのお礼

ありがとうございます!ValueをTextにしたところ、無事に動きました!
ところで、この検索を範囲を指定して行うことはできますか?
表の上の部分に見出しなどがあり、それがあると列データが見つからなくなってしまいます。

お礼日時:2016/06/01 17:29

実は気になっていたのですが「[」と「]」半角と全角です。

セルのデータと同じでしょうか?
何でしたら、全角にした状態で比較するようにしましょうか?
    • good
    • 0
この回答へのお礼

もうしわけございません、[]の部分はセルの枠を表現するために入れたもので、実際は数字と英語のIDのみ入っています。

お礼日時:2016/06/01 16:11

検索値を入れるセルを使わず「InputBox」を使った物にしました。


マクロで「検索」を実行すると、行データ([ID_002])と、列データ([2016/03/01])を入力する「InputBox」が出ますので、それぞれ入力してください。
------------------------------------------------------
Sub 検索()

Dim 行データ As String
Dim 列データ As String
Dim 行番号 As Long
Dim 列番号 As Long

行データ = InputBox("行データを入力して下さい")
For 行番号 = 2 To Cells(Rows.Count, 1).End(xlUp).Row
If Cells(行番号, 1).Value = 行データ Then Exit For
Next
If Cells(行番号, 1).Value <> 行データ Then
MsgBox ("行データが見つかりませんでした。")
Exit Sub
End If
列データ = InputBox("列データを入力して下さい")
For 列番号 = 2 To Cells(1, Columns.Count).End(xlToLeft).Column
If Cells(1, 列番号).Value = 列データ Then Exit For
Next
If Cells(1, 列番号).Value <> 列データ Then
MsgBox ("列データが見つかりませんでした。")
Exit Sub
End If
Cells(行番号, 列番号).Select

End Sub
------------------------------------------------------
    • good
    • 0
この回答へのお礼

GooUserラックさま
ありがとうございます。
早速試してみたのですが、
列データが見つかりませんでした
と出てしまいます。列にはちゃんと数値が入っているのですが、
GooUserラックさまの環境では正しく選択されますか?

お礼日時:2016/06/01 15:52

マクロ(VBA)は使っても良いですか?

    • good
    • 0
この回答へのお礼

はい、よろしくお願い致します。

お礼日時:2016/05/31 15:03

こんな感じで綺麗に並んでいるのでしょうか?

この回答への補足あり
    • good
    • 0
この回答へのお礼

GooUserラック さん
はい、きれいに並んでいます。

お礼日時:2016/05/31 14:08

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