• ベストアンサー

エクセル マクロ ボタン

A1に入力規制のリストで10個ほどリストを作成し B1に日付を入力します。 C1に検索ボタンを作成します シートはいろいろ作成しておく シート名はリンゴ2017年6月27日と表記されている 他に〇〇日付で表記したシートを複数用意しています たとえばA1にリンゴとリストから選び、B1に2017年6月27日と 入力しC1のボタンを押すと D1にリンゴと日付が一致したシート名があればD1にシート名を表示する マクロを作りたいのですが、プログラムが全くわかりません 教えて頂けないでしょうか?

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

  • ベストアンサー
回答No.4

ちょぃと暇潰しに。 Dim myStr As String Dim Sh As Worksheet   If Range("A1") = "" Or IsDate(Range("B1")) = False Then     MsgBox ("値が不正です")     Exit Sub   End If   myStr = Range("A1") & Format(Range("B1"), "yyyy年m月dd日")   Range("D1").ClearContents   For Each Sh In Worksheets     If Sh.Name = myStr Then       Range("D1") = myStr       MsgBox ("見つかりました")       Exit Sub     End If   Next   MsgBox ("見つかりません") あ、前の回答でも言い忘れましたが、 日付は「yyyy年m月dd日」で考えてます。 意味はあまりないです。 って、もう見ないかもしれんけどねー(笑)。

jikkenn
質問者

お礼

ありがうございます

その他の回答 (3)

回答No.3

何を目的にしているか、イマイチ伝わってこなかったりします。 単純に、「該当シートが無かったら空白、在ったら指定文字列」 で、ここでいう「指定文字列」が仰る「〇〇日付」で良いのであれば  D1セル:=IF(ISERROR(INDIRECT(A1&TEXT(B1,"YYYY年M月DD日")&"!A1")),"",A1&TEXT(B1,"YYYY年M月DD日")) というワークシート関数で十分対応できそうです。 マクロもボタンも必要ないです。 > プログラムが全くわかりません のなら、なおさらマクロはオススメしません。 ワークシート関数ならまだなんとか調べながら理解できるでしょうし、 あとのメンテナンスが楽です。 逆にマクロでやるにしても、そんなに難しくは無いです。 少し、勉強しておけば難なく作れるレベルです。  ※「そのほか」の処理が隠れていなければ、ですが。 流れは ・D1セルを消去 ・A1セルと日付文字列に直したB1セルを結合(A) ・全シートに対し   ・シート名が(A)と合致しない⇒次のシートへ   ・シート名が(A)合致した⇒D1セルにシート名を転記    (・ループを抜ける)  以上、ループ くらいですね。 関数でできる、と言い放った手前、細かい紹介はしませんが、 ほぼすべてインターネットで調べれば情報が出てきます。 出てこないのは「処理を入れたいブックの細かい情報」くらいですね。

jikkenn
質問者

お礼

ありがうございます 簡単にできました

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

初心者らしく、長々書いているが、シートを、シート名(もちろん文字列で)を指定して、シートを選択したいだけではないのか。 シートSheet1にボタンを1つ設けて、そのクリックイベントに Sub ボタン1_Click() sn = InputBox("シート名") MsgBox sn Application.Goto Sheets(sn).Range("D5") End Sub ーー この後何がしたいのかはっきりさせてない。だから質問に答えにくい。 このブックの、シートの数もほぼ何十(何百)シートあるのか書いておくべきだろう。 ボタンを見えるようにする、シートSheet1を毎回選択しないとボタンが見えないが、この点手数。 ユーザーフォームを使って、選択したいシート名や、「探せ」の起動を掛けた方が便利だろうが、初心者では、今から勉強するのでは大変だろう。 ーー 質問のようなことは、VBAで中級程度に学習が進んで、VBAを使わないとスムーズにいかないだろう。 ======= 1つの方法 シートタブ部の左端の◀▶の間で右クリックすると「シートの選択」ウィンドウが出るから、シート名の一覧から選択して、そのシート名をクリック。 30シートぐらいまでなら便利かも。 参考 http://www.atmarkit.co.jp/fwin2k/win2ktips/897choosesheet/choosesheet.html

jikkenn
質問者

お礼

ありがうございます

  • mt2015
  • ベストアンサー率49% (258/524)
回答No.1

質問文では年月日の数字が全角になっていますが、半角で宜しいですよね? こんな感じでどうでしょう。 Sub Sample()   Range("D1") = ""   sSheetName = Range("A1").Value & Format(Range("B1").Value, "YYYY年M月D日")    On Error GoTo ErrTrap   nCount = Sheets(sSheetName).Index   Range("D1") = sSheetName ErrTrap:   On Error GoTo 0 End Sub

jikkenn
質問者

お礼

ありがうございます 簡単にできました

関連するQ&A