お世話になります。
現在、excelでスケジュール帳を作成しています。
1枚のシートで1年分です。
そこで、何かの方法を使って
日付を選択→その日付にカーソル(フォーカス?)を移動させたいと思っています。
ユーザーフォームを他で使用するので、そこに日付の選択も付け加えようとしています。
1.テキストボックスに日付を入力させる。
テキストボックスを日付設定することが、まず難しそうなので断念。
2.カレンダーコンロールを発見。
これなら日付を選ぶだけ。
ただし、どうやってそれをカーソル移動に反映させるかがわからず。。
ネットで調べましたが、自力では解決できませんでした。
アドバイスお願いします。
XP、excel2007使用中。
No.8ベストアンサー
- 回答日時:
こんにちは。
いくら、VBAでも、以下の情報を言っていただかないと、いくらやっても、Find検索はできません。
>Sheet2!A:A は、私の方では、単なる数字1,2ではなく、
>A4=DATE($A$1,$B$1,1) = 2008/10/1 表示は d つまり 1 というようにしています。
>なので、検索にかけると、シリアル値になっています。
ただし、私は、
数式をこのようにしました。
=DATE($A$1,B$1,ROW(A1)) ....1~
セルの位置など、詳しく言っていただいたら、もう少し、速い検索は可能だと思います。
'-------------------------------------------
Private Sub Calendar1_Click()
Dim rng As Range
Dim c As Variant
Dim mDate As Variant
Set rng = ActiveSheet.UsedRange
mDate = CLng(Calendar1.Value)
For Each c In rng
If c.Value2 = mDate Then
c.Select
Exit For
End If
Next c
Set rng = Nothing
End Sub
'-------------------------------------------
大変申し訳ありませんでした。
そういう具体的な情報お伝えしていませんでした。
ご提示いただいた式で、ばっちり動きます。
念のため、実際のEXCELでは、
A3=2009、J3=2010。
B4=10、E4=11 … 3つおきに 月の数字。
B5=あ さん C5=い さん、E5=あ さん、F5=い さん …続く
A6=DATE($A$3,$B$4,1)、A9=A6+1、~A96=IF(OR(A93="",A93=EOMONTH(A12,0)),"",A93+1) ーー10月分
D6=DATE(A3,E4,1) ~ --11月分
という感じで1年分の表になっています。
ActiveSheet.UsedRange は、調べたら $A$1:$AJ$101 と出ました。
No.9
- 回答日時:
こんにちは。
私のほうのVBAの回答では、今のところ、この程度しかありません。表の構造からすると、今の方法では、ほとんど速くならないように思います。検索に必要なデータのみを拾い上げる手間のほうが多いからです。
私自身は、UserFormはあまり好きではないのは、Excelのシートがオブジェクトに他ならないので、そのオブジェクトを増やすことになるからです。私なら、シートのところに、TextBox(コントロールツール)を置いて、そこで検索する方法を取りますが、内容的には、少し複雑になります。
もしかしたら、お読みになっているかもしれませんが、以下で、テキストボックスで、日付を入れる注意点を一覧にしています。
http://oshiete1.goo.ne.jp/qa5388151.html
VBA テキストボックスで日付を変更するとエラー
いろいろアドバイスありがとうございます。
参考URLの内容は初めて知りました。
奥が深くて難しいです。。
速い、遅いのスピードに関しては、特に問題にならないようなので、
教えていただいたコードを使用させていただきます。
本当にありがとうございました。
No.7
- 回答日時:
No.1・2・5です!
ほんとうに何度もごめんなさいね。
補足にある
>MATCH(DAY(B1),Sheet2!A:A,0) という部分です。
ここで、日を取得したいわけですよね。しかしエラーになります。
の件ですが・・・
結局この部分の数式は○行目という行番号を取得したいだけですので、
シリアル値で列を判断し、その列の中でMATCH関数を使うと
かなりややこしい数式になってしまいます。
簡単な方法としては、
仮にSheet1のF列に作業用の列を設けて
F2セル、すなわち2行目(Sheet2の1日目の行)から1・2・3・・・というように31まで数値を入れておきます。
それを参照してもかまわないと思いますよ。
前回の表では、2009/11/5 は6行目になりますので
6という数値を導き出せば良い訳です。
最終的に前回の表そのままの配置で
B2セルの数式を
=IF(B1="","",HYPERLINK("#sheet2!"&VLOOKUP(MONTH(B1),D2:E13,2,0)&MATCH(DAY(B1),F:F,0),"ここをクリック!"))
これで何とか希望に近い形にならないでしょうか?
どうも何度も長々と失礼しました。m(__)m
たびたびありがとうございます。
私も作業列を作って作動できるようになりました。
これをできれば下の方の補足で書きましたがVBAにて処理できるように思案中です。
ほんと、何度もありがとうございます。
No.6
- 回答日時:
こんにちは。
#4の回答者です。
Excel 2007 で試してみましたが、問題なく検索しています。
懸念していた、Excel97 や 2000のような現象は現れませんでした。
たぶん、コードの理屈は分かっていただけていると思います。
>A列=10月、D列=11月、G列=12月… と、1ケ月単位で区切っています。
となっている以上は、Find メソッドが楽だとは思います。
>日付は ユーザー定義 d となっています。
しかし、ユーザー定義 d となっても、中身のシリアル値であるのかは、掲示板には書かれていません。こちら側が想定している範囲なら、このコードの理屈で検索できるはずです。こちら側が知らされていない部分があるようです。
実際、私がカレンダーを作るときに、すべてのシートにリテラルなシリアル値を入れません。数式で入れていきます。そうすると、今のままでは検索では出来ないはずです。
Find メソッドを使う限りは、同じ文字を探しているわけで、Value として表面的なものを検索するか、Formula として、中身を検索するかどちらかしかないのです。表面的なものは、数字は、複数ありますから、間違った場所に行ってしまいます。
リテラルなシリアル値(ただの数字)を検索するものは、ここにはありません。そういう方法がないわけではありませんが、いままでの、まったく出来ないと確認できてからにしてほしいです。
なお、Excel 2007 では、「2009/11/1(yyyy/m/d)」ではなく、「2009/11/01(yyyy/mm/dd)」 となっていましたが、Date 型自体が、同じ書式ですから、問題はないです。
この回答への補足
何度もありがとうございます。
正直おてあげです。なぜだめなのかわかりません。
そこで大変申し訳ありませんが、tom04 さまの案を利用しようと思います。
カレンダーで選択した日付を 同じユーザーフォームに作ったテキストボックスに入力させ、それからリンクさせられたら、と。
まあ、VBAにまだなおせず四苦八苦していますが。
とりあえず、別シートではリンクできるようになったので。
がんばります。
No.5
- 回答日時:
No.1・2です!
たびたびごめんなさい!
前回のお礼の欄をよませてもらい
もう一度方法を考えてみました。
日付の列の右となりのセルをアクティブにすればすぐに入力できると思いますので、
Sheet1のB1セルに日付(シリアル値)を入力し、B2セルをクリックすると
Sheet2のその日付の右となりのセルに飛ぶようにしています。
(Sheet2の日付はシリアル値ではありません。単純に数値のみを入力しています)
↓の画像で左側がSheet1で右側がSheet2になります。
Sheet2の表はこんな感じで2列おきに各月の日付けが入っているものとします。
Sheet1に表を作っておき、入力した日付に対する列を選択するようにしています。
Sheet1のB2セルに
=IF(B1="","",HYPERLINK("#sheet2!"&VLOOKUP(MONTH(B1),D2:E13,2,0)&MATCH(DAY(B1),Sheet2!A:A,0),"ここをクリック!"))
という数式を入れています。
これでB1セルにシリアル値を入力後、B2セルをクリックしてみてください。
何とか希望に近い形にならないでしょうか?
以上、お役に立てば幸いですが、
的外れなら読み流してくださいね。m(__)m
この回答への補足
見本まで作っていただき、ありがとうございます。
が、私のではうまくいきません。工夫が必要みたいです。
>MATCH(DAY(B1),Sheet2!A:A,0) という部分です。
ここで、日を取得したいわけですよね。しかしエラーになります。
Sheet2!A:A は、私の方では、単なる数字1,2ではなく、
A4=DATE($A$1,$B$1,1) = 2008/10/1 表示は d つまり 1 というようにしています。
なので、検索にかけると、シリアル値になっています。
DAY(B1) は日付の数字だけなので、macthしてこないと。
これを解消しなければいけないようです。
考えてみます。
No.4
- 回答日時:
こんにちは。
すみません、ここらあたりは、バージョンの違いで、分からなくなっていました。書式が、d なら、前回のコードでは出来ませんね。Excel 2007 では試していませんが、中身を、このようにしてみたら出来るのではないかと思います。シリアル値が、2009/11/1(yyyy/m/d) のようになっていることが条件です。
Set rng = ActiveSheet.UsedRange
mDate = Calendar1.Value
Set r = rng.Find(mDate, , xlFormulas, xlWhole)
On Error Resume Next
r.Select
On Error GoTo 0
Set rng = Nothing
Set r = Nothing
No.3
- 回答日時:
こんばんは。
>テキストボックスを日付設定することが、まず難しそうなので断念。
確かに、おっしゃるとおりかもしれません。ここで、私の書いたものを読まれたような気がします。
>2.カレンダーコンロールを発見。
カレンダーコントロールをお持ちなのですね。なくても、VB6 Runtime のDTPicker があります。
シートに本年1年分があるとして、カレンダーコントロールから選択しようとするわけですね。
UserForm にカレンダーコントロールを設けます。
条件的として、シート上では、シリアル値で書かれてあることです。
そして、同じ書式で書かれてあることが条件です。テキストで検索するからです。
'-------------------------------------------
Private Sub Calendar1_Click()
Dim rng As Range
Dim r As Range
Dim sFmt As String
Dim mDate As Variant
Set rng = ActiveSheet.UsedRange
sFmt = rng.Cells(2, 2).NumberFormatLocal '書式を取得
mDate = Format(Calendar1.Value, sFmt)
Set r = rng.Find(mDate, , xlValues, xlWhole)
On Error Resume Next
r.Select
On Error GoTo 0
Set rng = Nothing
Set r = Nothing
End Sub
この回答への補足
回答ありがとうございます。
ご提示いただいた式をあてはめてみましたが、動きません(^_^;)
sFmt = rng.Cells(2, 2).NumberFormatLocal の
cells(2,2)は、ひとつめの日付のところをさすのかなと考えましたが、違いますか?
findは文字列の検索ということなので、たぶん動かないんですね。
いま、日付は ユーザー定義 d となっています。
これを文字列に変換すればいいのかなと思うのですが、まだまだ思案中です。
とりあえずお礼を。進展あれば報告します。
No.2
- 回答日時:
No.1です!
たびたびごめんなさい。
投稿した後に気づきました。
A列の作業用の列は不要ですし、数式ももう少し簡単にできます。
日付がA列にあるとすると1列ずれますので
D2セルに日付を入力し、D3セルをクリックするとその日付セルに飛ぶようにします。
D3セルの数式を
=IF(D2="","",HYPERLINK("#A"&MATCH(D2,A2:A400,0)+1,"ここをクリックすると↑のセルに飛びます"))
に変更してみてください。
これで前回と同様の動きになると思います。
どうも何度も失礼しました。m(__)m
回答ありがとうございます。
ご提示いただいた式で動きます(^.^)
ただ、日付はA列だけではありません。
具体的には、
A列=10月、D列=11月、G列=12月… と、1ケ月単位で区切っています。
これをどう表現するか、応用ですね。
頑張って考えます。
ありがとうございました。
No.1
- 回答日時:
こんばんは!
参考になるかどうか判りませんが・・・
当方使用のExcel2003の場合です。
↓の画像で説明させていただくと
まず作業用の列としてA列を挿入し、連番を付けておきます。
そして、E2セルに日付(シリアル値とします)を入力し、E3セルをクリックすると
その日付のセルがアクティブになるようにしてみました。
E3セルに
=IF(E2="","",HYPERLINK("#B"&INDEX($A$2:$A$400,MATCH(E2,$B$2:$B$400,0)+1),"ここをクリックすると↑のセルに飛びます。"))
という数式を入れています。
これでE2セルに日付を入力し、E3セルをクリックすればB列のその日付のセルに飛びます。
尚、1年分のカレンダーという事なので
数式は400行まで対応できるようにしています。
以上、参考になれば幸いですが、
的外れなら読み流してくださいね。m(__)m
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) Access DTPickerの初期表示月を変えたい 1 2022/08/02 08:55
- Excel(エクセル) 【Excel関数】カレンダーで文字が入っていたら転記 4 2023/07/24 23:28
- Access(アクセス) アクセス where句を使用して複数条件抽出をするには 2 2022/08/29 13:24
- その他(プログラミング・Web制作) google formsを使ったタスク依頼フォーム作成におけるご相談 1 2023/06/22 15:55
- Excel(エクセル) エクセルでカレンダーを作りたい 5 2023/05/16 07:32
- Visual Basic(VBA) Excelのマクロコードについて教えてください。 1 2022/03/27 13:25
- Excel(エクセル) DATE関数で指定する「日」のセルが関数の場合の対処法 5 2022/09/14 15:46
- Excel(エクセル) Excel ドロップダウンリスト(入力規則)に関してです データの入力規則で元データ79000行のド 3 2023/07/17 10:06
- その他(データベース) Accessフォームからパラメーターで表示したレコードを指定のExcelのセルへ転送する方法について 2 2022/08/22 18:04
- Excel(エクセル) Excelエクセルが勝手に10MBになりました シートを沢山使ってデータを書いてました。挿入のテキス 4 2023/07/25 15:12
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【関数】スペースがいくつ入っ...
-
西暦や和暦の表示をyyyymmdd表...
-
【Microsoft Office Excel Comp...
-
Excelはなんで先頭の0を消すん...
-
Excelのセルを飛ばして入力する
-
別シートからの文字を変更
-
エクセルの行の抽出について質...
-
Excelのオートフィル
-
Excel 2019 のピボットテーブル...
-
スプレッドシート クエリ関数 1...
-
excelの不要な行の削除ができな...
-
Excel初心者です。 詳しい方、...
-
【Excel】セル内の時間帯が特定...
-
Excel初心者です。 詳しい方、...
-
EXACT関数とIF関数の組み合わせ...
-
Excelのグラフ軸について
-
スマートな関数を教えて下さい。
-
Excelで全角を半角にしたいので...
-
【マクロ】エクセルにかいてあ...
-
Excel:一部のフォントでセルの...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ファイル内にある数字の出現回...
-
Excel関数の先頭に「@」が入っ...
-
エクセルの気味悪い不思議
-
Excel VBAで、実行時にsheet上...
-
表示されている人数だけを数え...
-
他人が作ったマクロの理解
-
Excelの関数について質問です。
-
Excel 集計表
-
エクセル 日時の計算式について
-
Excelの関数に関して質問です。...
-
エクセル:セル内の文字列の下...
-
絞り込み検索
-
エクセルの関数で
-
エクセルの書式設定について教...
-
余分なEXCELファイルに印刷され...
-
VBA 同一シート内での転記の仕方
-
長期休みの関数はありますか
-
Excelの空のセル
-
エクセルで入力してある文を別...
-
Excelのマクロで、セルを結合し...
おすすめ情報