• 締切済み

VBAカレンダーから予定をmsgboxに表示

If Application.CountIf(seets("seet3").Range("i5:i500"), C.Value) > 0 Then 構文の先頭がこれでよいのかも分かりません。教えてください、、、 ("sheet3")のi列5行目から500行まで予定日付、j列5行目から500行まで予定詳細が入力されています。("sheet2")にカレンダーがあり初期化して年/月を呼び出すとその月の予定日と予定詳細がmsgBoxに表示されるようにしたいのです。宜しくお願いします。

みんなの回答

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

#1です。思い出したので、別の方法を紹介します。 Sheet2に A列 B列 C列 月 年月日 行事 1 2016/1/4 新年会 1 2016/1/5 主要会社年始 1 2016/1/6 A社訪問 1 2016/1/7 立ち合い 1 2016/1/8 あ-1 1 2016/1/9 い-2 ・・・ 以下12月分までデータがあるとします。 A2には関数 =MONTH(B2)を入れて最下行まで式を複写します。 結果は上記A列の通り月数字の数値(1-12)になる。 データのどこかを選択して、CTRL+A (範囲選択) データーフィルタ  A列の第1行に、▼が出ているから、クリックして 「すべて選択」のレ点をクリックして、いったんすべて選択を解除 そして、データを見たい月数の四角(チェックボックス)にレ点を入れる OK これで、例えば「6」をクリックしたら、6月分だけがシートに残って(シートの第1行目から)見える。 選択によっては複数月分も同時表示できる。 これを印刷でもして、机の上でゆっくり見たり考えられる。 ーー これぐらいだとVBAを使うこともないと思うが、どうしてもやりたいなら、上記操作をしてマクロの記録を取って修正して、VBA化もできる。 ーー 小生が言いたいのは、VBAなんて言っているが、質問者がまず、エクセル(手操作)でできる機能(メニュー)に、より精通する(精通しなくても一通り勉強してどういうメニューがあり、何ができるのか、頭に入れる)ことだと思う。VBAは、「基本的にエクセルでできる機能しかできない」のだと、心得て勉強すること。その辺が不十分では、エクセルの利用としては、本末転倒と思う。

nebikitorikai
質問者

お礼

有難うございます、

nebikitorikai
質問者

補足

