• ベストアンサー

コード入力してセルを選択するマクロ

お読み頂きありがとうございます。  A列にコードが並んでいて、先頭行には横に1~31の日付を表す数字が入っているEXCELシートがあります。コードは5桁で重複はありません。  この表でコード(ex.12345)と日付(ex.20)を指定することでそのコードと日付が交差する位置のセルを選択するマクロが作れるでしょうか。  例えば、マクロを実行するとコードと日付を入力するウインドを開いてコードと日付をそれぞれ入れる、あるいはコードと日付を組み合わせて(1234520)のように入力するとコード12345の20日に該当するセルを選択するようにしたいのですが。  当方、VBAの知識はほとんどない素人です。難しい解答が付いたらお礼も書けなくて困るな、と思いながら質問を書いている状態です。どうぞよろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.4

#1です。 簡単なコメントを入れときます。 VBAヘルプがインストールされているなら InputBox 等の単語内にカーソルを置き、F1キーを押すと該当のヘルプが見れます。 Sub Test() Dim fs, myDay As Integer  'InputBoxでコードと日にちを指定して変数に代入(Type:=1は数値)  fs = Application.InputBox("CD+日", "指定", Type:=1)  'キャンセルや閉じるの場合はここで終了  If fs = False Then Exit Sub  '変数fs が 6桁未満だとここで終了  If Len(fs) < 6 Then Exit Sub   'mid関数で6桁以降をmyDayに切り分け。CIntは無くても動く   myDay = CInt(Mid(fs, 6, Len(fs)))      'Left関数でfsを先頭から5桁に置き換え。CIntは無くても動く   fs = CInt(Left(fs, 5))    'A列をA1からfsで検索。r は、発見→そのRange、無い→Nothingになる  Set r = Columns(1).Find(what:=fs, after:=Range("A1"), LookAt:=xlWhole)    '見つからない時はここで終了  If r Is Nothing Then Exit Sub    '見つかったセル r の Offset(行,列)を選択  r.Offset(0, myDay).Select End Sub #3さんでは無いけど、#3は下記のようにするとOKでしょう。 Find の lookat:=xlWhole は、編集-検索で「完全に一致する~」にチェックが無い状態で実行すると誤動作しますので追記してます。(1を指定しても10を選ぶ) dt = CDate(InputBox("日付")) を dt = InputBox("日付") に i = Range(Cells(2, "A"), Cells(d, "A")).Find(cd).Row を i = Range(Cells(2, "A"), Cells(d, "A")).Find(cd, lookat:=xlWhole).Row に j = Range("B1:AJ1").Find(dt).Column を j = Range("B1:AJ1").Find(dt, lookat:=xlWhole).Column に MsgBox Cells(i, j) を Cells(i, j).Select に

macbain
質問者

お礼

2度目のご回答ありがとうございます。  何せホントの初心者で、せっかくつけていただいたコメントも100%理解はできないのですが、少し霧が晴れたような感じです。また、No.3さんのマクロの書き換えもご指示のとおりでうまく動きました。  この場をお借りして他のお二方にも再度お礼を申し上げます。ご親切に本当に感謝しています。ポイントを2つの回答にだけしかつけられないのが誠に心苦しいです。ありがとうございました。

その他の回答 (3)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

VBAでの回答も良いが、 関数でできる問題と思います。 INDEX関数、MATCH関数の組合せでできる。 昨日の質問 http://oshiete1.goo.ne.jp/kotaeru.php3?q=2163818 と実質同じではないですか。 私の回答など見てください。 VBAでは Sub test01() On Error GoTo err cd = InputBox("コード") dt = CDate(InputBox("日付")) d = Range("A65536").End(xlUp).Row i = Range(Cells(2, "A"), Cells(d, "A")).Find(cd).Row j = Range("B1:AJ1").Find(dt).Column MsgBox Cells(i, j) Exit Sub err: MsgBox "見つかりません" End Sub で良さそうです。 ただ MsgBox Cells(i, j) は表示するだけなので、改造するには、VBAの知識が要りますので 使えるかな。

macbain
質問者

お礼

ご回答ありがとうございます。  昨日の質問と回答についてはよく理解できます。ただ今回はその位置のセルにあるデータを抽出したい、知りたいというのが目的ではなく、あくまで該当するセルを選択するまでを目的としています。  回答に記述していただいたマクロは私の表ではうまく動きませんでした。(見つかりません、のメッセージボックスが出てきてしまう)  おそらくマクロの中に書かれているセルあるいはセル範囲が私の表と一致しないのだろうと思いますが、記述の内容がちゃんと理解できないので私の力では修正できませんでした(T_T)  それとおっしゃるとおり、メッセージボックスでのセル位置の表示では今回の目的が達成できず、「改造する知識」にはまったく欠けております(^^;

回答No.2

こんな方法もありますね。 1日から9日までは0を付けて、入力値は7桁としました。 Sub macro1() Dim コード, 日付 As Integer 値 = InputBox(prompt:="値を入力して下さい", _ Title:="テスト") If Len(値) <> 7 Then MsgBox "7桁の数値で入力して下さい" End If コード = Val(Left(値, 5)) 日付 = Val(Right(値, 2)) Application.WorksheetFunction.Index(Range("B2:AF65536"), _ Application.WorksheetFunction.Match(コード, Range("A2:A65536"), False), _ Application.WorksheetFunction.Match(日付, Range("B1:AF1"), False)).Activate End Sub ---------------------------------------------- promptは記述したメッセージが表示されます。 TtitleはInputBoxのタイトルとして表示されます。 デフォルト値の表示や、InputBoxの表示位置の指定も可能です。

macbain
質問者

お礼

 真夜中と言うより明け方(!)にご回答をいただいてますね。  こちらに書いていただいたマクロついては、多少(普通にEXCEL上で使用する)関数について知識があったので理解しやすかったです。というか、マクロ上では関数はこうやって使うのかぁ、という感じですね。(そういうレベルです)  色々経験をつんで勉強して、早くNo.1さん、No.2さんのようになりたいものです。ご親切にどうもありがとうございました。

  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.1

こんな感じでしょうか? 1234520と打ちます。 Sub Test() Dim fs, myDay As Integer  fs = Application.InputBox("CD+日", "指定", Type:=1)  If fs = False Then Exit Sub  If Len(fs) < 6 Then Exit Sub   myDay = CInt(Mid(fs, 6, Len(fs)))   fs = CInt(Left(fs, 5))  Set r = Columns(1).Find(what:=fs, after:=Range("A1"), LookAt:=xlWhole)  If r Is Nothing Then Exit Sub  r.Offset(0, myDay).Select End Sub

macbain
質問者

お礼

 真夜中にこんなマクロを書いていただきまして本当にありがとうございます。  現在の私のレベルですと5行目までは何が書かれているのか理解できますが、myDay = CInt(Mid(fs, 6, Len(fs)))以下はほとんどチンプンカンプンです。本やネットで調べながら少しずつ理解して、成長して行こう(^^;と思います。 ご親切ありがとうございました。

関連するQ&A

  • EXCELのマクロ。セルが選択されているかどうか。

    Excel2000のVBAでセルが選択されているかどうかチェックしてセル以外の画像などが選択されていればエラーメッセージ、そうでなければマクロを実行させるにはどう書けばいいのでしょうか?

  • カレンダーコントロールからセルとシート名に日付を入力

    エクセルVBAコードについてですが、マクロを実行すると、カレンダーコントロールが表示され、選択したカレンダーの日付をクリックすると、任意に指定したセルとシート名にその日付を表示させたいのですが、どのようなコードを書けばよいのか教えてください(><) ちなみに、今はインプットボックスから日付を入力する方法をとっていますが、都度「2008年○月○日」と入力しなくてはいけませんので、効率が悪く困っています。 どうぞ宜しくお願い致します。

  • データベースの最下行に移動するVBAがわからない

    データベースの最下行にデータを入力すべく、マクロを実行すると データベースの先頭のセルが選択された状態で実行されますが 入力後にその入力を終えた最下行の先頭のセルが選択されるように マクロを実行したいのですがどうすればわかりません。 エクセル2010にてVBAで作成しています。 どのようなコードを入力すればできるでしょうか?

  • エクセルVBAでセル選択

    エクセル2000でリストを作成し、VBAで編集しようとしています。 A列に入力されているコードの先頭に「’」をつけて文字列とするための関数をB2のセルからA列のデータが入力されている最後のセルの隣までコピーしたいと思っています。 A列の最終セルを取得するVBAは分かったのですが、その値をB列の選択範囲として使用する方法がわかりません。 エクセルVBAは全くの初心者です。 どなたか教えてください!

  • エクセルのマクロでセル選択するには

    初心者です! エクセルのSheet1に30箇所のセルをマクロで選択したいのですが、 たまに選択するセルが変わります。 そこで、Sheet2のA1から下へSheet1の選択する位置を「B2」「C5」「D10」・・・としてマクロで一発で30箇所のセルを選択する方法を教えてください Sheet2のA1から下へ入力するセル位置はその都度変化します。 変化したときにそのマクロを実行すると選択できるといいのですが!! よろしくお願いします。

  • マクロ セルに入力されたシートを選択する

    なかなか理解出来ない初心者です。 セルに入力したシート名で、そのシートを選択するマクロの記述はどうするのでしょうか? また、そのシートが選択された時にメッセージを出力したいです。 御指導お願い致します。

  • Excel97でセルに初期値を入れとくには?

    windows98でExcel97を使っています。 ひとつのセルに" 平成  年 月"と表示しておいて,そのセルに日付を"2002/10"と入力したら、和暦の"平成14年10月"というように表示したいのですが、一つのセルで出来ますでしょうか? マクロ、VBAは使用したくありません。お知恵を貸してください。

  • マクロの記録がうまくいきません。マクロの記録→セルを押してWEBクエリ

    マクロの記録がうまくいきません。マクロの記録→セルを押してWEBクエリを選択→データを取り込み→シートに表示されそれを日付順にセルの並び替えを選択→並び替えを確認→マクロの記録の停止の順でやっているのですが、マクロを実行するとデータは記録できているけど日付順の並び替えのみができていません。なぜでしょうか?何回記録しなおしても日付だけ並び替えされて記録されていません。ご教授お願いします。Windows 7 でExcel2007を使用しています。

  • エクセルで特定のセルを選択したい(マクロ)

    以下のようなマクロを組もうとしていますが、出来ません。 sheet1において 1)マクロを実行すると、メッセージボックスが出る。 2)メッセージボックスに入力した文字と同じ文字が入力されているセルを選択する。 3)2)のセルの1行下のセルを選択する。 2)で必ずエラーが出てしまいます。どのような方法が良いのか教えていただけるとありがたいです。よろしくお願いします。

  • 入力セルから入力セルに罫線をひく

    BBAでお聞きします。 セルB3「あ」が入力してあり、F5に「い」が入力してあるとします。B3;F5まで罫線をマクロ設定後、ボタンを作成して記入できますでしょうか。 Excelで「B3」を選択後、shift+ctrl+endで「F5」まで指定後、相対マクロで記憶させます.その後、1度クリアー後、再度「B4」から「F4」まで選択しますとF5まで罫線が引かれます。 記入セルから記入セルまでの罫線の引く、VBAをご教授ください。 宜しくお願いします。

専門家に質問してみよう