下記が私の使っている構文ですがForEach H のRange iと隣のjのデータをMSGBoxに表示させたいのです、宜しくお願いします。 Sub calendar_month12() Dim myDate As String Dim Nen As Integer, Tuki As Integer Dim i As Integer, j As Long, k As Integer Dim cn As Long Dim myTitleD, myTitle(1 To 1, 1 To 7) Dim myTable(1 To 6, 1 To 7) Dim c As Range Dim e As Range Dim f As Range myDate = Application.InputBox(Title:="年月の指定", _ Prompt:="年月を 2016/1 の形式で入力してください", _ Default:="2016/1", Type:=2) Nen = Year(myDate) Tuki = Month(myDate) myTitleD = Array("日", "月", "火", "水", "木", "金", "土") For k = 0 To 6 myTitle(1, k + 1) = myTitleD(k) Next k cn = 1 For j = DateSerial(Nen, Tuki, 1) To DateSerial(Nen, Tuki + 1, 0) If Day(j) <> 1 And Weekday(j) = 1 Then cn = cn + 1 myTable(cn, Weekday(j)) = Format(j, "yyyy/m/d") Next j Application.ScreenUpdating = False Range("A:H").Clear Range("B1").Value = DateSerial(Nen, Tuki, 1) Range("B2").Resize(1, 7).Value = myTitle Range("B3").Resize(6, 7).Value = myTable Range("B1").NumberFormatLocal = "yyyy""年""m""""" Range("B2").Resize(7, 7).HorizontalAlignment = xlCenter Range("B3").Resize(6, 7).NumberFormatLocal = "d" Range("B2").Resize(6, 1).Font.Color = RGB(255, 0, 0) Range("B7").Resize(6, 1).Font.Color = RGB(255, 0, 0) Range("C2").Resize(6, 1).Font.Color = RGB(0, 255, 0) Range("H2").Resize(6, 1).Font.Color = RGB(0, 0, 255) For Each c In Range("B3").Resize(6, 7) If Application.CountIf(Sheets("予定入力画面").Range("B5:B500"), c.Value) > 0 Then c.Font.Color = RGB(0, 255, 0) c.Font.Size = 30 End If Next c For Each e In Range("B3").Resize(6, 7) If Application.CountIf(Sheets("予定入力画面").Range("C5:C500"), e.Value) > 0 Then e.Font.Bold = True e.Font.Size = 16 End If Next e For Each f In Range("B3").Resize(6, 7) If Application.CountIf(Sheets("予定入力画面").Range("E5:E500"), f.Value) > 0 Then f.Font.Color = RGB(0, 0, 0) f.Font.Bold = True f.Font.Size = 30 End If Next f For Each G In Range("B3").Resize(6, 7) If Application.CountIf(Sheets("予定入力画面").Range("G5:G500"), G.Value) > 0 Then G.Font.Color = RGB(0, 255, 0) G.Font.Bold = True G.Font.Size = 30 End If Next G For Each H In Range("B3").Resize(6, 7) If Application.CountIf(Sheets("予定入力画面").Range("I5:I500"), H.Value) > 0 Then H.Font.Color = RGB(255, 0, 0) H.Font.Size = 30 End If Next H Application.ScreenUpdating = True End Sub

全文を見る
すると、全ての回答が全文表示されます。
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.1

前の質問とずいぶん違う質問内容だな。 Application.Countifなどを、質問のまず初めに出しているが、下記処理のほんの一部に過ぎないことだ。質問の説明としてはうまくない。 (1)抜出の条件となる、年月指定のやり方 質問でのSheet2はどういうデータ内容なのか。 日付(月)指定は(A)コンボボックス、(年と月を分けるやり方と分けないやり方)(B)MsgBox、(C)シートの年月セルをクリック(D)カレンダーコントロールなどが考えられる。 (D)を目指しとぃるのか。エクセルのVBA教科書では、そこまで説明されていないことが多い。 ウインドウズソフトでカレンダーなどを見慣れているかもしれないが、初心者には結構むつかしいのだ。 これを使うのは、少し早すぎるだろう。 ーー Application.InputBox(Prompt:="データを入力してください。", Type:=64)では、年月指定がない。 日付はエクセルでは、年+月+日までのものを使う(すなわち日を省けない。)ので、抜出の条件には、1日から月末日までの範囲を指定することになる。 エクセル関数にMonthPart(仮称。年月だけの文字列を作る関数)のようなものはない。 Inputboxで年月を指定させて、その月の1日と月末日で、日付範囲の開始と終了日を作る。 (2)抜出し 予定データのあるSheet3のI5:I500に日付(日付シリアル値とする、文字列なら話が別)、 Sheet3のJ5:JI500に予定内容の文章テキストがあるということだろう。 (2)結果表示 前質問時から、Msgboxでの表示に、こだわっているが、月平均は500/12の1か月あたり50件のようなので,Sheetに表示することを勧める。 別のユーザーフォームに表示など考えられるが、質問者には無理だろう。 こういうように(大げさに言えば)システム設計(やり方や使う道具立て)について、質問者は、エクセルの経験が少ないようで、この処理をこなす域に達してないと思う ましてVBAでやるのは無理で、やるとなると、質問は丸投げで、回答が出た後にいろいろ質問続出なのではないか。 マクロの記録から勉強を始めてはどうか。 ーーー 一例で(マクロの記録ではないが) (1)年月日セットは、Msgbox方法で Sub test01() d = InputBox("年/月") df = DateValue(d & "/01") dt = DateValue(d & "/31") MsgBox "期間は" & Format(df, "yyyy年mm月dd日") & Format(dt, "yyyy年mm月dd日") & "まで" Worksheets("Sheet3").Range("A1") = df Worksheets("Sheet3").Range("B1") = dt End Sub 上記は、月末はいつも31日だが月末日をセットする方法はありますが略。別途学んでください。 これを手入力すして、下記(2)のフィルタを実行する方法もある。 (2)フィルタ Sub test03() With Worksheets("Sheet2") Range("A1:A500").AutoFilter Field:=1, Criteria1:=">" & Range("A1") Range("A1:A500").AutoFilter Field:=1, Criteria1:="<" & Range("B1") End With End Sub シート画面で 開発ーマクローTest03ーオプションーCtrl+Dー実行 その後の実行はCTRLキーとDを同時に押すとフィルタされる。 (コマンドボタンクリックで実行方式は、今の質問者には過ぎたことと思いこちらにを紹介する。) マクロの記録を取ると出てくるコードがもとです。 Sheet3自身に結果が出る。他シートに出すのは少しむつかしい。 参照 http://www.moug.net/tech/exopr/0040016.html この操作をしてマクロの記録を取って、考えるしかないだろう。 これでまずは辛抱することだ。 後は操作方法の文章をシートに入れて、使いやすくすること。 参照 作製参照済みのマクロにショートカットキーを設定する http://www.officepro.jp/excelmacro/run/index1.html の後半

nebikitorikai
質問者

お礼

ありがとうございました。勉強します。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • msgboxの表示

    A列の値とC列の値をMsgboxに表示するにはどうしたらいいのでしょうか?C列で一番高い商品とその品名A列を表示させたいのですが・・ Sub hinmei() Dim i As Long For i = 2 To Range("C65535").End(xlUp).Row Dim x As Long Dim a As Long x = Cells(i + 1, 5) If Cells(i, 5).Value < x Then a = x End If Next MsgBox a End Sub

  • EXCEL VBA2010 MsgBox

    Sub 重複() Dim i As Long, j As Long For i = 6 To 500 For j = 3 To 3 If WorksheetFunction.CountIf(Range("C6:C500"), Cells(i, j)) > 1 Then Cells(i, j).Interior.ColorIndex = 6 End If Next j Next i End Sub このVBAに重複が何件ありますよというメッセージを出したいです。 MsgBoxの入れ方を教えてください。

  • excel2007 VBA countif関数

    CountIf関数が使えなくて(構文エラーになる)困っています。ワークシートで試した時には、普通に動いていたのですが、、、、A列のデータに重複がないか調べるプログラムで、flag列というのがあって ここに0が入っている行のデータのみ重複をチェックするようにする(途中)です。 矢印で書いた部分がおかしくて、なぜか構文エラーとなります。COUNTIF(A:A,A&i) という風に本当は使いたいのですが ":"で構文エラーになってしまいます。さんざん調べたのですが、私の力では解決できません。将来的にCOUNTIFのカウント数が1>でNGと表示させるつもりです。 よろしくお願いします。 'flagデータ数を配列に代入 For i = 1 To lRow flag_column(i) = Cells(i + 1, flag_column_number).Value '各行の情報を配列に代入 Next i '配列が0の行についてCOUNTIF関数を実行 For i = 1 To lRow If flag_column(i) = 0 Then j = COUNTIF(A1:A10, A & i)  <- ここ Cells(i + 1, 6).Value = j End If Next i

  • VBAで作成したいのですがご伝授お願いします

    困っております何卒宜しくお願いします。 シフト表をEXCELで作成しています。列に担当者と日付、行は二段で上段は午前、下段には午後で役割別に記号が入ります、この表から日毎の実績表を作成しています、行は二段なのでセルを結合し、解除して上段にまとめ他のシートにコピーしてあります。 そこで、お願いです、今はマクロ(たぶん)で展開していますがセルに構文が入っているため他の人が消してしうことがしばしばなのでVBA構文に直したいのです。 =IF(OR($A3="",B$1=2),"",IF(Sheet2!B3="","",Sheet2!B3&"/"&COUNTIF(Sheet2!B$3:B3,Sheet2!B3)))これは上段にまとめたシートから置き換える構文です。 この構文で出来たシートから日毎のシートを作成するのに =IF(ISERROR(INDEX(Sheet3!$A:$A,MATCH($B6&"/"&COUNTIF($B$6:$B6,$B6),Sheet3!B:B,0))),"",INDEX(Sheet3!$A:$A,MATCH($B6&"/"&COUNTIF($B$6:$B6,$B6),Sheet3!B:B,0)))を使っています。 この構文もお願いして使っているものであります。ワークシート関数でチャレンジしていますがうまくできません宜しくお願いいたします。

  • vbaカレンダーコントロール

    エクセルsheet上にカレンダーを作成しました。   D F G H ・  ・  ・  AH 5 6/1 6/2 6/3 6/4 ・ ・  ・   6 ・ ・ 24 カレンダーコントロールを使って土日のセル(5行から24行まで)に色をつけたいのですがコードの記述がわかりません。教えてください。イメージとしては、カレンダーコントロールの6月13日をクリックしたらセルに色がつく、です。 よろしくお願いします。

  • VBAのFindメソッドのエラー理由

    初歩的な質問ですがよろしくお願いいたします。 シート1のi行6列目の文字列をシート2の3列目から探してその行数をシート1のi行16列目に 引っ張ってくる記述をしたく、下記のようなコードを書いたところ1004のデバック表示がされました。下の記述をどうすれば正常に動くでしょうか。 Range(i, 16) = Worksheets(2).Range(Cells(5, 3), Cells(5, 3).End(xlsown)).Find(Cells(i, 6)).Row

  • Excelのカレンダーについて。

    Excelカレンダーについての質問です。 Excel2010を使用しています。 seet1にカレンダーを作りました。 セルに、それぞれ年と月を入力すると、その年月の日付と曜日が縦に表示されるように設定しました。更に日付・曜日の横に予定を書き込めるようにレイアウトしました。 しかし、このままだと年と月を変更すると、日付・曜日は変更されますが、予定の部分はそのままです。年と月を変更すると、日付だけでなく、予定の部分も変更できるようにするにはどうしたらよいでしょうか? また、複数の人のカレンダーを管理するようにしたいです。 seet2に、番号と氏名の組み合わせのメンバーリストを作っています。 seet1のセルに番号を入力すると別のセルに氏名が表示されるようにしています。 番号入力し、氏名を変更すると、カレンダーもその人用に変更できるようにするにはどうすればよいでしょうか? 色々検索してみたのですが、これというものが見つからず、質問させて頂いております。 また、わかりづらい文章となっているかもしれません。すみません。 ご回答よろしくお願い致します。

  • カレンダーにスケジュール反映

    エクセルで社内のスケジュール管理をしたいと考えているのですが、うまく反映させる方法がわからずに悩んでいます。内容は、1つ目のシートに各情報を箇条書き、2シート目を万年カレンダーにしてそこに1つ目のシートから情報を反映させるという感じです。 1つ目のシートに |住所|名前|記念日A(年/月/日)|記念日B(年/月/日)|記念日C(年/月/日)| が箇条書きで500件ほど羅列してあり、その情報を基に2シート目のカレンダーが特定の日にちに当てはまる情報をその日の予定として表示する形にしたいと思っています。 2シート目の万年カレンダーは 1行目を|@|年|@|月|*@の部分は自由に数字を入力 にしてあり、その下にカレンダーが表示されています カレンダーの形は 2行 |日|月|火|水|木|金|土| 3行 |1|2|3|4|5|6|7| 4行 |ここに各日付に一致した1シートの住所・名前を表示| 5行 |ここに各日付に一致した1シートの住所・名前を表示| 6行 |ここに各日付に一致した1シートの住所・名前を表示| 7行 |ここに各日付に一致した1シートの住所・名前を表示| 同じ日付で一致する情報が重複する場合5~7行を使用して、すべて表示させたいです。 分かりにくい質問で申し訳ありません。ご教授いただけたら大変ありがたいです。 他に方法があれば、そちらでアドバイス頂いても構いません。 よろしくお願い致します。

  • エクセル(別のシートの変動する任意の場所からの読み

    分かりにくいタイトルですみません。 エクセル2007を使って他のシートの情報を読み込みたいと思っています。 seet1に結果を残し、seet2で計算をする様にしたいと思うのですが seet2には、1日から31日までの情報が先月の売り上げが記録されていて 全部で31列の2行(列番号、先月売り上げ)で出来ています。 先月の売り上げをseet1に呼び出したいのですが、 seet1で列番号で指定して、任意の列の2行目を呼び出したいんです。 エクセルにはあまり詳しくなく非常に困っています。 是非教えてください。

  • EXCEL VBA オートフィルタの値コピー2

    たびたびすいませんよろしくお願いします。 EXCEL VBA オートフィルタの値コピーの追加質問です http://okwave.jp/qa4803815.html?ans_count_asc=20 オートフィルタ後、1日当たり行は10~15行あります、そのうちH列からM列まで、ある1行にデータがありますそのデータをH列から順番にSheet1のM20とM28までコピーしたいのです、ただ日によってその列は空欄の時やM列だけの時もありますもあります。さらにN列からP列まで同じようにデータがある時(H列からM列と行が違うときがあり)、上にある行からSheet1のM20とM28に上詰めでコピーしたいのです。 もっと簡単にいいますとH列からP列まである値を上の行からさらにH列から順番に上詰めでSheet1のM20とM28にコピーしたいのです。 なにとぞよろしくお願いします。 Sub データコピー() Range("AB17") = Format(Sheet3.Range("A3").Value, "yy") Range("AE17") = Format(Sheet3.Range("A3").Value, "mm") Range("AH17") = Format(Sheet3.Range("A3").Value, "dd") Range("AK17") = Format(Sheet3.Range("A3").Value, "aaa") Range("D22") = Sheet4.Range("D3").Value Range("D25") = Sheet4.Range("E3").Value Range("H22") = Sheet4.Range("F3").Value Range("D22") = Sheet4.Range("G3").Value Range("L22") = Sheet4.Range("K3").Value Range("Q22") = Sheet4.Range("L3").Value Range("U22") = Sheet4.Range("M3").Value .   .   . End Sub